W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
Material 組件庫中提供了 Material 風格的單選開關Switch
和復選框Checkbox
,雖然它們都是繼承自StatefulWidget
,但它們本身不會保存當前選中狀態(tài),選中狀態(tài)都是由父組件來管理的。當Switch
或Checkbox
被點擊時,會觸發(fā)它們的onChanged
回調(diào),我們可以在此回調(diào)中處理選中狀態(tài)改變邏輯。下面看一個簡單的例子:
class SwitchAndCheckBoxTestRoute extends StatefulWidget {
@override
_SwitchAndCheckBoxTestRouteState createState() => new _SwitchAndCheckBoxTestRouteState();
}
class _SwitchAndCheckBoxTestRouteState extends State<SwitchAndCheckBoxTestRoute> {
bool _switchSelected=true; //維護單選開關狀態(tài)
bool _checkboxSelected=true;//維護復選框狀態(tài)
@override
Widget build(BuildContext context) {
return Column(
children: <Widget>[
Switch(
value: _switchSelected,//當前狀態(tài)
onChanged:(value){
//重新構建頁面
setState(() {
_switchSelected=value;
});
},
),
Checkbox(
value: _checkboxSelected,
activeColor: Colors.red, //選中時的顏色
onChanged:(value){
setState(() {
_checkboxSelected=value;
});
} ,
)
],
);
}
}
上面代碼中,由于需要維護Switch
和Checkbox
的選中狀態(tài),所以SwitchAndCheckBoxTestRoute
繼承自StatefulWidget
。在其build
方法中分別構建了一個Switch
和Checkbox
,初始狀態(tài)都為選中狀態(tài),當用戶點擊時,會將狀態(tài)置反,然后回調(diào)用setState()
通知 Flutter framework 重新構建 UI。
Switch
和Checkbox
屬性比較簡單,讀者可以查看 API 文檔,它們都有一個activeColor
屬性,用于設置激活態(tài)的顏色。至于大小,到目前為止,Checkbox
的大小是固定的,無法自定義,而Switch
只能定義寬度,高度也是固定的。值得一提的是Checkbox
有一個屬性tristate
,表示是否為三態(tài),其默認值為false
,這時 Checkbox 有兩種狀態(tài)即“選中”和“不選中”,對應的value值為true
和false
。如果tristate
值為true
時,value 的值會增加一個狀態(tài)null
,讀者可以自行了解。
通過Switch
和Checkbox
我們可以看到,雖然它們本身是與狀態(tài)(是否選中)關聯(lián)的,但它們卻不是自己來維護狀態(tài),而是需要父組件來管理狀態(tài),然后當用戶點擊時,再通過事件通知給父組件,這樣是合理的,因為Switch
和Checkbox
是否選中本就和用戶數(shù)據(jù)關聯(lián),而這些用戶數(shù)據(jù)也不可能是它們的私有狀態(tài)。我們在自定義組件時也應該思考一下哪種狀態(tài)的管理方式最為合理。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: