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

Flutter中无法修改ExpansionTile外层Container的颜色

问题原因与解决方案

问题出在你把change颜色变量定义在了build方法内部——每次调用setState触发组件重建时,build方法会重新执行,change会被重新初始化为Colors.green,导致颜色更新逻辑失效。

修正步骤

  • 将Color change = Colors.green;从build方法内移到对应State类的成员变量位置,让变量被State实例持有,避免重建时被重置。
  • 保留onExpansionChanged中的状态更新逻辑即可。

完整修正代码

class _YourPageState extends State<YourPage> {
  // 把颜色变量放在State类成员位置
  Color tileContainerColor = Colors.green;

  @override
  Widget build(BuildContext context) {
    final width = MediaQuery.of(context).size.width;
    return Container(
      width: width * 0.19,
      decoration: BoxDecoration(
        color: tileContainerColor,
        borderRadius: const BorderRadius.only(
          topRight: Radius.circular(40.0),
          bottomRight: Radius.circular(40.0),
        ),
      ),
      child: ExpansionTile(
        title: const Text('ExpansionTile 2'),
        subtitle: const Text('自定义展开箭头图标'),
        children: const <Widget>[
          ListTile(title: Text('这是第2个列表项')),
        ],
        onExpansionChanged: (expanded) {
          setState(() {
            // 简化条件判断写法
            tileContainerColor = expanded ? Colors.blue : Colors.green;
          });
        },
      ),
    );
  }
}

这样修改后,Container的颜色会随着ExpansionTile的展开/收起状态正确切换,因为tileContainerColor变量由State实例维护,setState更新时不会被重新初始化。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 14:18:32