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 获取数据的异步函数

Firestore 集合查询作为颤动中的流

如何使用 Firebase Firestore 进行一次性简单查询?

在 Dart 的 Cloud Firestore 中添加文档后如何获取文档 ID

Firestore 为 noSQL 和 Flutter 复制 SQL 连接

异步/等待/然后在 Dart/Flutter 中