繁体   English   中英

DropdownButton 不反映值变化

[英]DropdownButton doesn't reflect value change

我正在尝试为 Android 添加一个下拉列表,我正在使用 DropdownButton,为 iOS 一个 CupertinoPicker:

 Platform.isAndroid? AndroidSelect( items: ([0] + priceOptions), value: minPrice, zeroValue: 'no min', onChanged: (int? newVal) { setState(() { minPrice = newVal; }); }, ): CupertinoSelect( initial: initialFromCupertino, onSelectedItemChanged: (index) { setState(() { minPrice = index == 0? null: priceOptions[index - 1]; }); }, options: priceOptionsFrom),

此代码位于showModalBottomSheet中。

AndroidSelect 是一个单独的无状态小部件:

 class AndroidSelect extends StatelessWidget { final List<int> items; final int? value; final String zeroValue; final void Function(int?) onChanged; const AndroidSelect( {Key? key, required this.items, required this.value, required this.onChanged, required this.zeroValue}): super(key: key); @override Widget build(BuildContext context) { print('building…'); return Padding( padding: const EdgeInsets.all(40.0), child: DropdownButton<int>( onChanged: onChanged, value: value?? 0, items: items.map<DropdownMenuItem<int>>((int value) { return DropdownMenuItem<int>( value: value, child: Text( value == 0? zeroValue: '$value CHF', style: const TextStyle(fontSize: 20), ), ); }).toList(), ), ); } }

现在,当我更改下拉列表时,更改将保存到minPrice (我有另一个依赖于它的小部件并且这个小部件更新),但下拉列表不反映新值。 print('building…')不被调用,当setState() {minPrice=newVal}; 被执行。 这是为什么?

showModalBottomSheet的构建器返回StatefulBuilder并使用其 setState 更新对话框 UI。

 showModalBottomSheet( context: context, builder: (c) { return StatefulBuilder( builder: (context, setStateSB) { return SizedBox( width: 300, height: 200, child: AndroidSelect( items: [1, 2, 4, 5], onChanged: (v) { setStateSB(() { value = v; }); }, value: value, zeroValue: "nana", ), ); }, ); });

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM