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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 02:06:03