Flutter更新showDialog以及showModalBottomSheet中的状态中的内容
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中的状态中的内容相关推荐
- 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 ...
- Redux简介以及Redux应用程序中的状态更新方式
by Syeda Aimen Batool 通过Syeda Aimen Batool Redux简介以及Redux应用程序中的状态更新方式 (An intro to Redux and how sta ...
- as点击发送广播_Apache Flink 中广播状态的实用指南
翻译 | 王柯凝 校对 | 邱从贤(山智) 自版本 Flink 1.5.0 以来,Apache Flink 提供了一种新的状态类型,称为广播状态(Broadcast State).在本文中,将解释什么 ...
- 领域驱动设计模式设计与实践_在域驱动设计中使用状态模式
领域驱动设计模式设计与实践 域驱动设计(DDD)是一种开发软件的方法,其中,通过将实现与核心业务概念的不断发展的模型相联系,解决了问题的复杂性. 该术语是由Eric Evans创造的,并且有一个DDD ...
- 在域驱动设计中使用状态模式
域驱动设计(DDD)是一种软件开发方法,其中,通过将实现与核心业务概念的不断发展的模型相连接,可以解决问题的复杂性. 该术语是由Eric Evans创造的,并且有一个DDD专用站点可以促进其使用. 根 ...
- Hibernate_2_Hibernate中对象状态及转化_一级缓存_Session详解_HQL/SQL/Criteria_一对多关系_级联操作
Hibernate中的对象状态 在Hibernate中持久化对象具有三种状态: 瞬时态, 持久态, 游离态. 瞬时态: 对象没有与Hibernate产生关联(transient,session中没有缓 ...
- Flink中的状态管理
1 Flink中的状态 当数据流中的许多操作只查看一个每次事件(如事件解析器),一些操作会跨多个事件的信息(如窗口操作).这些操作称为有状态.状态由一个任务维护,并且用来计算某个结果的所有数据,都 ...
- Flink 1.8.0中的状态生存时间特性:如何自动清理应用程序的状态
对于许多状态流式计算程序来说,一个常见的需求是自动清理应用程序的状态(state),以便有效地控制状态大小,或者控制程序访问状态的有效时间(例如受限于诸如GDPR等法律条规).Apache Flink ...
- 使用Redux在React Navigation App中管理状态
by Andrea Bizzotto 通过安德里亚·比佐托(Andrea Bizzotto) 使用Redux在React Navigation App中管理状态 (Managing State in ...
最新文章
- ArrayList 为什么要实现 RandomAccess 接口?
- 掌握生信技术,玩转生态与地理领域的科研套路
- python selenium 处理弹窗_python selenium 弹出框处理的实现
- 使用进度条,让Python学习更加轻松快乐吧
- python与excel表格-Python操作 Excel表格
- 【转】家庭装修预算计算公式大全
- Sublime Text2,跨平台神级编辑器乱码问题解决
- Ticket Lock的Relaxed Atomics优化
- 视频、图像原理 设配选择 图像出入门概念理解
- iOS用AVAudioPlayer播放m4a音频
- 斗地主自动出牌函数c语言,斗地主AI出牌(示例代码)
- USB-详解/sys/kernel/debug/usb/devices
- Piggy-Bank
- Java的String类的常用方法【总结】
- 微信抽奖java代码_微信小程序活动助手,包括nodejs后台管理系统和java后台接口
- 中小企业oa系统,全球企业邮箱排名
- 智驾发展的前世今生|高精度定位的功能安全和完好性,为何如此重要?
- 6-1 求圆的面积(类与对象)
- ae初级教程视频教程_超级简单的Gulp初学者教程
- 西门子step7安装注册表删除_为什么不能安装STEP7 V5.5 SP4,注册表已经删除但是还是不行-工业支持中心-西门子中国...
热门文章
- 【STM32】OV2640摄像头学习笔记 转
- java 操作svn_java操作svn工具类SvnUtil
- VScode初次使用教程
- Cocos2d-x 3.9 + VS2012 + BabeLua 如何搭建cocos2dx lua环境
- 服务器数据收发测试软件,Packet Sender(UDP/TCP网络测试工具) v7.0.5
- 目标检测算法——收藏|小目标检测难点分析(二)
- Vue使用echarts地图进阶2(实现多级下钻功能)
- android 拍照 Camera类 使用照相机进行拍照 翻译
- 你什么都没错,只是太老了。
- 用OKR工作法让2023年的自己的薪酬翻倍