Flutter 使用interactiveScrollViewer时,有状态生成器未更新颤振中的列表

Flutter 使用interactiveScrollViewer时,有状态生成器未更新颤振中的列表,flutter,scroll,flutter-layout,updating,stateful,Flutter,Scroll,Flutter Layout,Updating,Stateful,我使用的是InteractiveScrollViewer,列表在添加和更新功能时没有更新,所以我使用了StatefulBuilder for CardList。现在对于同一个页面,它可以正常工作,但如果我在弹出页面时按下另一个页面,即endDrawer和update item,则页面中不会显示任何效果 StatefulBuilder( builder: (BuildCo

我使用的是InteractiveScrollViewer,列表在添加和更新功能时没有更新,所以我使用了StatefulBuilder for CardList。现在对于同一个页面,它可以正常工作,但如果我在弹出页面时按下另一个页面,即endDrawer和update item,则页面中不会显示任何效果

StatefulBuilder(
                              builder:
                                  (BuildContext context,
                                          StateSetter _setState) =>
我正在更新抽屉关闭时运行的某个函数中的项目列表。我无法在此函数中发送_setstate,因为此函数是全局函数

对于嵌套的滚动视图,我还可以使用哪些其他技术

编辑:

bloc.getAllFoodItems(_id).然后((值){
如果(!已安装)返回;
设置状态(){
_itemList=值;
if(menuItemsList!=null&&menuItemsList.length!=0)
for(int i=0;iitem.itemID==menuItemsList[i].id);
如果(ls!=-1){
设置状态(){
menuItemsList[i]。数量=\u项目列表[ls]。数量;
});
}否则
设置状态(){
菜单项列表[i]。数量=0;
});
}
}
});
});

此代码在绘图关闭时运行。

这里的问题是状态管理

当您说您正在从另一个页面进行更新时,主要问题是您的抽屉可能没有全局保存状态,因此任何想要获取信息以构建CardsList的页面都将使用相同的信息

现在,主要的决策点是决定要使用哪个状态管理系统。您可以拥有以下任何一种或更多:提供者、Bloc、InheritedWidget等。 以下是官方颤振文件中关于许多选项的列表:


PS:对于简单的应用程序,我建议使用MobX或GetX,因为它可以减少样板文件。

你能告诉我们当
抽屉关闭时运行的函数吗?endDrawer:DrawerPage(callback:setdrawerropened,),void setdrawerropened(bool isOpen){print(isOpen);if(!isOpen){fetchCount();}我正在使用bloc并更新来自bloc的列表中的项目数量。列表已更新,但由于每张卡的设置状态而未显示。@B.Ayaz您可以添加您的bloc代码以及用于更新状态的代码吗?否则,我将无法详细帮助您。OID SETDREAROPENED(bool isOpen){print(isOpen);if(!isOpen){u fetchCount();}}添加了有问题的完整函数
 bloc.getAllFoodItems(_id).then((value) {
      if (!mounted) return;
      setState(() {
        _itemList = value;
        if (menuItemsList != null && menuItemsList.length != 0)
          for (int i = 0; i < menuItemsList.length; i++) {
            if (menuItemsList[i].id != null) {
              int ls = -1;
              if (_itemList != null)
                ls = _itemList
                    .indexWhere((item) => item.itemID == menuItemsList[i].id);

              if (ls != -1) {
                setState(() {
                  menuItemsList[i].quantity = _itemList[ls].quantity;
                });
              } else
                setState(() {
                  menuItemsList[i].quantity = 0;
                });
            }
          }
      });
    });