繼上一篇Flutter自定義組件的視頻短課(視頻地址: www.bilibili.com/video/BV1ap… )後,咱們繼續來聊自定義組件。視頻中我爲你們詳解了Cupertino風格的單選框的實現,此次咱們就說說Cupertino風格的複選框。咱們先來看看效果:
bash
CupertinoButton(
child: Container(
decoration: BoxDecoration(
color: isChecked
? CupertinoColors.systemGreen
: CupertinoColors.white,
border: Border.all(
color: CupertinoColors.systemGrey,
style: BorderStyle.solid,
width: 1),
borderRadius: BorderRadius.all(Radius.circular(5))),
child: Icon(CupertinoIcons.check_mark,
size: 100,
color: isChecked
? CupertinoColors.white
: CupertinoColors.systemGrey),
),
onPressed: () {
setState(() {
isChecked = !isChecked;
});
}
)
複製代碼
怎麼樣?很簡單吧?不過,這裏還有一個坑。
在實際應用中,不可能吧一個複選框設定到100大小,當把它設置爲足夠小的時候,Button的點擊事件會在複選框外還會響應。這是由於CupertinoButton中有一個屬性,叫作minSize。經過閱讀源碼,咱們發現它有一個預設值:kMinInteractiveDimensionCupertino,值爲44.0。
換言之,若是咱們的複選框大小比44小(實際上大多數狀況皆如此)時,用戶點擊複選框外部時,也會響應。因此,咱們還須要給定minSize大小,至少是和icon組件的大小一致,或更小。
好了,本篇文章的內容到這裏就結束了,但願可以幫到你。ide