最近在用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: () {},
),
],
);
},
)