繁体   English   中英

Flutter 从 Firestore 标志导航

[英]Flutter Navigation from Firestore Flag

我想做什么的图表] 1

当 screen2_flag 的值更改为 true 时(在 firebase cloud firestore 上),我想从 screen1 导航到 Screen2,

我有如图所示的屏幕 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):_WaitingRoomState#25dfa 上的 setState() 方法被调用了一个闭包或返回 Future 的方法。 也许它被标记为“异步”。 E/flutter (24551):不是在 setState() 调用中执行异步工作,而是首先执行工作(不更新小部件状态),然后在 setState() 调用中同步更新 state。 E/颤振(24551):#0 State.setState。 (package:flutter/src/widgets/framework.dart:1151:9) E/flutter (24551): #1 State.setState (package:flutter/src/widgets/framework.dart:1167:6)

错误告诉你问题:

setState() 回调参数返回一个 Future

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

并告诉你解决方案:

不要在 setState() 调用中执行异步工作,而是先执行该工作(不更新小部件状态),然后在 setState() 调用中同步更新 state

所以你进行异步调用,等待它直到你得到标志值(我猜是因为你没有显示那部分代码),然后调用setState()更新新值。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM