从Firestore Flag进行颤振导航

时间:2020-04-20 22:01:03

标签: flutter dart google-cloud-firestore flutter-navigation

我想做什么的图] 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)

1 个答案:

答案 0 :(得分:0)

错误告诉您问题所在

setState()回调参数返回了Future

_WaitingRoomState#25dfa上的setState()方法用 返回Future的闭包或方法

并告诉您解决方案:

与其在对setState()的调用内执行异步工作, 首先执行工作(不更新窗口小部件状态),然后 在对setState()的调用中同步更新状态

因此,您进行异步调用,等待它直到获得标志值为止(我想是因为您没有显示代码的那一部分),然后调用setState()并更新新值。