gpt4 book ai didi

flutter - flutter 使用其他文件中的Future返回值

转载 作者:行者123 更新时间:2023-12-03 04:44:27 26 4
gpt4 key购买 nike

我有一个问题,我在一个文件(Recipe.dart)中有一个名为fetchAll()的方法,我需要用它来返回我的食谱列表并为此创建一个Future:

 Future<List<Recipe>> recipes() async {
// Get a reference to the database.
final Database db = await database;

// Query the table for all The Recipes.
final List<Map<String, dynamic>> title = await db.query('Rezepte');
final List<Map<String, dynamic>> ingredients = await db.query('Zutaten');
final List<Map<String, dynamic>> preperation =
await db.query('Zubereitungen');
final List<Map<String, dynamic>> imgUrl = await db.query('Images');
// Convert the List<Map<String, dynamic> into a List<Recipe>.
return List.generate(title.length, (i) {
return Recipe(
id: i,
name: title[i]['Rezept_Title'],
ingredients: ingredients[i]['Zutat'],
preperation: preperation[i]['Zubereitung'],
imageURL: imgUrl[i]['Image_URl'],
);
});
}
但这在数据库帮助程序文件中,因为否则我将无法访问数据库,那么如何连接它们呢?那么函数fetchAll()返回将来收集的食谱列表吗?

最佳答案

这只是您如何实现此目标的粗略想法。
我将从创建RecipiesRepository开始。
在那里,您可以使用一种方法来获取标题,配料,准备和图像,并将它们全部返回到一个易于阅读的对象中。
您可能有一个方法可以在一个请求中获取所有内容,如下所示:


class RecipiesRepository {
Future<RecipeModel> getRecipe(){
return Future.wait([
_getTitle(),
_getIngredients(),
_getPreparation(),
_getImage(),
]).then((results) {
// return an instance of a RecipeModel here from the results
});
}
}

// RecipeModel

class RecipeModel {
final List<Map<String, dynamic>> title;
final List<Map<String, dynamic>> ingredients;
final List<Map<String, dynamic>> preparations;
final List<Map<String, dynamic>> imageUrls;

RecipeModel({
this.title,
this.ingredients,
this.preparations,
this.imageUrls,
});
}


然后,您可以使用 FutureBuilder小部件。
// Create a new instance of RecipesRepository somewhere, giving you `_recipiesRepository`

FutureBuilder(
future: _recipiesRepository.getRecipe(),
builder: (context, snapshot) {
if (snapshot.hasData) {
// snapshot.data will be your RecipeModel
return List.generate(snapshot.data.title.length, (i) {
return Recipe(
id: i,
name: snapshot.data.title[i]['Rezept_Title'],
ingredients: snapshot.data.ingredients[i]['Zutat'],
preperation: snapshot.data.preparations[i]['Zubereitung'],
imageURL: snapshot.data.imageUrls[i]['Image_URl'],
);
});


else {
// Show a spinner of something for a default view
}
}
)

关于flutter - flutter 使用其他文件中的Future返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62538136/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com