如何正确呼叫等待?

时间:2019-04-06 03:19:04

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

我是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(),但是没有运气。

有什么主意吗? 感谢您的任何建议。对不起,英语不好。

1 个答案:

答案 0 :(得分:4)

那是因为您正在监听数据,所以需要先获取Future<QuerySnapshot>,然后获取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;
}