【问题标题】:Async await flutter firestore异步等待颤振火库
【发布时间】:2026-01-24 10:20:13
【问题描述】:

我想问一下我的代码发生了什么。

假设在这种情况下“计数器”字段为 179,我如何在打印前更新我的外部 myData?

    class Test {
      Firestore _firestore = Firestore.instance;
      var myData;

      void getData() async {
        DocumentSnapshot snapshot =
            await _firestore.collection('Counter').document('Counter').get();
        myData = await snapshot.data['Counter'];
        print('inside $myData');
      }

      void checkMyData() {
        myData = 5;
        getData();
        print('outside $myData');
      } 
    }

控制台:

颤动:5外

颤动:在 179 以内

【问题讨论】:

    标签: asynchronous flutter async-await google-cloud-firestore


    【解决方案1】:

    您必须像这样让getData() 返回Future

    Future getData() async {
    

    所以你可以这样做:

    getData().then((value) {
      print('value: $value');
    }).catchError((error) {
      print('error: $error');
    });
    

    但您可能希望使用FutureBuilder 在到达时显示信息,如下所示:

    FutureBuilder(
      future: getData(),
      builder: (context, snapshot) {
        if (snapshot.hasData) {
          return Text('value: ${snapshot.data}');
        } else if (snapshot.hasError){
          return Text('error: ${snapshot.error}');
        }
        return Text('loading...');
      },
    )
    

    【讨论】:

    • 请问如果我有 2 个要返回的变量怎么办?
    • 你应该有一个包含这两个变量的对象