【问题标题】:how to change default text color in ListView in flutter Dart?如何在 Flutter Dart 中更改 ListView 中的默认文本颜色?
【发布时间】:2022-01-18 06:07:15
【问题描述】:

我想随复选框一起更改ListView 的文本颜色,但不能使用ListView's onselected 项动态更改文本颜色? 我还在 set State 选项中添加了颜色,但找不到我正在寻找的结果。

这是我的代码:

ListView(
        children: [
          Text(
            '''   Categories''',
            style: TextStyle(
              color: Color(0xff181725),
              fontSize: 24,
              fontFamily: "Gilroy",
              fontWeight: FontWeight.normal,
            ),
          ),
          SizedBox(height: 13),
          ...checkBoxListOne.map(
            (item) => ListTile(
              onTap: () => onAllClicked(item),
              leading: Checkbox(
                shape: RoundedRectangleBorder(
                  borderRadius: BorderRadius.circular(5),
                ),
                side: BorderSide(
                  color: Color(0xffC2C2C2),
                  width: 2,
                ),
                activeColor: Color(0xff53B175),
                value: item.value,
                onChanged: (value) => onAllClicked(item),
              ),
              title: Text(
                item.title!,
                style: TextStyle(
                  color: Color(0xff181725),
                ),
              ),
            ),
          ),
          SizedBox(height: 40),
          Text(
            '''   Brand''',
            style: TextStyle(
              color: Color(0xff181725),
              fontSize: 24,
              fontFamily: "Gilroy",
              fontWeight: FontWeight.normal,
            ),
          ),
          SizedBox(height: 13),
          ...checkBoxListTwo.map(
            (item) => ListTile(
              onTap: () => onAllClicked(item),
              leading: Checkbox(
                shape: RoundedRectangleBorder(
                  borderRadius: BorderRadius.circular(5),
                ),
                side: BorderSide(
                  color: Color(0xffC2C2C2),
                  width: 2,
                ),
                activeColor: Color(0xff53B175),
                value: item.value,
                onChanged: (value) => onAllClicked(item),
              ),
              title: Text(item.title!),
            ),
          ),
        ],
      ),

这里是setState 部分:

onAllClicked(CheckBoxModal ckbItem) { setState(() { ColoredBox( color: Color(0xff53B175), ); ckbItem.value = !ckbItem.value; }); }

【问题讨论】:

    标签: flutter dart listview listviewitem


    【解决方案1】:

    您应该在checkBoxListOne 列表中的item 对象中添加一个字段isSelected,并在项目的onTap (item.isSelected = !item.isSelected) 中设置/重置该字段,然后调用setState(){}。当您渲染 item 时,而不是 activeColor: Color(0xff53B175) 执行类似 activeColor: item.isSelected ? Color(0xff53B175) : Color(0xffffffff) 的操作。

    由于此更改,每当点击一个项目时,列表都会重新渲染,渲染时项目的颜色取决于其“点击或未点击”状态。

    如果您不能(或不想)添加字段,您可以创建一个与checkBoxListOne 列表长度相同的单独的bool 数组,并使用它来跟踪选择了哪个项目。

    【讨论】:

    • 我按照你说的做了所有的修改,但是有一个错误说A nullable expression can't be used as a condition. Try checking that the value isn't 'null' before using it as a condition. Code: CheckBoxModal(isSelected: false), & class CheckBoxModal { bool value; bool? isSelected; CheckBoxModal({ this.value = false, this.isSelected , }); } and onAllClicked(CheckBoxModal ckbItem) { setState(() { ColoredBox( color: Color(0xff53B175), ); ckbItem.value = !ckbItem.value; ckbItem.isSelected = !ckbItem.isSelected; }); }
    • isSelected 字段必须是bool,而不是bool?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-08-24
    • 2017-10-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-05
    相关资源
    最近更新 更多