gpt4 book ai didi

flutter - 在 dispose() 之后调用 setState()

转载 作者:IT老高 更新时间:2023-10-28 13:48:59 31 4
gpt4 key购买 nike

当我点击凸起的按钮时,时间选择器就会出现。现在,例如,如果我等待 5 秒,然后确认时间,则会出现此错误:setState() 在 dispose() 之后调用

我确实在控制台中看到了 flutter 是如何更新父小部件的,但为什么呢?我什么都不做——我只等5秒?!下面的示例将在普通项目中工作,但是在我的项目中它更复杂,因为在我等待时 Flutter 正在更新状态......我做错了什么?有没有人猜到 Flutter 在我的更复杂的项目中而不是在简单的项目中随机更新的原因是什么?

[更新]我再次查看它,发现它正在从我的 TabBarTabBarView 所在的级别更新。它是否必须与 TabBarView 所需的“with TickerProviderStateMixin”有关?会不会是导致应用定期随机刷新?

 class DateTimeButton extends State<DateTimeButtonWidget> {
DateTime selectedDate = new DateTime.now();

Future initTimePicker() async {
final TimeOfDay picked = await showTimePicker(
context: context,
initialTime: new TimeOfDay(hour: selectedDate.hour, minute: selectedDate.minute),
);

if (picked != null) {
setState(() {
selectedDate = new DateTime(selectedDate.year, selectedDate.month, selectedDate.day, picked.hour, picked.minute);
});
}
}

@override
Widget build(BuildContext context) {
return new RaisedButton(
child: new Text("${selectedDate.hour} ${selectedDate.minute}"),
onPressed: () {
initTimePicker();
}
);
}
}

最佳答案

在调用 setState() 之前,只需检查小部件状态类的 bool 属性 mounted

if (this.mounted) {
setState(() {
// Your state change code goes here
});
}

或者更干净的方法覆盖 StatelfulWidget 类中的 setState 方法。

class DateTimeButton extends StatefulWidget {
@override
void setState(fn) {
if(mounted) {
super.setState(fn);
}
}
}

关于flutter - 在 dispose() 之后调用 setState(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49340116/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com