首页 > 解决方案 > 如何使所有过滤器在轻按颤动时都不会改变颜色

问题描述

我正在尝试为接受一个参数(标签名称)并在点击时突出显示的过滤器制作一个模板。但是这样做的问题是,当一个过滤器被点击时,它们都会改变颜色,因为它们都使用相同的布尔值。抱歉,我是初学者,我认为我的做法是错误的

  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,
            ),
          ),
        ),
      ),
    );
  }

标签: android-layoutflutterdart

解决方案


首先定义一个 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;
        });
       },
      ),
    );
  }

推荐阅读