【发布时间】:2021-11-20 17:08:54
【问题描述】:
我有一个包含一堆项目(如饭菜)的网格,每当我想编辑一个项目时,我单击一个按钮并打开一个底部工作表,如下所示:
现在这是从 dart 文件中的静态列表呈现的。我想更改以下代码 sn-p 以便呈现我的 Cloud Firestore 内容:
var _isInit = true;
var _isLoading = false;
@override
void initState() {
_imageUrlFocusNode.addListener(_updateImageUrl);
super.initState();
}
@override
void didChangeDependencies() {
if (_isInit == true) {
final mealId = widget.id;
if (mealId != null) {
_editedMeal = Meals().findById('1'); //THIS IS WHERE I NEED TO RETRIEVE DATA FROM CLOUD FIRESTORE
_initValues = {
'title': _editedMeal.title,
'recipe': _editedMeal.recipe,
'description': _editedMeal.description,
'imageUrl': '',
};
_imageUrlController.text = _editedMeal.imageUrl;
}
}
_isInit = false;
super.didChangeDependencies();
}
我需要将有评论的部分更改为 Firestore 作为数据源。我能够使用此语句检索数据,但渲染速度不够快,因此我只看到空白的 TextFormFields 而没有图像。这是我尝试使用并获取数据但无法呈现任何内容的代码:
FirebaseFirestore.instance.collection('meals').doc(mealId).get().then((DocumentSnapshot document) {
_editedMeal = Meal(
id: document.id,
//...
);
});
使用此代码代替注释所在的静态代码:
_editedMeal = Meals().findById('1'); //THIS IS WHERE I NEED TO RETRIEVE DATA
有人可以提供一个解决方案,说明如何从 Firestore 动态加载数据并在 Widget 呈现之前填充此“_editedMeal”。
谢谢
【问题讨论】:
-
你在哪里打电话
get()?无论如何,您很可能需要调用setState(),这将调用build()方法并更新_editedMeal的状态 -
哪里会调用 setState()?调用 get() 从 firebase 检索到的文档中获取数据
标签: firebase flutter dart google-cloud-firestore