如何在flutter中从ModalBottomSheet刷新ParentStatefulWidget的状态

2023-12-20

我是颤振新手,我对小部件的状态没有正确的了解。我正在创建一个应用程序,在其中从主屏幕向购物车添加一些商品,然后单击 Cartbutton,我打开 ModalBottomSheet,用户还可以在其中修改其购物车商品,以及当用户关闭 ModalBottomSheet 而不继续操作时我想要的内容查看。它还会刷新主屏幕上选定的项目。我正在计算列表中每个项目的加法和减法。一切工作正常,唯一不工作的是主屏幕项目不会自动更新,直到我单击该项目然后它们工作正常。

基本上我想问如何在关闭 BottomModalSheet 时更新其 Parent 的状态。

以下是我打开 BottomModalSheet 的 Parent 代码的一部分:

  child: Material(
                          color: Colors.transparent,
                          child: InkWell(
                            splashColor: Colors.black12,
                            onTap: () async{

                               await scaffoldKey.currentState
                                  .showBottomSheet((context) =>
                                 StatefulBuilder(
                                   builder: (BuildContext context,StateSetter setState){
                                     return  Container(
                                       color: Colors.white,
                                       height: MediaQuery.of(context).size.height,

                                       child: Column(
                                         mainAxisAlignment: MainAxisAlignment.start,
                                         crossAxisAlignment: CrossAxisAlignment.start,
                                         children: <Widget>[
                                           Container(
                                             height: 200,
                                             color: Colors.black,
                                           ),

这是 BottomModalSheet 的一部分,我在其中设置状态:

                                                        InkWell(
                                                         onTap: (){

                                                                               totalItems.remove(1);
                                                                               totalPrice.remove(int.parse(categoryItemList[index].OurPrice));
                                                                               cart.remove(categoryItemList[index]);
                                                                               setState(() {<----------------------------------------Here I'm calling setState()
                                                                                 if(categoryItemList[index].Counter<2)
                                                                                 {
                                                                                   categoryItemList[index].ShouldVisible = !categoryItemList[index].ShouldVisible;

                                                                                   if(totalItems.length<1)
                                                                                   {
                                                                                     showCart = !showCart;
                                                                                   }
                                                                                 }else{
                                                                                   categoryItemList[index].Counter--;
                                                                                 }

                                                                               });
                                                                               print(categoryItemList[index].Counter);
                                                                               //  print(searchedItemList[index].Counter);
                                                                             }
                                                                             ,child: Container(
                                                                             height: 30,

                                                                             child: Icon(Icons.remove,color: Colors.green,size: 18,))
                                                                         ),

每个导航器推送方法都是异步的 - 您可以等到它弹出

showModalBottomSheet 在引擎盖下将路线推送到导航器,因此您可以在 BottomSheet 以这种方式关闭后重建您的父级

// somewhere in statefull parent
onTap:() async {
  await showModalBottomSheet();
  setState((){});
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在flutter中从ModalBottomSheet刷新ParentStatefulWidget的状态 的相关文章

随机推荐

  • 我如何使用 PhoneGap 在 Windows 操作系统中创建 ios 应用程序?

    嗨 我是初学者IOS移动设备 我知道我必须有 Apple 设备才能使用它来创建IOS应用程序 我的项目是我正在准备开展工作HTML5 and JavaScript and css当我搜索时我发现PhoneGap不需要更多代码就可以做到 那么
  • AWS Lambda在S3存储桶中创建文件夹

    我有一个 Lambda 它在文件上传到 S3 A 存储桶时运行 并将这些文件移动到另一个存储桶 S3 B 挑战在于我需要在 S3 B 存储桶内创建一个文件夹 其中包含相应的上传文件日期 并将文件移动到该文件夹 非常感谢任何帮助或想法 这可能
  • 如何使用 SQL 切换字符串中每个字母的大小写?

    我需要使用 PostgreSQL 将其转换为此 dxItw9a4 gt DXiTW9A4 有没有已经设置好的功能或方式 如果您只处理字符 A Z 则可以使用翻译 https www postgresql org docs 9 1 funct
  • 使用 AspectJ 了解调用者类

    我正在尝试模仿Spring的AspectJ Async 支持 http static springsource org spring docs 3 0 0 RELEASE spring framework reference html sc
  • Joomla 文章页面:检查已发布与否的代码

    我正在文章页面中寻找 php 代码来检查文章是否已发布 我试过这个 但它是假的 if listing 列表 已发布 1 有人能给我一些提示吗 多谢 PS Joomla 1 7 3 JReviews 2 3 使用Joomla默认内容结构 尝试
  • 使用python在多个文件中进行多个正则表达式替换[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我有一个项目 需要使用 python
  • 使用 Process.Start 和 UAC 在 .NET 中模拟

    我正在尝试从另一个 NET 程序运行程序 该程序需要使用 Process Start System Diagnostics 方法的模拟选项进行提升 用于模拟的用户是本地管理员 操作系统是2008年 UAC已开启 每当调用进程启动时 我都会收
  • 将 stargazer 与内存贪婪的 glm 对象一起使用

    我正在尝试运行以下回归 m1 glm y x1 x2 x3 x4 data df family binomial m2 glm y x1 x2 x3 x4 x5 data df family binomial m3 glm y x1 x2
  • PhpMyAdmin 自动刷新 MySQL 表

    当我在 phpmyadmin 本地页面中运行更新或选择查询时 我会通过 GO 按钮弹出表格结果 但是 为了使用服务器中的 php 文件 我必须使用刷新按钮来查看表上新传入的数据 创建视图没有帮助 或者我可能会丢失某些内容 我怎样才能像自动刷
  • 如何获取配置标志的值?

    有没有办法获得a的值配置标志 https doc rust lang org reference html conditional compilation 例如 我想获取以下值target os as str String 不诉诸以下方法i
  • MySQL:写入从节点

    假设我有一个汽车数据库 我有品牌和型号 FK 到品牌 我计划让用户跟踪他们的汽车 每辆车都有一个 FK 型号 现在 我有很多用户 我想拆分数据库来分配负载 品牌和型号表变化不大 但它们需要跨分片共享 我的想法是使用 MySQL 从品牌和型号
  • 如果我没有关闭 PHP 标签,Notepad++ 函数列表 PHP 将无法工作

    我想在我的 PHP 代码中使用 notepad 的函数列表功能 实际上 如果我编写关闭 PHP 标签 gt 则函数列表可以正常工作 但是如果我没有关闭 PHP 标签 则函数列表将无法工作 我只是想 即使我没有关闭 PHP 标签 函数列表仍然
  • Ajax表单提交,文件未提交

    我正在尝试为我的 Django 表单实现 AJAX 表单提交 这些文件是在没有 AJAX 的情况下提交的 因此服务器端的逻辑似乎可以正常工作 使用ajax 除了文件之外的其余值都会被提交 这是我正在实现的代码 AJAX表单提交 functi
  • XPS 文件的结构是什么

    我认为 XPS 文件就像 PDF 文件 但是 XPS 文件的结构是什么 类似于 PDF 文件吗 CNET 上的 XPS 与 PDF http reviews cnet com 4520 3672 7 6673717 2 html Excer
  • 自定义键盘出现约 5 秒延迟

    我正在使用 objc Xcode 7 制作自定义键盘 尝试了 6 次 问题是键盘加载速度太慢 我尝试加载完全空的UIInputViewController的观点 没有变化 我没有xib 没有大量资源 如果有人知道这个问题的任何解决方案 请写
  • 更新 Javascript 2D 数组中的元素会更新整个列[重复]

    这个问题在这里已经有答案了 我在 Javascript 中创建了一个 2D 数组 4x4 如下所示 let visited new Array 4 fill new Array 4 fill false console log visite
  • Xcode 中的垂直突出显示(列选择)

    如何在 Xcode 中突出显示矩形选区 按住 Option 键的同时单击并拖动 进行垂直突出显示 块选择时 应用正常的复制和粘贴规则 command c 和 command v
  • 如何禁用 Dexguard?

    我浏览了文档 寻找如何在运行 gradle 时禁用 dexguard 但保留插件 dexguard 我尝试修改 proguardFilegetDefaultDexGuardFile dexguard debug pro 什么也不做 但不幸的
  • 键盘关闭时的背景故障

    我面临着我的片段布局 xml 有点复杂的情况 所以层次结构如下 相对布局 无背景 ScrollView fillViewPort true 滚动条 none FrameLayout 无背景 LinearLayout 无背景 Relative
  • 如何在flutter中从ModalBottomSheet刷新ParentStatefulWidget的状态

    我是颤振新手 我对小部件的状态没有正确的了解 我正在创建一个应用程序 在其中从主屏幕向购物车添加一些商品 然后单击 Cartbutton 我打开 ModalBottomSheet 用户还可以在其中修改其购物车商品 以及当用户关闭 Modal