Dart/Flutter Firestore 查询文档以列出问题
Posted
技术标签:
【中文标题】Dart/Flutter Firestore 查询文档以列出问题【英文标题】:Dart/Flutter Firestore Query Doucments to List Problems 【发布时间】:2022-01-21 18:54:11 【问题描述】:Future<List<CryptoWalletModel>> getUserWalletData(String uuid) async
String _dbPath = '$DatabaseGlobals.collectionUsers/$uuid/$DatabaseGlobals.collectionWallets';
Logger.logIt('Wallet path:' + _dbPath);
final cryptoWalletRef = FirebaseFirestore.instance.collection(_dbPath).withConverter<CryptoWalletModel>(
fromFirestore: (snapshot, _) => CryptoWalletModel.fromJson(snapshot.data()!),
toFirestore: (wallet, _) => wallet.toJson(),
);
List<CryptoWalletModel> _list = [];
List<QueryDocumentSnapshot<CryptoWalletModel>> wallets = await cryptoWalletRef
.get()
.then((snapshot) => snapshot.docs);
try //Problem Code Here
wallets.forEach((element)
_list.add(element.data());
);
catch (e)
Logger.logIt(e.toString());
Logger.logIt('BlocWalletRepoListCount: ' + wallets.length.toString());
return _list;
很难理解为什么在 for each 完成之前会被跳过。我知道钱包里有五件物品,但 wallets.forEach 字符串似乎没有运行。
欢迎任何想法。
【问题讨论】:
【参考方案1】:在您的代码中,try
块将在 get()
返回的未来完成之前执行。此外,混合async
/ await
和.then
语法基本上不是一个好主意。最后,您可以使用map
一步将结果转换为列表。
试试下面的代码:
try
final snapshot = await cryptoWalletRef.get();
_list = snapshot.docs.map((e) => e.data()).toList();
return Future.value(_list);
catch (e)
// handler error
【讨论】:
以上是关于Dart/Flutter Firestore 查询文档以列出问题的主要内容,如果未能解决你的问题,请参考以下文章
在 dart/flutter 中执行多次从 firestore 获取数据的异步函数
如何使用 Firebase Firestore 进行一次性简单查询?
在 Dart 的 Cloud Firestore 中添加文档后如何获取文档 ID