背景模糊不更新

时间:2020-06-17 04:33:09

标签: flutter dart

我尝试通过“警报”对话框滑块增加背景模糊,但是它没有更新。当我打印该值时,它显示了更新值。这是什么原因造成的。

这是我的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,),
                                   ),

1 个答案:

答案 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);