我正在使用 Flutter-SQLite-Dart 開發移動應用程式。這個應用程式基本上是一個測驗應用程式。該應用程式運行良好,但最初運行時會彈出特定錯誤,然后按編碼恢復。
從模型呼叫問題索引時發生以下錯誤,然后應用程式正常作業。
![運行時拋出 NoSuchMethodError。方法 '[]' 在 null 上被呼叫。接收器:空。嘗試呼叫:[](0)。如何解決這個錯誤?](https://img.uj5u.com/2021/11/25/84ac4945ac874601b33b1f12fcf14daf.png)
僅第一次運行時出現此錯誤。據我所知,這個錯誤的發生是因為在初始化之前呼叫了這個狀態,但我已經在 initState() 函式中正確地初始化了它。
======== Exception caught by widgets library =======================================================
The following NoSuchMethodError was thrown building:
The method '[]' was called on null.
Receiver: null
Tried calling: [](0)
When the exception was thrown, this was the stack:
#0 Object.noSuchMethod (dart:core-patch/object_patch.dart:68:5)
#1 _QuizPageState.buildNotes.<anonymous closure> (package:loginform_validation_demo/QuizApp/screens/quiz/quiz_screen_stateful.dart:97:28)
#2 SliverChildBuilderDelegate.build (package:flutter/src/widgets/sliver.dart:456:22)
#3 SliverMultiBoxAdaptorElement._build (package:flutter/src/widgets/sliver.dart:1214:28)
#4 SliverMultiBoxAdaptorElement.createChild.<anonymous closure> (package:flutter/src/widgets/sliver.dart:1227:55)
#5 BuildOwner.buildScope (package:flutter/src/widgets/framework.dart:2531:19)
#6 SliverMultiBoxAdaptorElement.createChild (package:flutter/src/widgets/sliver.dart:1220:12)
#7 RenderSliverMultiBoxAdaptor._createOrObtainChild.<anonymous closure> (package:flutter/src/rendering/sliver_multi_box_adaptor.dart:349:23)
#8 RenderObject.invokeLayoutCallback.<anonymous closure> (package:flutter/src/rendering/object.dart:1968:59)
#9 PipelineOwner._enableMutationsToDirtySubtrees (package:flutter/src/rendering/object.dart:916:15)
#10 RenderObject.invokeLayoutCallback (package:flutter/src/rendering/object.dart:1968:14)
#11 RenderSliverMultiBoxAdaptor._createOrObtainChild (package:flutter/src/rendering/sliver_multi_box_adaptor.dart:338:5)
#12 RenderSliverMultiBoxAdaptor.addInitialChild (package:flutter/src/rendering/sliver_multi_box_adaptor.dart:422:5)
#13 RenderSliverFixedExtentBoxAdaptor.performLayout (package:flutter/src/rendering/sliver_fixed_extent_list.dart:205:12)
#14 RenderObject.layout (package:flutter/src/rendering/object.dart:1858:7)
#15 RenderSliverEdgeInsetsPadding.performLayout (package:flutter/src/rendering/sliver_padding.dart:137:12)
#16 _RenderSliverFractionalPadding.performLayout (package:flutter/src/widgets/sliver_fill.dart:167:11)
#17 RenderObject.layout (package:flutter/src/rendering/object.dart:1858:7)
#18 RenderViewportBase.layoutChildSequence (package:flutter/src/rendering/viewport.dart:510:13)
#19 RenderViewport._attemptLayout (package:flutter/src/rendering/viewport.dart:1580:12)
#20 RenderViewport.performLayout (package:flutter/src/rendering/viewport.dart:1489:20)
#21 RenderObject.layout (package:flutter/src/rendering/object.dart:1858:7)
#22 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)
#23 RenderObject.layout (package:flutter/src/rendering/object.dart:1858:7)
#24 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)
#25 RenderObject.layout (package:flutter/src/rendering/object.dart:1858:7)
#26 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)
#27 RenderObject.layout (package:flutter/src/rendering/object.dart:1858:7)
#28 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)
#29 RenderObject.layout (package:flutter/src/rendering/object.dart:1858:7)
#30 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)
#31 RenderObject.layout (package:flutter/src/rendering/object.dart:1858:7)
#32 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)
#33 RenderObject.layout (package:flutter/src/rendering/object.dart:1858:7)
#34 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)
#35 RenderObject.layout (package:flutter/src/rendering/object.dart:1858:7)
#36 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)
#37 RenderCustomPaint.performLayout (package:flutter/src/rendering/custom_paint.dart:545:11)
#38 RenderObject.layout (package:flutter/src/rendering/object.dart:1858:7)
#39 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)
#40 RenderObject.layout (package:flutter/src/rendering/object.dart:1858:7)
#41 RenderPositionedBox.performLayout (package:flutter/src/rendering/shifted_box.dart:437:14)
#42 RenderObject.layout (package:flutter/src/rendering/object.dart:1858:7)
#43 MultiChildLayoutDelegate.layoutChild (package:flutter/src/rendering/custom_layout.dart:171:12)
#44 _ScaffoldLayout.performLayout (package:flutter/src/material/scaffold.dart:983:7)
#45 MultiChildLayoutDelegate._callPerformLayout (package:flutter/src/rendering/custom_layout.dart:240:7)
#46 RenderCustomMultiChildLayoutBox.performLayout (package:flutter/src/rendering/custom_layout.dart:404:14)
#47 RenderObject.layout (package:flutter/src/rendering/object.dart:1858:7)
#48 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)
#49 RenderObject.layout (package:flutter/src/rendering/object.dart:1858:7)
#50 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)
#51 _RenderCustomClip.performLayout (package:flutter/src/rendering/proxy_box.dart:1376:11)
#52 RenderObject.layout (package:flutter/src/rendering/object.dart:1858:7)
#53 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)
#54 RenderObject.layout (package:flutter/src/rendering/object.dart:1858:7)
#55 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)
#56 RenderObject.layout (package:flutter/src/rendering/object.dart:1858:7)
#57 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)
#58 RenderObject.layout (package:flutter/src/rendering/object.dart:1858:7)
#59 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)
#60 RenderObject.layout (package:flutter/src/rendering/object.dart:1858:7)
#61 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)
#62 RenderObject.layout (package:flutter/src/rendering/object.dart:1858:7)
#63 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)
#64 RenderObject.layout (package:flutter/src/rendering/object.dart:1858:7)
#65 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)
#66 RenderObject.layout (package:flutter/src/rendering/object.dart:1858:7)
#67 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)
#68 RenderObject.layout (package:flutter/src/rendering/object.dart:1858:7)
#69 RenderOffstage.performLayout (package:flutter/src/rendering/proxy_box.dart:3408:14)
#70 RenderObject.layout (package:flutter/src/rendering/object.dart:1858:7)
#71 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:116:14)
#72 RenderObject.layout (package:flutter/src/rendering/object.dart:1858:7)
#73 _RenderTheatre.performLayout (package:flutter/src/widgets/overlay.dart:751:15)
#74 RenderObject._layoutWithoutResize (package:flutter/src/rendering/object.dart:1713:7)
#75 PipelineOwner.flushLayout (package:flutter/src/rendering/object.dart:885:18)
#76 RendererBinding.drawFrame (package:flutter/src/rendering/binding.dart:453:19)
#77 WidgetsBinding.drawFrame (package:flutter/src/widgets/binding.dart:883:13)
#78 RendererBinding._handlePersistentFrameCallback (package:flutter/src/rendering/binding.dart:319:5)
#79 SchedulerBinding._invokeFrameCallback (package:flutter/src/scheduler/binding.dart:1145:15)
#80 SchedulerBinding.handleDrawFrame (package:flutter/src/scheduler/binding.dart:1082:9)
#81 SchedulerBinding._handleDrawFrame (package:flutter/src/scheduler/binding.dart:996:5)
#85 _invoke (dart:ui/hooks.dart:166:10)
#86 PlatformDispatcher._drawFrame (dart:ui/platform_dispatcher.dart:270:5)
#87 _drawFrame (dart:ui/hooks.dart:129:31)
(elided 3 frames from dart:async)
====================================================================================================
下面給出了測驗螢屏,錯誤發生的地方在 buildNotes() 小部件下的 itemBuilder 中,
itemBuilder:(背景關系,索引){
//Error occurring place
note = question[index];
.
.
}
僅在第一次編譯時列印此錯誤。
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:loginform_validation_demo/QuizApp/controllers/question_controller_copy.dart';
import 'package:loginform_validation_demo/QuizApp/database/quiz_database.dart';
import 'package:loginform_validation_demo/QuizApp/models/Album.dart';
class QuizPage extends StatefulWidget {
final BlazorQuiz quiz;
const QuizPage({Key key, this.quiz}) : super(key: key);
@override
_QuizPageState createState() => _QuizPageState();
}
class _QuizPageState extends State<QuizPage> {
List<BlazorQuiz> question;
List<BlazorQuiz> answer;
bool isLoading = false;
String title;
BlazorQuiz note;
@override
void initState() {
super.initState();
note = question as BlazorQuiz;
this.title = widget.quiz?.Question ?? 'Question';
refreshNotesBlazor();
}
@override
void dispose() {
debugPrint(" QuizCheckModel dispose called ");
QuizDatabase.instance.close();
super.dispose();
}
Future refreshNotesBlazor() async {
setState(() => isLoading = true);
this.question = (await QuizDatabase.instance.readAllNotesBlazor());
this.answer = (await QuizDatabase.instance.readAllNotesBlazorAnswer());
setState(() => isLoading = false);
debugPrint(
" Blazor QuizCheckModel refreshNotes Question : ${this.question}");
debugPrint(" Blazor QuizCheckModel refreshNotes Answer :
${this.answer}");
}
@override
Widget build(BuildContext context) => Scaffold(
appBar: AppBar(
title: Text(
'Quiz App',
style: TextStyle(fontSize: 24),
),
automaticallyImplyLeading: false,
actions: [Icon(Icons.search), SizedBox(width: 12)],
),
body: Center(child: buildNotes()),
);
QuestionControllerCopy _questionController =
Get.put(QuestionControllerCopy());
Widget buildNotes() => PageView.builder(
physics: NeverScrollableScrollPhysics(),
controller: _questionController.pageController,
itemCount: 18,
itemBuilder: (context, index) {
//Error occurring place
note = question[index];
debugPrint('QuizScreenStateful : $question');
debugPrint('QuizScreenStateful index : $index');
debugPrint('QuizScreenStateful question-index : ${question[index]}');
return SafeArea(
child: Column(
children: [
if (question[index].QnType == 'Statement') ...[
Expanded(
child: SingleChildScrollView(
scrollDirection: Axis.vertical,
child: QuestionCardWidgetStart(
note: note,
index: index,
questionLength: question.length),
),
),
] else if (question[index].QnType == 'Radio') ...[
Expanded(
child: SingleChildScrollView(
scrollDirection: Axis.vertical,
child: QuestionCardWidgetRadio(
note: note,
index: index,
questionLength: question.length),
),
),
] else if (question[index].QnType == 'Check') ...[
Expanded(
child: SingleChildScrollView(
scrollDirection: Axis.vertical,
child: QuestionCardWidgetCheck(
note: note,
index: index,
questionLength: question.length),
),
),
] else if (question[index].QnType == 'Drop') ...[
Expanded(
child: SingleChildScrollView(
scrollDirection: Axis.vertical,
child: QuestionCardWidgetDropdown(
note: note,
index: index,
questionLength: question.length),
),
),
]
else if (question[index].QnType == 'EditText') ...[
Expanded(
child: SingleChildScrollView(
scrollDirection: Axis.vertical,
child: QuestionCardWidgetEditText(
note: note,
index: index,
questionLength: question.length),
),
),
]
else if (question[index].QnType == 'End') ...[
Expanded(
child: SingleChildScrollView(
scrollDirection: Axis.vertical,
child: QuestionCardWidgetEnd(
note: note,
index: index,
questionLength: question.length),
),
),
] else ...[
Expanded(
child: SingleChildScrollView(
scrollDirection: Axis.vertical,
child: QuestionCardWidget(
note: note,
index: index,
questionLength: question.length),
),
),
]
],
),
);
},
);
}
uj5u.com熱心網友回復:
note = question[index];
你的question變數是null. 為什么?好吧,我看不到一行代碼將其設定為其他內容,因此它仍然是null.
所以有兩個注釋來解決這個問題:
使用當前版本的 Flutter。您使用的版本已過時。當前版本不會在沒有警告您錯誤的情況下允許這樣做。
確保您的
question變數填充了非空的內容。
uj5u.com熱心網友回復:
像這樣改變你的未來功能
Future refreshNotesBlazor() async {
setState(() => isLoading = true);
final question = (await QuizDatabase.instance.readAllNotesBlazor());
setState(() => isLoading = false);
debugPrint(
" Blazor QuizCheckModel refreshNotes Question : ${this.question}");
return question;
}
Future refreshNotesBlazor2() async {
setState(() => isLoading = true);
final answer = (await QuizDatabase.instance.readAllNotesBlazor());
setState(() => isLoading = false);
debugPrint(" Blazor QuizCheckModel refreshNotes Answer :
${this.answer}");
return answer;
}
并將其用于您的螢屏
Widget buildNotes() => FutureBuilder(
future: refreshNotesBlazor(),
builder: (context, snapshot) => snapshot.hasData ? PageView.builder(
physics: NeverScrollableScrollPhysics(),
controller: _questionController.pageController,
itemCount: 18,
itemBuilder: (context, index) {
//Error occurring place
note = question[index];
debugPrint('QuizScreenStateful : $question');
debugPrint('QuizScreenStateful index : $index');
debugPrint('QuizScreenStateful question-index : ${question[index]}');
return SafeArea(
child: Column(
children: [
if (question[index].QnType == 'Statement') ...[
Expanded(
child: SingleChildScrollView(
scrollDirection: Axis.vertical,
child: QuestionCardWidgetStart(
note: note,
index: index,
questionLength: question.length),
),
),
] else if (question[index].QnType == 'Radio') ...[
Expanded(
child: SingleChildScrollView(
scrollDirection: Axis.vertical,
child: QuestionCardWidgetRadio(
note: note,
index: index,
questionLength: question.length),
),
),
] else if (question[index].QnType == 'Check') ...[
Expanded(
child: SingleChildScrollView(
scrollDirection: Axis.vertical,
child: QuestionCardWidgetCheck(
note: note,
index: index,
questionLength: question.length),
),
),
] else if (question[index].QnType == 'Drop') ...[
Expanded(
child: SingleChildScrollView(
scrollDirection: Axis.vertical,
child: QuestionCardWidgetDropdown(
note: note,
index: index,
questionLength: question.length),
),
),
]
else if (question[index].QnType == 'EditText') ...[
Expanded(
child: SingleChildScrollView(
scrollDirection: Axis.vertical,
child: QuestionCardWidgetEditText(
note: note,
index: index,
questionLength: question.length),
),
),
]
else if (question[index].QnType == 'End') ...[
Expanded(
child: SingleChildScrollView(
scrollDirection: Axis.vertical,
child: QuestionCardWidgetEnd(
note: note,
index: index,
questionLength: question.length),
),
),
] else ...[
Expanded(
child: SingleChildScrollView(
scrollDirection: Axis.vertical,
child: QuestionCardWidget(
note: note,
index: index,
questionLength: question.length),
),
),
]
],
),
);
},
) : Center(child: CircularProgressIndicator(),));
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/365104.html
標籤:扑 sqlite 镖 exception nosuchmethoderror
