【问题标题】:How to call await correctly?如何正确调用等待?
【发布时间】:2019-08-27 23:00:15
【问题描述】:

我是 Flutter 和 Dart 的新手。我有以下代码:

class ItemRepository {

  final Firestore _firestore = Firestore.instance;

  Future<List<Item>> loadItems() async {
    List<Item> itemList = [];
    _firestore.collection('items').snapshots().listen((data) {
      data.documents.forEach((doc){
        print("------- KODE: ${doc['kode']}");
        itemList.add(Item(doc['kode'], doc['name']));
      });
    });
    return itemList;
  }
}

当我使用以下代码拨打我的loadItems 时:

Stream<ItemState> _mapLoadItemsToState() async* {
    try {
      final data = await this.repo.loadItems();
      print('-------------------------------');
      print(data.length);
    } catch(e) {
      print(e.toString());
    }
  }

无需等待从 Firebase 返回数据。我将await 添加到_firestore.collection('items').snapshots() 但没有运气。

有什么想法吗? 感谢您的任何建议。抱歉英语不好。

【问题讨论】:

    标签: firebase dart flutter async-await google-cloud-firestore


    【解决方案1】:

    那是因为您正在收听数据,您需要先获取 Future&lt;QuerySnapshot&gt; 然后再获取 documents 。 试试这样的:

    Future<List<Item>> loadItems() async {
       final List<Item> itemList = (await Firestore.instance.collection('items').getDocuments()).documents.map((snapshot) => Item(doc['kode'], doc['name'])).toList();
       return itemList;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-12-05
      • 2019-03-03
      • 2014-07-09
      • 1970-01-01
      • 2014-03-19
      • 1970-01-01
      • 2016-04-10
      相关资源
      最近更新 更多