我尝试通过“警报”对话框滑块增加背景模糊,但是它没有更新。当我打印该值时,它显示了更新值。这是什么原因造成的。
这是我的AlertDialog
_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,),
),
答案 0 :(得分:1)
在showDialog()之后是否有setState()? 请尝试执行以下操作。
当您使用showwait调用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);