我正在执行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类下。
它看起来像不会更新值,并且在尝试更改值时保持不变。
问题是Slider中有2个必需的参数(onChanged, value),所以我应该更新此参数或UI保持一致,请观看视频如何运行应用程序
(onChanged, value)
YouTube上的视频
我还在Github存储库中打开了一个问题以获得相关帮助,如果有人想获取更多信息,请参见问题#19323
问题在于,掌握状态的不是您的对话框。是名为的小部件showDialog。也是一样,当你打电话的setState,你是在对话框的创造者打来的。
showDialog
setState
问题是,对话框 不是 在build方法内部构建的。它们在不同的小部件树上。因此,当对话框创建者更新时,对话框不会。
build
相反,您应该使对话框保持状态。将数据保存在该对话框中。然后用于Navigator.pop(context, sliderValue)将滑块值发送回对话框创建器。
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(), )