当我单击凸起的按钮时,将显示时间选择器。现在,如果我等待约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()。
mounted
setState()
if (this.mounted){ setState((){ //Your state change code goes here }); }
或更干净的setState方法在您的StatelfulWidget类中重写方法。
setState
StatelfulWidget
class DateTimeButton extends StatefulWidget{ @override void setState(fn) { if(mounted){ super.setState(fn); } } }