Drawer的父类为StatelessWidget,不可刷新,今天来讲一下刷新的办法
需求:点击A用户,弹出侧边栏,侧边栏展示用户的数据。
需要使用StreamBuilder。但是使用stream发数据是行不通的,因为数据传递不进去。
但是使用StreamBuilder依旧可以收到通知。所以流程就需要改变一下
一、点击按键后刷新Drawer并展示
1、使用StatefulWidget
2、在state里创建备用数据,本例为SSML ssml=SSML();
3、点击按键,更新备用数据:ssml = ssmlList[index];
4、通知StreamBuilder:streamController.add(‘event’);
5、StreamBuilder接到通知,使用备用数据重新构造

二、刷新Drawer面板上的内容
具体为使用StatefulBuilder自带的setState方法,不要使用公共的,作为区别,名字改为setStateB。代码片段为_changeRate方法

class DrawerTest extends StatefulWidget {final File file;const DrawerTest(this.file, {super.key});@overrideState<StatefulWidget> createState() {return _DrawerTestState();}
}class _DrawerTestState extends State<DrawerTest> {SSML ssml = SSML();StreamController streamController = StreamController.broadcast();List<SSML> ssmlList = [];@overridevoid initState() {ssmlList.add(SSML()..name = 'dan');ssmlList.add(SSML()..name = 'ada');super.initState();}final GlobalKey<ScaffoldState> _ssKey = GlobalKey<ScaffoldState>();@overrideWidget build(BuildContext context) {return Scaffold(key: _ssKey,drawer: _getDrawer(),appBar: AppBar(leading: IconButton(onPressed: () {Navigator.pop(context);},icon: const Icon(Icons.arrow_back)),title: const Text('Drawer测试'),),body: SafeArea(child: Container(color: Colors.white10,padding: const EdgeInsets.all(15),child: ListView.builder(itemCount: ssmlList.length,itemBuilder: (context, index) {return ElevatedButton(onPressed: () {ssml = ssmlList[index];streamController.add('event'); //通知StreamBuilder该刷新了_ssKey.currentState!.openDrawer();},child: Text('${ssmlList[index].name}打开左边栏'));}),)));}StreamBuilder _getDrawer() {return StreamBuilder(stream: streamController.stream,builder: (context, shot) {return Drawer(child: StatefulBuilder(builder: (context, setStateB) {return _changeRate(ssml);},));});}Widget _changeRate(SSML ssml) {return StatefulBuilder(builder: (context, setStateB) {return Row(mainAxisAlignment: MainAxisAlignment.spaceBetween,children: [Text('速度:${ssml.rate}'),Slider(value: ssml.rate.toDouble(),max: 500,min: -500,onChanged: (value) {setStateB(() {ssml.rate = value.toInt();});// setState(() {});})],);});}
}class SSML {late String name;int rate = 0;
}

侧边栏Drawer栏刷新相关推荐

  1. 纯CSS实现侧边栏/分栏高度自动相等

    一.为何要分栏高度一致? 分栏高度一致的目的是更加美观.举两个例子吧 2.1 对于分栏布局,我们或许会用边框(border)进行分隔,就如鄙人博客的分栏 此时最担心的问题就是高度不一致,尤其是无边框属 ...

  2. vue 导航栏刷新页面定位:

    不想分析可以直接看解决方案 问题描述: 通过router的route-link可以实现导航栏的功能,并且可以跳转到相应页面 但是刷新页面导航栏没有定位到当前页面一栏. 问题分析: 定位导航栏步骤 1. ...

  3. html页面跳转时导航栏不变_解决Vue-iview封装导航栏刷新,导航栏消失之坑

    1.前言 记录一次跳转路由时,导航栏选中消失的神秘事件. 2.事情原图 请看这张图,一开始路由跳转到这页面时,导航栏是有高亮的,但是在刷新的时候,高亮就消失了: 总所周知,客户是一种可以从鸡蛋里面挑出 ...

  4. Flutter Drawer侧边栏、以及侧边栏内容布局

    1.Drawer(抽屉) 侧边栏 在 Scaffold 组件里面传入 drawer 参数可以定义左侧边栏,传入 endDrawer 可以定义右侧边栏.侧边栏默认是隐藏的,我们可以通过手指滑动显示侧边栏 ...

  5. 浅识Flutter 基本组件Scaffold的 drawer属性 app创建头像

    浅识Flutter 基本组件Scaffold的 drawer属性 app创建头像 在项目开发中使用本地图片资源文件的步骤. 1.在项目下创建一个文件夹image 2.将本地图片放入images文件夹里 ...

  6. layui tree ajax刷新,layer 刷新某个页面的实现方法

    layer 刷新某个页面的实现方法 一:使用layer.open打开的子页面 window.parent.location.reload()//刷新父页面 var index = parent.lay ...

  7. Flutter中Scaffold布局的使用详解及实例代码

    Flutter中Scaffold布局的使用详解及实例代码 Scaffold实现了基本的Material布局.只要是在Material中定义了的单个界面显示的布局控件元素,都可以使用Scaffold来绘 ...

  8. Flutter中的Scaffold

    文章目录 1.backgroundColor属性 2.appBar属性(顶部标题栏) 3.body属性(页面的主体部分) 4.bottomNavigationBar属性(底部导航栏) 实现效果: 5. ...

  9. ems-员工管理系统

    员工管理系统 一.项目搭建 1.1 初始化项目依赖 二.ems的前端 三.ems的后端 config pojo Controller server server.impl mapper mapper. ...

最新文章

  1. Ubuntu 16.04安装QtCharts时报错:'qtConfig' is not a recognized test function.
  2. dojo中的dojoConfig配置
  3. Java代码的维护与更新,Java常用的规则引擎,让你变动的代码更加容易维护
  4. [Android实例] 有关spinner 的item问题 谁能给解答下??
  5. 名为 cursor_jinserted 的游标不存在_你还在买丑橘吗?知道的人不多,看完后记得告诉身边人...
  6. python语句分为复合语句_对Python中for复合语句的使用示例讲解
  7. [转载] python 超高精度除法_Python十进制-除法,舍入,精度
  8. android Broadcast广播消息代码实现
  9. 邬建国教授受聘为浙江大学光彪教授
  10. vb.net使用DirectX入门知识
  11. Mac大小写切换需长按caps lock键解决办法
  12. 初学者之路—————Cycle GAN
  13. IM即时通讯需要解决的问题
  14. html音乐播放器样式,html5扁平化mp3音乐播放器样式代码
  15. uniapp开发h5微信授权登录(详细教程)
  16. origin与matlab 双向联合数据处理
  17. 【104】ntvdm.exe占内存极大的问题
  18. 链表和线性表的优缺点
  19. SQL 如何去掉字段中千位的逗号(比如set @= '1,320.00' 想得到@= '1320.00' )
  20. 今天看漫画不爽,操起ruby...

热门文章

  1. 最新版的QQ如何查看好友是否隐身
  2. 2022年华为杯中国研究生数学建模竞赛E题思路
  3. StarRocks X Flink CDC,打造端到端实时链路
  4. 汽车Vin码识别技术应用与研发原理
  5. 约瑟夫问题I(由n个人坐成一圈,按顺时针由1开始给他们编号。然后由第一个人开始报数,数到m的人出局。现在需要求的是最后一个出局的人的编号。)
  6. android studio手机连接本地服务器测试
  7. 手机如何换鸿蒙os,手机知识:怎么换鸿蒙系统
  8. JavaScript 获取每月最大的天数
  9. django1.11 mysql配置_使用Django1.11创建简单的资产管理平台
  10. matlab dpsk,基于MATLAB的2DPSK信号仿真.doc