flutter - 背景模糊不更新
问题描述
我尝试通过警报对话框滑块增加背景模糊,但它没有更新。当我打印值时,它显示更新值。这是什么原因造成的。
这是我的警报对话框
_blurdialog(BuildContext context){
showDialog<void>(context:context,builder:(context){
return AlertDialog(
title: const Text('Background Blur'),
content: StatefulBuilder(
builder:(BuildContext context, StateSetter setState) {
return Column(
mainAxisSize:MainAxisSize.min,
children:[
Container(
child: Slider(
value: _blurvalue,
min: 0,
max: 5,
divisions: 5,
onChanged: (value) {
setState(() {
_blurvalue = value;
});
}
),
),
]);
}),
actions: <Widget>[
FlatButton(
child: const Text('Done'),
onPressed: () {
Navigator.of(context).pop(_blurvalue);
print(_blurvalue);
},
),
]
);});
}
我想要模糊的容器
Stack(children: <Widget>[ClipRect(
child: BackdropFilter(filter: ui.ImageFilter.blur(sigmaX: _blurvalue,
sigmaY: _blurvalue),
child: Container(color: Colors.black.withOpacity(0),
height: 400,
width: 400,),
),
解决方案
showDialog() 之后有 setState() 吗?请尝试如下操作。
当您使用 await 调用 showDialog 并接收数据时。并调用 setState()。
_blurdialog(BuildContext context) async {
var newBlurValue = await showDialog<void>(context:context,builder:(context){ return
AlertDialog(
title: const Text('Background Blur'),
content: StatefulBuilder(
builder:(BuildContext context, StateSetter setState) {
return Column(
mainAxisSize:MainAxisSize.min,
children:[
Container(
child: Slider(
value: _blurvalue,
min: 0,
max: 5,
divisions: 5,
onChanged: (value) {
setState(() {
_blurvalue = value;
});
}
),
),
]);
}),
actions: <Widget>[
FlatButton(
child: const Text('Done'),
onPressed: () {
Navigator.of(context).pop(_blurvalue);
print(_blurvalue);
},
),
] );});
setState(() => _blurvalue = newBlurValue);
}
------------- or ---------------
Future<dynamic> _blurdialog(BuildContext context) async {
return await showDialog<void>(context:context,builder:(context){ return
AlertDialog(
title: const Text('Background Blur'),
content: StatefulBuilder(
builder:(BuildContext context, StateSetter setState) {
return Column(
mainAxisSize:MainAxisSize.min,
children:[
Container(
child: Slider(
value: _blurvalue,
min: 0,
max: 5,
divisions: 5,
onChanged: (value) {
setState(() {
_blurvalue = value;
});
}
),
),
]);
}),
actions: <Widget>[
FlatButton(
child: const Text('Done'),
onPressed: () {
Navigator.of(context).pop(_blurvalue);
print(_blurvalue);
},
),
] );});
}
...
var newBlur = await _blurdialog(context);
setState(() => _blurvalue = newBlur);
推荐阅读
- python - 在 Python 中创建等高线增强的漏斗图
- javascript - 获取 API 响应时在 javascript 文件中获取空白响应
- windows - Powershell:每分钟任务
- hibernate - 休眠两个会话数据不同步
- javascript - 在 React Application 的节点 js 服务器中运行创建数据库的 python 脚本
- javascript - 将参数从 HTML 和 Flask 传递给 Javascript 以进行加载并单击
- python - 从一列的每个单元格到另一个单元格的数据框一对多
- python - 子进程无法运行批处理文件来打开 jar
- tbb - 区分英特尔 tbb 中的连续传递与阻塞风格
- javascript - 无法以正确的格式显示 - PHP CodeIgniter