android-layout - 如何使所有过滤器在轻按颤动时都不会改变颜色
问题描述
我正在尝试为接受一个参数(标签名称)并在点击时突出显示的过滤器制作一个模板。但是这样做的问题是,当一个过滤器被点击时,它们都会改变颜色,因为它们都使用相同的布尔值。抱歉,我是初学者,我认为我的做法是错误的
class _HomeState extends State<Home> {
bool filterTap = true;
GestureDetector filterTemplate(String tag) {
return GestureDetector(
onTap: () {
setState(() {
filterTap = !filterTap;
});
},
child: Center(
child: Container(
margin: const EdgeInsets.only(right: 20.0),
padding: const EdgeInsets.symmetric(vertical: 5.0, horizontal: 10.0),
decoration: BoxDecoration(
border: Border.all(color: Colors.grey),
borderRadius: BorderRadius.all(Radius.circular(4.0)),
color: filterTap ? Colors.grey : Colors.transparent,
),
child: Text(
tag,
style: TextStyle(
color: filterTap ? Colors.grey[900] : Colors.grey,
letterSpacing: 2.0,
),
),
),
),
);
}
解决方案
首先定义一个 StructFilter 类及其属性,例如这里是一个选项:
class StructFilter {
StructFilter(this.tag,this.filterTap);
String tag;
bool filterTap;
}
然后将所有过滤器信息收集到 StructFilter(ie List<StructFilter> filterList
) 列表中。
例如,您可以尝试:
Listview(
children: filterList.map((item){
return filterTemplate(item);
}).toList();
)
GestureDetector filterTemplate(StructFilter structFilter) {
return GestureDetector(
onTap: () {
setState(() {
structFilter.filterTap = !structFilter.filterTap;
});
},
),
);
}
推荐阅读
- c++ - 如何仅使用 c++ 中超过 2 名教师任期的 getter 来显示数据
- c# - 更改 .Net 5 项目 Sdk 的后果
- laravel - Laravel 更改过期的链接令牌以重置密码?
- angular - 我可以以编程方式(动态)将指令应用于 nativeElement 吗?
- sql - 创建作业以在每天早上 6 点运行 sp_tblLog_insert。运行作业
- oracle-apex - Oracle Apex 根据角色筛选选择列表查询
- sql - Grafana 数据链接到自定义变量
- reactjs - 我正在使用 FormSubmit 并且文件上传给了我 500 错误,没有它它工作得很好
- go - GoLang:致命错误:回调函数太多
- c++ - 关于linux shell的函数和C函数的关系()