Я новичок в Dart, и поэтому у меня проблемы с асинхронным программированием. Я пытаюсь перебрать список элементов (на данный момент давайте назовем их ингредиентами) и запросить в базе данных рецепты, которые содержат ингредиент. Чтобы добиться этого, у меня есть список ингредиентов, которые я выбрал, и передал его будущему, которое должно запросить базу данных Firestore и добавить результат в список возможных вариантов. Проблема в том, что я не могу понять, как «дождаться» окончания цикла for, прежде чем возвращать список возможных вариантов. Каждый раз, когда я запускаю его, он возвращает пустой список. Надеюсь, я не сделал это слишком сложным, и заранее спасибо всем, кто нашел время, чтобы прочитать это:)
PS: я потратил часы, чтобы найти решение этой проблемы в Интернете, но не смог ничего найти,
Future searchRecipe(ingredients) async {
var possibleRecipes = []; //List to store results
for (int i = 0; i < ingredients.length; ++i) {
var currentIngredient = ingredients[i];
//now query database for recipes with current ingredient
var fittingRecipes = Firestore.instance
.collection('recipes-01')
.where('ingr.$currentIngredient', isEqualTo: true);
fittingRecipes.snapshots().listen((data) => data.documents.forEach((doc) {
possibleRecipes.add(doc['name']); //add names of results to the list
}));
}
return possibleRecipes; //this returns an empty list
}