Flutter实现自定义筛选框的示例代码
作者:LDFeng 时间:2022-08-13 21:52:40
目录
一、首先自定义筛选框的按钮视图,布局很简单,一个listView就可以搞定。
二、定义筛选数据展示列表视图。
一、首先自定义筛选框的按钮视图,布局很简单,一个listView就可以搞定。
1、在数据model中添加了一个selectedModel属性,用来记录当前已选择的筛选项(目前仅支持单选)。
2、当按钮数量小于3个时,按钮最大宽度为屏幕宽度的1/3;小于屏幕宽度时,则为屏幕宽度/按钮数量。
具体代码如下:
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;
});
}));
二、定义筛选数据展示列表视图。
首先在剩余视图上定义一个背景黑色透明的遮罩层,然后在这层Container上展示listView,listView展示的数据为筛选的具体数据内容。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]);
},
);
}),
),
),
),
);
来源:https://juejin.cn/post/6983971330064384037
标签:Flutter,筛选框
0
投稿
猜你喜欢
c#图像截取实例
2022-02-21 07:49:58
C#中的==运算符
2022-08-19 21:50:56
C#中内联函数的用法介绍
2023-04-18 18:29:18
Android开发 旋转屏幕导致Activity重建解决方法
2022-03-02 06:00:23
Java基于socket实现简易聊天室实例
2021-10-30 00:24:56
Java实现经典游戏打砖块游戏的示例代码
2021-06-25 13:30:16
C# 分支与循环介绍
2022-10-26 13:50:02
深入浅析hbase的优点
2021-08-06 19:27:58
Java分布式锁的概念与实现方式详解
2022-07-11 19:33:57
springboot2.0整合dubbo的示例代码
2021-11-30 06:07:11
解读@RabbitListener起作用的原理
2021-08-04 12:58:59
Spring boot集成Kafka消息中间件代码实例
2022-11-06 21:53:48
C#不提升自己程序的权限实现操作注册表
2023-01-24 18:51:31
java fastdfs客户端使用实例代码
2022-11-19 05:35:59
C#简单实现显示中文格式星期几的方法
2021-09-08 12:27:05
Spring-Bean创建对象的步骤方式详解
2023-04-12 22:00:47
springmvc path请求映射到bean 方法的流程
2021-10-25 04:42:58
JAVA基于SnakeYAML实现解析与序列化YAML
2023-11-26 06:14:44
Android 无障碍服务 performAction 调用过程分析
2023-05-03 12:06:17
Android项目中gradle的执行流程
2022-04-08 19:08:15