无法检索 Firebase 数据

巴多

我有一个 Flutter 项目并且正在使用 Firebase。一切正常,我可以读取、写入更新数据。但是,在我的一个课程中,我需要从 Firebase 获取我的属性之一的列表:

var accountNames = List<String>();

  _getData(BuildContext context) {
    List<String> accountList = [];

    final accounts = _database.collection('userAccounts').getDocuments().then((snapshot) {
      snapshot.documents.forEach((f) {
          accountNames.add(f['accountName']);
          print(accountNames); //first call
      });
    }); // non_updated_area 
    print(accountNames); //second call
}

在这里,我的第一次调用accountName 给出了正确的输出。然而,第二次调用给出了null . 我尝试了几个选项,例如返回 List、Widget 等的函数,但无法accountNames non_updated_area .

你有解决办法吗?

格雷厄姆博士

原因是您的第二个打印语句在对数据库的调用完成之前运行,因此没有返回要打印的数据。不知道为什么您需要相同信息的第二次打印,但如果您打算用一些数据处理来替换该打印,那么它就无法在那里工作。您需要处理.then内返回的数据。或者,您需要使用 Dart 中的 async / await 构造。

更新给你评论:

好吧,我的目标是在此函数之外访问更新的 accountNames 列表。例如。从另一个函数或小部件调用它。如何在 .then 块之外传递数据?

有几种方法,但最简单的方法是将这个函数更改为 Future> 并在.then块中使用 return 语句,例如:

Future<List<String>> getData(BuildContext context) {
    List<String> accountNames = List<String>();

  _database.collection('userAccounts').getDocuments().then((snapshot) {
      snapshot.documents.forEach((f) {
          accountNames.add(f['accountName']);
      });
      return accountNames;
    });
}

然后像这样调用它:

var accountNameList = await getData(context);

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章