Flutter ExpansionTile如何根据展开/折叠状态动态设置trailing组件
解决方案
你可以通过ExpansionTile自带的onExpansionChanged回调监听展开/折叠状态,结合局部状态变量实现需求,不需要自定义组件,步骤如下:
- 在State类中新增一个布尔类型的状态变量存储当前展开状态
- 通过
onExpansionChanged回调实时更新这个状态变量 - 在
trailing属性中根据状态变量返回对应组件即可
完整实现代码示例:
class _YourWidgetState extends State<YourWidget> { // 原有存储选中数字的变量,可根据你的需求调整初始值 int _selectedNumber = 0; // 新增存储ExpansionTile展开状态的变量,默认折叠 bool _isExpanded = false; @override Widget build(BuildContext context) { return ExpansionTile( title: const Text('Some title'), // 监听展开状态变化 onExpansionChanged: (expanded) { setState(() { _isExpanded = expanded; }); }, // 根据状态动态返回trailing trailing: _isExpanded ? null // 展开状态传null,自动使用默认箭头 : Text(_selectedNumber == 0 ? '' : _selectedNumber.toString()), // 折叠状态显示选中数字,初始未选中时可展示空文本避免突兀 // 下方填写你原有选项列表的代码,选中选项时更新_selectedNumber即可 children: [ // 你的选项组件列表 ], ); } }
如果需要选中数字后自动折叠ExpansionTile,只需要在更新_selectedNumber的逻辑后,额外调用setState把_isExpanded设为false即可。
内容的提问来源于stack exchange,提问作者Sparkringo
相关产品推荐
相关产品推荐

