Flutter更新Dialog弹出框里面的UI

最近在用Flutter做项目的时候发现一个问题,我在一个弹出框里面加了一个Slider,但是我拖动的时候Slider没反应,后来想到可能是因为SetState更新的是当前页面的UI,而弹出框和当前界面属于两个不同的界面,所以使用setstate更新的是底部的界面,后来百度了一下找到了两种解决方法,这里记录一下,给后来人一点帮助

使用StatefulBuilder包裹Dialog,builder里面有两个参数,第二个是StateSetter对象,需要更新的时候使用这个对象去更新

return StatefulBuilder(
  builder: (context, mSetState) {
    return AlertDialog(
      title: Text('设置节点数量'),
      content: SingleChildScrollView(
        child: new Column(
          children: <Widget>[
            new Container(
              child: new Slider(
                value: _currentPosition,
                label:
                    "$_currentPosition",
                divisions: 20,
                min: 0.0,
                max: 20.0,
                onChanged: (value) {
                  mSetState(() {
                    _currentPosition = value
                        .roundToDouble();
                  });
                },
              ),
            )
          ],
        ),
      ),
      actions: <Widget>[
        FlatButton(
          child: Text('取消'),
          onPressed: () {
            Navigator.of(context).pop();
          },
        ),
        FlatButton(
          child: Text('确定'),
          onPressed: () {},
        ),
      ],
    );
  },
)
    原文作者:Eiter
    原文地址: https://blog.csdn.net/qq_34379916/article/details/83900328
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞