我想做什么的图] 1
当screen2_flag的值更改为true时,我想从screen1导航到Screen2(在firebase cloud firestore上),
我具有如图所示的屏幕1,当我将flag的值从false更改为true时,它的工作状况一直很好,直到screen2_flag的值为false为止。
void initState() {
super.initState();
DocumentReference reference =
Firestore.instance.collection('myColection').document('myDoc');
reference.snapshots().listen((querySnapshot) {
print('got sanpshot' + querySnapshot.data['screen2_flag'].toString());
if (querySnapshot.data['screen2_flag'].toString() == 'true') {
Navigator.pushNamed(context, screen2.id);
}
});
Widget build(BuildContext context) {
// my code
...
}
}
我可以在模拟器上看到screen2。但是在控制台上出现以下错误
[错误:flutter / lib / ui / ui_dart_state.cc(157)]未处理的异常:setState()回调参数返回了Future。 E / flutter(24551):使用返回了Future的闭包或方法调用_WaitingRoomState#25dfa上的setState()方法。也许它被标记为“异步”。 E / flutter(24551):首先执行工作(不更新窗口小部件状态),然后在对setState()的调用中同步更新状态,而不是在对setState()的调用中执行异步工作。 E / flutter(24551):#0 State.setState。 (包:flutter / src / widgets / framework.dart:1151:9) E / flutter(24551):#1 State.setState(package:flutter / src / widgets / framework.dart:1167:6)
答案 0 :(得分:0)
错误告诉您问题所在
setState()回调参数返回了Future
_WaitingRoomState#25dfa上的setState()方法用 返回Future的闭包或方法
并告诉您解决方案:
与其在对setState()的调用内执行异步工作, 首先执行工作(不更新窗口小部件状态),然后 在对setState()的调用中同步更新状态
因此,您进行异步调用,等待它直到获得标志值为止(我想是因为您没有显示代码的那一部分),然后调用setState()
并更新新值。