【问题标题】:Making a call to Cloud Firestore before Widget is rendered在小部件呈现之前调用 Cloud Firestore
【发布时间】: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


【解决方案1】:

我实际上使用了一种解决方法。它并没有真正满足我的要求,但我只是将已经存在的参数传递到底部工作表并渲染这些参数,而无需再次从 Firestore 获取数据

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-09-29
    • 2011-08-04
    • 2017-06-26
    • 2020-08-12
    • 2018-05-23
    • 1970-01-01
    • 2017-09-11
    • 1970-01-01
    相关资源
    最近更新 更多