Как правильно звонить и ждать? - PullRequest
0 голосов
/ 06 апреля 2019

Я новичок во Флаттере и Дарт. У меня есть следующий код:

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());
    }
  }

Это не ПОДОЖДИТЕ для возврата данных из базы данных. Я добавил await к _firestore.collection('items').snapshots(), но не повезло.

Есть идеи? Спасибо за любой совет. Извините за плохой английский.

1 Ответ

4 голосов
/ 06 апреля 2019

Это потому, что вы слушаете данные, вам нужно получить 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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...