簡體   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