Flutter更新showDialog以及ModalBottomSheet中的状态中的内容

1、Flutter更新showDialog中的状态中的内容

很多人在用showDialog的时候应该都遇到过这个问题,使用showDialog后,通过setState()无法更新当前dialog。其实原因很简单,因为dialog其实是另一个页面,准确地来说是另一个路由,因为dialog的关闭也是通过navigator来pop的,所以它的地位跟你当前主页面一样。这个概念一定要明确,因为无论在Android或iOS中,daliog都是依附于当前主页面的一个控件,但是在Flutter中不同,它是一个新的路由。所以使用当前主页面的setState()来更新,当然没法达到你要的效果。

StatefulBuilder

很多人使用StatefulBuilder依然达不到更新的效果,是因为你用错了setState()方法。

就像我们上面说的那样,这个builder构建的控件,不会响应老页面的任何操作,因为它们是两个互不影响的路由控制的。


showDialog(context: context,builder: (context) {String label = 'test';return StatefulBuilder(builder: (context, state) {print('label = $label');return GestureDetector(child: Text(label),onTap: () {label = 'test8';print('onTap:label = $label');// 注意不是调用老页面的setState,而是要调用builder中的setState。//在这里为了区分,在构建builder的时候将setState方法命名为了state。state(() {});  },);},);});

2、Flutter 更新showModalBottomSheet中的状态(state)

和上面一样的showModalBottomSheet也会有这样的问题。解决方法如下

bool btnState=false;showModalBottomSheet(context:context, builder:(BuildContext context){return StatefulBuilder(builder:(context1, state) {///这里的state就是setStatereturn Container(child:OutlineButton(onPressed: (){state(() {///为了区分把setState改个名字btnState=!btnState;});},child:Stack(children: <Widget>[Opacity(opacity: btnState ? 0.0 : 1.0,child: Text("aa"),),Opacity(opacity: btnState ? 1.0 : 0.0,child: Text("bb"),),],),),),
}
)
}

Flutter更新showDialog以及showModalBottomSheet中的状态中的内容相关推荐

  1. flutter bloc_如何使用BLoC模式处理Flutter中的状态

    flutter bloc Last year, I picked up Flutter and I must say it has been an awesome journey so far. Fl ...

  2. Redux简介以及Redux应用程序中的状态更新方式

    by Syeda Aimen Batool 通过Syeda Aimen Batool Redux简介以及Redux应用程序中的状态更新方式 (An intro to Redux and how sta ...

  3. as点击发送广播_Apache Flink 中广播状态的实用指南

    翻译 | 王柯凝 校对 | 邱从贤(山智) 自版本 Flink 1.5.0 以来,Apache Flink 提供了一种新的状态类型,称为广播状态(Broadcast State).在本文中,将解释什么 ...

  4. 领域驱动设计模式设计与实践_在域驱动设计中使用状态模式

    领域驱动设计模式设计与实践 域驱动设计(DDD)是一种开发软件的方法,其中,通过将实现与核心业务概念的不断发展的模型相联系,解决了问题的复杂性. 该术语是由Eric Evans创造的,并且有一个DDD ...

  5. 在域驱动设计中使用状态模式

    域驱动设计(DDD)是一种软件开发方法,其中,通过将实现与核心业务概念的不断发展的模型相连接,可以解决问题的复杂性. 该术语是由Eric Evans创造的,并且有一个DDD专用站点可以促进其使用. 根 ...

  6. Hibernate_2_Hibernate中对象状态及转化_一级缓存_Session详解_HQL/SQL/Criteria_一对多关系_级联操作

    Hibernate中的对象状态 在Hibernate中持久化对象具有三种状态: 瞬时态, 持久态, 游离态. 瞬时态: 对象没有与Hibernate产生关联(transient,session中没有缓 ...

  7. Flink中的状态管理

    1 Flink中的状态   当数据流中的许多操作只查看一个每次事件(如事件解析器),一些操作会跨多个事件的信息(如窗口操作).这些操作称为有状态.状态由一个任务维护,并且用来计算某个结果的所有数据,都 ...

  8. Flink 1.8.0中的状态生存时间特性:如何自动清理应用程序的状态

    对于许多状态流式计算程序来说,一个常见的需求是自动清理应用程序的状态(state),以便有效地控制状态大小,或者控制程序访问状态的有效时间(例如受限于诸如GDPR等法律条规).Apache Flink ...

  9. 使用Redux在React Navigation App中管理状态

    by Andrea Bizzotto 通过安德里亚·比佐托(Andrea Bizzotto) 使用Redux在React Navigation App中管理状态 (Managing State in ...

最新文章

  1. ArrayList 为什么要实现 RandomAccess 接口?
  2. 掌握生信技术,玩转生态与地理领域的科研套路
  3. python selenium 处理弹窗_python selenium 弹出框处理的实现
  4. 使用进度条,让Python学习更加轻松快乐吧
  5. python与excel表格-Python操作 Excel表格
  6. 【转】家庭装修预算计算公式大全
  7. Sublime Text2,跨平台神级编辑器乱码问题解决
  8. Ticket Lock的Relaxed Atomics优化
  9. 视频、图像原理 设配选择 图像出入门概念理解
  10. iOS用AVAudioPlayer播放m4a音频
  11. 斗地主自动出牌函数c语言,斗地主AI出牌(示例代码)
  12. USB-详解/sys/kernel/debug/usb/devices
  13. Piggy-Bank
  14. Java的String类的常用方法【总结】
  15. 微信抽奖java代码_微信小程序活动助手,包括nodejs后台管理系统和java后台接口
  16. 中小企业oa系统,全球企业邮箱排名
  17. 智驾发展的前世今生|高精度定位的功能安全和完好性,为何如此重要?
  18. 6-1 求圆的面积(类与对象)
  19. ae初级教程视频教程_超级简单的Gulp初学者教程
  20. 西门子step7安装注册表删除_为什么不能安装STEP7 V5.5 SP4,注册表已经删除但是还是不行-工业支持中心-西门子中国...

热门文章

  1. 【STM32】OV2640摄像头学习笔记 转
  2. java 操作svn_java操作svn工具类SvnUtil
  3. VScode初次使用教程
  4. Cocos2d-x 3.9 + VS2012 + BabeLua 如何搭建cocos2dx lua环境
  5. 服务器数据收发测试软件,Packet Sender(UDP/TCP网络测试工具) v7.0.5
  6. 目标检测算法——收藏|小目标检测难点分析(二)
  7. Vue使用echarts地图进阶2(实现多级下钻功能)
  8. android 拍照 Camera类 使用照相机进行拍照 翻译
  9. 你什么都没错,只是太老了。
  10. 用OKR工作法让2023年的自己的薪酬翻倍