Flutter-为什么滑块在AlertDialog中不更新?
问题内容:
我正在执行AlertDialog,所以当我尝试将Slider小部件插入值状态时,听起来真的很陌生,如果Slider在AlertDialog之外,则不会发生这种情况
new Slider(
onChanged: (double value) {
setState(() {
sliderValue = value;
});
},
label: 'Oi',
divisions: 10,
min: 0.0,
max: 10.0,
value: sliderValue,
)
AlertDialog的完整小部件代码
Future<Null> _showDialog() async {
await showDialog<Null>(
context: context,
builder: (BuildContext context) {
return new AlertDialog(
title: const Text('Criar novo cartão'),
actions: <Widget>[
new FlatButton(onPressed: () {
Navigator.of(context).pop(null);
}, child: new Text('Hello'))
],
content: new Container(
child: new Column(
mainAxisAlignment: MainAxisAlignment.start,
mainAxisSize: MainAxisSize.min,
children: <Widget>[
new Text('Deseja iniciar um novo cartão com quantos pedidos ja marcados?'),
new Slider(
onChanged: (double value) {
setState(() {
sliderValue = value;
});
},
label: 'Oi',
divisions: 10,
min: 0.0,
max: 10.0,
value: sliderValue,
)
],
),
),
);
}
);
}
一切都在StatefullWidget的State类下。
它看起来像不会更新值,并且在尝试更改值时保持不变。
更新1
问题是Slider中有2个必需的参数(onChanged, value)
,所以我应该更新此参数或UI保持一致,请观看视频如何运行应用程序
更新2
我还在Github存储库中打开了一个问题以获得相关帮助,如果有人想获取更多信息,请参见问题#19323
问题答案:
问题在于,掌握状态的不是您的对话框。是名为的小部件showDialog
。也是一样,当你打电话的setState
,你是在对话框的创造者打来的。
问题是,对话框 不是 在build
方法内部构建的。它们在不同的小部件树上。因此,当对话框创建者更新时,对话框不会。
相反,您应该使对话框保持状态。将数据保存在该对话框中。然后用于Navigator.pop(context, sliderValue)
将滑块值发送回对话框创建器。
对话框中的等效项是
FlatButton(
onPressed: () => Navigator.of(context).pop(sliderValue),
child: Text("Hello"),
)
然后您可以了解showDialog
结果:
final sliderValue = await showDialog<double>(
context: context,
builder: (context) => MyDialog(),
)