setState 不会在 Flutter 中刷新 ListView.builder

时间:2021-07-09 14:37:43

标签: android ios flutter listview android-listview

当我运行应用程序时,我从 firebase 中检索了一个对象列表。 在我的 MainPage() 中,我有一个 ListView.builder 来显示所有项目。

我还有一个带有不同按钮的 customDialog,根据按下的按钮,ListView.builder 中的项目必须刷新(删除旧的并加载新的)。

我的想法很简单:

  1. 创建自定义对话框
  2. 读取按钮按下的结果
  3. 更新我的物品清单
  4. 调用 setState 方法更新 ListView.builder 并仅查看新项目。

所有点似乎都有效,但是当我调用 setState 方法时,ListView.Builder 会将新项目附加到最旧的项目,但如果我打印我的项目变量,它仅包含新项目。

我该如何解决? 这是我的代码:

showDialog(context: context,
                        builder: (BuildContext context){
                          return CustomDialog(

                          );
                        }
                    ).then((value) async {
                      await myItemProvider.loadnewItem(parameter: value.toString());
                      setState(() {
                      });

                    }

                    );

列表视图:

ListView.builder(
                 key: UniqueKey(),
                 itemCount: myItemProvider.itemsList.length,
                 physics: NeverScrollableScrollPhysics(),
                 shrinkWrap: true,
                 itemBuilder: (_,index){
                   return MyObject(
                     parameter: myItemProvider.itemsList[index],
                   );
                 }),

供应商:

Future loadnewItem({String uid, String parameter})async{
    itemsList = await _myService.getItem(parameter: parameter);
    notifyListeners();
  }

在助手中:

Future<List<ItemModel>> getItem({String parameter}) async
  {
    var collectionData = _firestore.collection(collection).where("parameter", isEqualTo:parameter).orderBy("name").limit(4);
    if(collectionData != null){
      fetchDocumentsParameter(collectionData,parameter);
    }
    return itemsList;
  }

谢谢大家。

0 个答案:

没有答案