Flutter ExpansionTile点击时仅更新当前展开项图标问题求助
解决Flutter ExpansionTile点击后所有trailing图标同步变化的问题
你当前的问题根源很明确:所有ExpansionTile共用了同一个isQuestionClicked布尔变量,只要这个全局状态改变,所有tile的trailing图标都会同步切换。要实现单个tile图标独立变化,只需要给每个tile单独维护展开状态即可,具体修改如下:
1. 替换全局状态为列表状态
在你的State类中,把单个布尔变量换成一个列表,用来记录每个tile的展开/收起状态:
late List<bool> expandedStates; @override void initState() { super.initState(); // 初始化所有tile为收起状态 expandedStates = List.generate(filteredFAQ.length, (index) => false); }
2. 修改ExpansionTile的绑定逻辑
更新ExpansionTile的trailing图标判断和状态更新逻辑,让每个tile只对应自己的状态:
Column( children: List.generate( filteredFAQ.length, (index) => Column( children: [ if (index > 0) Container( child: Column( children: <Widget>[ ExpansionTile( trailing: SvgPicture.string( // 根据当前tile的状态显示对应图标 expandedStates[index] ? addPayeeArrowUp : rightArrow, color: primary, ), onExpansionChanged: (bool expanded) { setState(() { // 只更新当前点击的tile的状态 expandedStates[index] = expanded; }); }, // 注意:此处需补充title等ExpansionTile必填属性(原代码未体现) title: Text(filteredFAQ[index].title), ), ], ), ), ], ), ), );
关键改动说明
- 用
expandedStates列表替代单个变量,每个索引对应一个tile的独立状态 onExpansionChanged回调中仅修改当前点击tile对应的状态值,不会影响其他tile- trailing图标根据当前tile的状态单独判断,实现了点击哪个tile,只有哪个tile的图标切换
内容的提问来源于stack exchange,提问作者caiyanoblobado
相关产品推荐
相关产品推荐

