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
相关产品推荐
相关产品推荐

