Flutter實現(xiàn)自定義篩選框的示例代碼
一、首先自定義篩選框的按鈕視圖,布局很簡單,一個listView就可以搞定。
1、在數(shù)據(jù)model中添加了一個selectedModel屬性,用來記錄當前已選擇的篩選項(目前僅支持單選)。
2、當按鈕數(shù)量小于3個時,按鈕最大寬度為屏幕寬度的1/3;小于屏幕寬度時,則為屏幕寬度/按鈕數(shù)量。
具體代碼如下:
var text = model.selectedFilterModel != null
? model.selectedFilterModel.dictValue
: model.name ?? "";
return Container(
padding: EdgeInsets.symmetric(horizontal: 20),
constraints: BoxConstraints(
maxWidth: MediaQuery.of(context).size.width /
(widget.dataList.length > 3 ? 3 : widget.dataList.length),
maxHeight: widget.viewHeight),
color: Colors.white,
child: InkWell(
child: Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Text(
text,
maxLines: 1,
overflow: TextOverflow.ellipsis,
style: TextStyle(
fontSize: widget.textSize,
color: model.isSelected
? widget.textSelectColor
: widget.textColor),
),
SizedBox(
width: 4,
),
model.isSelected == true
? Icon(Icons.keyboard_arrow_down,
color: widget.textSelectColor)
: Icon(Icons.keyboard_arrow_up, color: widget.textColor),
],
),
onTap: () {
setState(() {
if (_selectModel != null && _selectModel != model) {
_selectModel.isSelected = false;
}
model.isSelected = !model.isSelected;
_selectModel = model;
});
}));
二、定義篩選數(shù)據(jù)展示列表視圖。
首先在剩余視圖上定義一個背景黑色透明的遮罩層,然后在這層Container上展示listView,listView展示的數(shù)據(jù)為篩選的具體數(shù)據(jù)內容。Visibility控制整體視圖是否可見,具體代碼如下:
visible:
Provider.of<FilterModelProvider>(context).isShowFilterOptionsView ??
false,
child: GestureDetector(
onTap: () {
Provider.of<FilterModelProvider>(context, listen: false)
.hideFilterOptionsView();
},
child: Container(
color: Colors.black54,
child: Container(
margin: EdgeInsets.only(
bottom: SizeFit.screenHeight -
widget.filterButtonViewHeight -
SizeFit.appBarHeight -
listViewHeight +
animation.value),
color: Colors.white,
child: ListView.builder(
padding: EdgeInsets.zero,
itemCount: _dataList.length,
itemBuilder: (BuildContext context, int index) {
return InkWell(
child: Container(
height: widget.listHeight,
child: Column(
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
// crossAxisAlignment: CrossAxisAlignment.center,
children: [
Text(
_dataList[index].dictValue,
overflow: TextOverflow.ellipsis,
maxLines: 1,
style: TextStyle(
fontSize: 16,
color: Colors.black87,
fontWeight: FontWeight.normal),
),
Divider(
height: 1,
indent: 1,
)
],
),
),
onTap: () {
Provider.of<FilterModelProvider>(context, listen: false)
.selectFilterOption(_dataList[index]);
},
);
}),
),
),
),
);
到此這篇關于Flutter實現(xiàn)自定義篩選框的示例代碼的文章就介紹到這了,更多相關Flutter 自定義篩選框內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Android中TextView顯示圓圈背景或設置圓角的方法
TextView顯示文本給用戶,并允許他們選擇編輯。TextView是一個完整的文本編輯器,但是其基本類配置為不允許編輯。下面這篇文章主要給大家介紹了關于Android中TextView顯示圓圈背景或設置圓角的方法,需要的朋友可以參考借鑒,下面來一起看看吧。2017-05-05
Android BottomSheetDialog實現(xiàn)底部對話框的示例
這篇文章主要介紹了Android BottomSheetDialog實現(xiàn)底部對話框的示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-06-06
Android AutoCompleteTextView連接數(shù)據(jù)庫自動提示的方法(附demo源碼下載)
這篇文章主要介紹了Android AutoCompleteTextView連接數(shù)據(jù)庫自動提示的方法,結合實例形式分析了AutoCompleteTextView操作數(shù)據(jù)庫的原理與具體技巧,并附帶demo源碼供讀者下載參考,需要的朋友可以參考下2016-02-02
Android中ViewFlipper的使用及設置動畫效果實例詳解
這篇文章主要介紹了Android中ViewFlipper的使用及設置動畫效果的方法,以實例形式較為詳細的分析了ViewFlipper的功能、原理及設置與使用技巧,具有一定參考借鑒價值,需要的朋友可以參考下2015-10-10
Android實現(xiàn)調用系統(tǒng)分享功能示例的總結
這篇文章主要介紹了通過Android調用系統(tǒng)分享文本信息、單張圖片、多個文件和指定分享到微信、QQ,同時分享圖片和文字的功能示例,小編覺得挺不錯,一起跟隨小編過來看看吧2018-05-05

