Невозможно получить значение от функции, хотя у меня есть очень похожий, который работает. - флаттер - PullRequest
0 голосов
/ 19 июня 2020

Итак, первый НЕ работает. Я получаю снимок и выполняю итерацию, чтобы создать список значений, затем я хочу взять эти значения для использования в другом месте. Любые идеи? Второй почти идентичен, и он работает.

getAllFavoriteRecipes(RecipeNotifier recipeNotifier, favoriteIDs) async {
  var uid = (await AuthServices().getCurrentUser());
  Stream<DocumentSnapshot> favorites =
  Firestore.instance.collection('users').document(uid).snapshots();
  List _favorites = [];
  favorites.forEach((item) {
    var favoriteItem = item.data['favorites'];
    _favorites.add(favoriteItem);
    print('_favorites: $_favorites'); //<<This does print correctly>>>
  });
  List favoriteIDs2 = _favorites;
  print('Hello: $_favorites'); //<<<<<does NOT print correctly>>>>>
  print('Test: $favoriteIDs2'); //<<<<<does NOT print correctly>>>>>

  QuerySnapshot snapshot = await Firestore.instance
      .collection('recipes')
      .where('recipeID', whereIn: favoriteIDs2)
      .getDocuments();
  List<RecipeList> _recipes = [];
  snapshot.documents.forEach((document) {
    RecipeList recipe = RecipeList.fromMap(document.data);
    _recipes.add(recipe);
  });
  recipeNotifier.recipeList = _recipes;
}

Этот печатает правильно, хотя они делают то же самое:

QuerySnapshot featured =
      await Firestore.instance.collection('featured').getDocuments();
  List _featured = [];
  featured.documents.forEach((document) {
    var featuredItem = document.data['recipeID'];
    _featured.add(featuredItem);
  });

  List featuredIDs = _featured;
  print(featuredIDs); 

1 Ответ

1 голос
/ 19 июня 2020

Похоже, что forEach () возвращает Future, который вы могли бы await, точно так же, как вы с Future, возвращаемым getDocuments () .

  Stream<DocumentSnapshot> favorites =
      Firestore.instance.collection('users').document(uid).snapshots();
  List _favorites = [];
  await favorites.forEach((item) {
    var favoriteItem = item.data['favorites'];
    _favorites.add(favoriteItem);
    //print('_favorites: $_favorites');
  });

  print('Hello: $_favorites'); //<<<<<does NOT print correctly>>>>>
...