尝试调用initState()
时,Flutter返回错误'_debugLifecycleState == _StateLifecycle.created': is not true.
这是我的initState()
函数。我已经确保它不在这个站点上的另一个类似问题中提到的build()
函数中。
@override
void initState() {
super.initState();
dataRead = false;
todayTask.clear();
tomorrowTask.clear();
upcomingTask.clear();
tasks().then((data) {
setState(() {
for (int i =0; i< data.length; i++){
if (taskDay(DateTime.parse(data[i].datetime)) == 0) todayTask.add(data[i]);
else if (taskDay(DateTime.parse(data[i].datetime)) == 1) tomorrowTask.add(data[i]);
else upcomingTask.add(data[i]);
}
dataRead = true;
});
});
_tabController = TabController(vsync: this, length: 3);
}
首次运行initState()
时未出现错误。它只有在我显式调用它时才会出现。
颤动运行的结果--详细
[ +166 ms] E/flutter (30434): [ERROR:flutter/lib/ui/ui_dart_state.cc(166)] Unhandled Exception: 'package:flutter/src/widgets/framework.dart': Failed assertion: line 1113 pos 12: '_debugLifecycleState ==
_StateLifecycle.created': is not true.
[ +2 ms] E/flutter (30434): #0 _AssertionError._doThrowNew (dart:core-patch/errors_patch.dart:40:39)
[ +1 ms] E/flutter (30434): #1 _AssertionError._throwNew (dart:core-patch/errors_patch.dart:36:5)
[ +1 ms] E/flutter (30434): #2 State.initState (package:flutter/src/widgets/framework.dart:1113:12)
[ +1 ms] E/flutter (30434): #3 _TodoBodyState.initState (package:dyry/todobody.dart:70:11)
[ ] E/flutter (30434): #4 _TodoBodyState.build.<anonymous closure>.<anonymous closure> (package:dyry/todobody.dart:162:75)
[ ] E/flutter (30434): #5 _AddTodoState.build.<anonymous closure> (package:dyry/addtodo.dart:321:36)
[ ] E/flutter (30434): <asynchronous suspension>
[ ] E/flutter (30434): #6 _AddTodoState.build.<anonymous closure> (package:dyry/addtodo.dart)
[ ] E/flutter (30434): #7 _InkResponseState._handleTap (package:flutter/src/material/ink_well.dart:953:19)
[ ] E/flutter (30434): #8 _InkResponseState.build.<anonymous closure> (package:flutter/src/material/ink_well.dart:1059:38)
[ ] E/flutter (30434): #9 GestureRecognizer.invokeCallback (package:flutter/src/gestures/recognizer.dart:182:24)
[ ] E/flutter (30434): #10 TapGestureRecognizer.handleTapUp (package:flutter/src/gestures/tap.dart:522:11)
[ ] E/flutter (30434): #11 BaseTapGestureRecognizer._checkUp (package:flutter/src/gestures/tap.dart:282:5)
[ +1 ms] E/flutter (30434): #12 BaseTapGestureRecognizer.acceptGesture (package:flutter/src/gestures/tap.dart:254:7)
[ +1 ms] E/flutter (30434): #13 GestureArenaManager.sweep (package:flutter/src/gestures/arena.dart:156:27)
[ +1 ms] E/flutter (30434): #14 GestureBinding.handleEvent (package:flutter/src/gestures/binding.dart:222:20)
[ +2 ms] E/flutter (30434): #15 GestureBinding.dispatchEvent (package:flutter/src/gestures/binding.dart:198:22)
[ +1 ms] E/flutter (30434): #16 GestureBinding._handlePointerEvent (package:flutter/src/gestures/binding.dart:156:7)
[ +1 ms] E/flutter (30434): #17 GestureBinding._flushPointerEventQueue (package:flutter/src/gestures/binding.dart:102:7)
[ +1 ms] E/flutter (30434): #18 GestureBinding._handlePointerDataPacket (package:flutter/src/gestures/binding.dart:86:7)
[ +1 ms] E/flutter (30434): #19 _rootRunUnary (dart:async/zone.dart:1206:13)
[ +1 ms] E/flutter (30434): #20 _CustomZone.runUnary (dart:async/zone.dart:1100:19)
[ +1 ms] E/flutter (30434): #21 _CustomZone.runUnaryGuarded (dart:async/zone.dart:1005:7)
[ +1 ms] E/flutter (30434): #22 _invoke1 (dart:ui/hooks.dart:281:10)
[ +1 ms] E/flutter (30434): #23 _dispatchPointerDataPacket (dart:ui/hooks.dart:190:5)
[ +2 ms] E/flutter (30434):
[ +92 ms] D/InputMethodManager(30434): HSIFW - flag : 0 Pid : 30434
发布于 2021-03-27 16:16:39
您应该创建另一个函数并在initState中调用该函数,而不是使用FutureDelayed。我也有同样的问题,我只需要提取函数就可以解决这个问题。下面是我的代码:
@override
void initState() {
setState(() {
_isLoading = true;
});
getInitData();
super.initState();
}
Future<void> getInitData() async {
await Provider.of<PassCardList>(context, listen: false).getCard();
setState(() {
_isLoading = false;
});
}
发布于 2020-12-07 10:58:13
我认为setState是在创建小部件之前使用的。我会推迟setState的发布。
@override
void initState() {
super.initState();
dataRead = false;
todayTask.clear();
tomorrowTask.clear();
upcomingTask.clear();
Future.delayed(const Duration(milliseconds: 200), () {
tasks().then((data) {
setState(() {
for (int i =0; i< data.length; i++){
if (taskDay(DateTime.parse(data[i].datetime)) == 0) todayTask.add(data[i]);
else if (taskDay(DateTime.parse(data[i].datetime)) == 1) tomorrowTask.add(data[i]);
else upcomingTask.add(data[i]);
}
dataRead = true;
});
});
});
_tabController = TabController(vsync: this, length: 3);
}
https://stackoverflow.com/questions/65180288
复制相似问题