我有一个 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] 删除。
我来说两句