You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter中如何在Switch开关开启时修改ListTile外层Container的卡片颜色

解决方法

你当前的问题是共用了全局的isChangeColor变量,所有列表项都会读取同一个值,所以修改后所有卡片都会同步变色。你本身已经维护了_selectedProducts列表存储选中的书籍ID,直接基于这个列表判断当前卡片的选中状态即可,不需要额外新增变量:

  1. 修改buildBook方法里Container的color属性,改为通过当前书籍ID是否在选中列表判断颜色:
Container(
  // 选中时为红色,未选中为绿色,可自行调整
  color: _selectedProducts.contains(book.id) ? Colors.red : Colors.green,
  child: ListTile(
    // 其余原有代码保持不变
  )
)
  1. 删除Switch的onChanged回调里冗余的isChangeColor = selected代码,保留原本的_onProductSelected调用即可,只要你的_onProductSelected逻辑正确(选中时添加ID到列表、取消选中时移除ID),修改后就能实现单个卡片随开关状态变色:
onChanged:(bool? selected) {
  if (selected != null) {
    setState(() {
      _onProductSelected(selected, book.id);
    });
  }
}

附_onProductSelected参考实现:

void _onProductSelected(bool selected, int bookId) {
  if (selected) {
    _selectedProducts.add(bookId);
  } else {
    _selectedProducts.remove(bookId);
  }
}

内容的提问来源于stack exchange,提问作者TimeToCode

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 21:54:01