我一直在試驗我的顫振下拉按鈕。我正在做的事情的背景。我有一個應用程式可以創建作業并將其提供給可用的作業人員。我已將所有員工存盤在選單按鈕的串列中。我將在下面放置代碼以顯示作業票下拉按鈕的創建。selectedTech 位于程式的頂部,所以這不是問題
String selectedTech = "";
Container(
// margin: EdgeInsets.only(right: 20),
width: MediaQuery.of(context).size.width / 2.5,
child: DropdownButton(
hint: Text(
selectedTech,
style: TextStyle(color: Colors.blue),
),
isExpanded: true,
iconSize: 30.0,
style: TextStyle(color: Colors.blue),
items: listStaffUsers.map(
(val) {
return DropdownMenuItem<String>(
value: val,
child: Text(val),
);
},
).toList(),
onChanged: (val) {
setState(
() {
selectedTech = val.toString();
},
);
},
),
),
上面的代碼完美運行。但是,當我想更新作業票以更改可用的作業人員時,我想將下拉選單的初始值設定為分配給該作業的作業人員,因為并不總是保證他們會更改分配的作業人員去作業。當我將所選值設定為我的初始值時,我被該值鎖定并且無法更改它。這是我用來更新作業人員的代碼。
String selectedTech = "";
int the build method I add
selectedTech = widget.staff;
Container(
// margin: EdgeInsets.only(right: 20),
width: MediaQuery.of(context).size.width / 2.5,
child: DropdownButton(
hint: Text(
selectedTech,
style: TextStyle(color: Colors.blue),
),
isExpanded: true,
iconSize: 30.0,
style: TextStyle(color: Colors.blue),
items: listStaffUsers.map(
(val) {
return DropdownMenuItem<String>(
value: val,
child: Text(val),
);
},
).toList(),
onChanged: (val) {
setState(
() {
selectedTech = val.toString();
},
);
},
),
),
任何指導或示例將不勝感激。
uj5u.com熱心網友回復:
據我了解,您在 Widget 構建方法下設定 selectedTech = widget.staff ,然后像這樣回傳小部件:
Widget build(BuildContext context) {
selectedTech = widget.staff;
return Container( ...
每當呼叫 build 方法時(當您呼叫 setState 時),這將系統地將您的 selectedTech 鎖定到 widget.staff。我的意思是每當您更改下拉選單的值時,該值都不會設定為下拉選單上的實際值。因為您呼叫了 setState,所以 setState 從頭開始??構建小部件,并且在這些步驟中呼叫了 selectedTech = widget.staff。
而不是在構建方法中,您應該先初始化它,然后繼續構建方法。
class _StaffHomeState extends State<StaffHome> {
String? selectedTech;
// Write a function to initialize the value of selectedTech
void initializeSelectedTech () {
selectedTech = widget.staff;
}
// Call this function in initState to initialize the value
@override
void initState() {
initializeSelectedTech();
super.initState();
}
// Then Widget build method
Widget build(BuildContext context) {
return Container( .....
通過這種方式,您首先在構建方法之前初始化值,并且每當狀態更改時,資料將被持久化。我希望它會有所幫助。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/412689.html
標籤:
上一篇:在Dart/Flutter中將List<XFile>轉換為檔案
下一篇:如何列印出物件的所有鍵值對
