ExpansionTile更新问题
来源:2-4 iOS开发者如何快速上手Flutter开发(一)

慕桂英5458379
2025-08-27
麻烦问下,为什么我调用setState后 页面没有更新 initiallyExpanded是只在第一次调用时生效吗?
写回答
1回答
-
CrazyCodeBoy
2025-09-06
initiallyExpanded 仅在 ExpansionTile 第一次构建时生效,后续要改变展开/折叠状态,需通过动态更新状态 + 触发 setState 来让 ExpansionTile 重新渲染。
试试这个
class _YourPageState extends State<YourPage> {
// 记录每个城市的展开状态,默认都为 false(折叠)
Map<String, bool> _expandedStatus = {};
Widget _item(String city, List<String> subCities) {
return ExpansionTile(
title: Text(city, style: TextStyle(fontSize: 20, color: Colors.black54)),
// 初始展开状态由 _expandedStatus[city] 决定
initiallyExpanded: _expandedStatus[city] ?? false,
onExpansionChanged: (bool isExpanded) {
// 核心:更新“当前城市”的状态,并把“其他城市”设为折叠
setState(() {
_expandedStatus = {
for (var key in cityNames.keys) // cityNames 是所有城市的数据源
key: key == city ? isExpanded : false,
};
});
},
children: _subCities(city, subCities),
);
}
// ... 其他代码(如 _subCities 方法、build 方法等)
}00
相似问题