StatefulBuilder实现Dialog的刷新

在Flutter中使用Dialog时,因为showDialog返回的context与当前页面的context不是同一个,所以通过setState是无法刷新Dialog里面的页面的。

这时我们就可以用StatefulBuilder实现,通过StatefulBuilder包裹后的Widget就变成有状态的Widget了,我们就可以通过StatefulBuilder返回的state进行刷新Dialog内的内容了。

解决方案:使用StatefulBuilder返回的state函数,调用state((){});刷新页面。

showDialog(
  context: context,
  barrierDismissible: true,
  builder: (BuildContext context) {
	return  StatefulBuilder(
	  builder: (context,state){
		return  AlertDialog(
		  title:  Text("Dialog标题"),
		  contentPadding:const EdgeInsets.fromLTRB(20, 20, 0, 0),
		  content: Container(
			height: 300,
			child:ListView.builder(
			  primary: true,
			  shrinkWrap: true,
			  scrollDirection: Axis.vertical,
			  physics: new ClampingScrollPhysics(),
			  itemCount: _items.length,
			  itemBuilder: (context, index) {
				return Container(
				  child: Row(
					mainAxisAlignment: MainAxisAlignment.spaceBetween,
					children: [
					  Text(_items.elementAt(index).text),
					  YmCheckButton(value:_items.elementAt(index).value,
						checked:_currentValue==_items.elementAt(index).value,
						onChanged: (bool checked,dynamic value){
						  if(checked){
							_currentValue = value;
						  }
						  state((){});   //刷新Dialog内的内容
						},
						text: "",
						image: "assets/images/ic_radio.png",
						checkedImage: "assets/images/ic_radio_checked.png",
					  ),
					],
				  ),

				);
			  },
			),
		  ),

		  actions:[
			TextButton(
			  child: Text("取消"),
			  onPressed: () {
				Navigator.of(context).pop();
			  },
			),
			TextButton(
			  child: Text("确认"),
			  onPressed: () {
				Navigator.of(context).pop();

			  },
			),
		  ],
		);
	  } ,
	);
  },
).then((val) {
  print(val);
});


内容来源与作者发布和网络,如有版权相关问题请及时与我们取得联系,我们将立即删除。

关于作者

还如一梦中 点击这里给我发消息

相关推荐

这些你应该也会喜欢

Android Swicth按钮样式自定义

Switch android:id="@+id/switch_btn" android:layout_width="wrap_content" android:layout_height=...

2022-04-14 10:30:56 还如一梦中
Pagging3写起来太麻烦,简单封装及其简单

Pagging3分页写起来很麻烦,这里分享一下我的简化开发的方法,思路就是把获取数据的函数分离出来首先定义一个基础的PagingSource接收任意类型的数据条目类型,可以看出这里将获取key的函数都...

2022-04-13 12:34:12 还如一梦中
在项目中使用Hilt Retrofit使用总结

直接开始,首先我们看看怎么使用Hilt编写Retrofit接口请求类用@Provides注解定义可注入的实例的提供者函数,如:provideHttpClient()用于提供OkHttpClient的实...

2021-12-24 09:53:05 还如一梦中
Android Jetpack Paging 3 下拉刷新和加载更多代码示例

使用Paging3实现列表的下拉刷新和加载更多首先定义列表布局文件androidx.swiperefreshlayout.widget.SwipeRefreshLayout a...

2021-12-16 09:43:09 还如一梦中
StatefulBuilder实现Dialog的刷新

在Flutter中使用Dialog时,因为showDialog返回的context与当前页面的context不是同一个,所以通过setState是无法刷新Dialog里面的页面的。这时我们就可以用St...

2021-06-21 17:08:14 还如一梦中
2021Flutter发布package到Pub终极解决方案

整整折腾了1天半终于成功吧package上传到了pub上。先花了15在淘宝找人代注册了个google账户。先取消配置的环境变量FLUTTER_STORAGE_BASE_URL https://stor...

2021-05-27 11:49:52 还如一梦中
Retrofit+Gson解析工具类封装

定义Retrofit Service类import android.os.Build import cn.wtyc.weiwogroup.global.Constant import cn.wtyc....

2021-12-16 10:38:34 还如一梦中
PHP调用Shell脚本,命令找不到环境变量问题解决

PHP调用Shell脚本需要设置php执行shell的root权限,否则执行sh会找不到命令。1.通过system函数获取当前apache的用户,代码如下:?php header("Content-...

2022-01-26 11:17:01 还如一梦中
Spleeter歌曲分离环境安装笔记

#####################【Windows 安装 spleeter】########################### # 环境变量PATH中 E:\project\tools\p...

2022-01-25 17:32:19 还如一梦中
升级gradle7.0.2错误a repository over an insecure HTTP connection

Specifies whether it is acceptable to communicate with a repository over an insecure HTTP connection...

2021-12-21 09:25:24 还如一梦中

友情链接