在dispose()之后调用setState()
问题内容:
当我单击凸起的按钮时,将显示时间选择器。现在,如果我等待约5秒钟,然后确认时间,则会发生此错误,则 在dispose()之后调用setState()
我实际上在控制台中看到了如何更新父窗口小部件,但是为什么呢?-我什么也没做-
我只等5秒钟!此示例在正常项目中将可用,但是在我的项目中则更为复杂,因为在我等待的过程中flutter正在更新状态,所以它将不起作用…我怎么办?有谁能猜测,在我较复杂的项目中而不是在简单的项目中,抖动会随机更新是什么?
[更新] 我检查了它是否从我的TabBar和TabBarView所在的级别进行更新。它可能需要对Tabbarview进行“ with 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();
}
);
}
}
问题答案:
只需mounted
在调用之前检查窗口小部件的状态类的boolean属性setState()
。
if (this.mounted){
setState((){
//Your state change code goes here
});
}
或更干净的setState
方法在您的StatelfulWidget
类中重写方法。
class DateTimeButton extends StatefulWidget{
@override
void setState(fn) {
if(mounted){
super.setState(fn);
}
}
}