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

如何在Flutter中实现带标题上方文本的ExpansionTile

问题:如何给Flutter的ExpansionTile添加标题上方的文本?

我需要实现示例图中的ExpansionTile样式,已尝试编写如下代码:

Padding(
      padding: const EdgeInsets.only(right: 30, left: 30, bottom: 20),
      child: Container(
        decoration: boxDecoration,
        child: const ExpansionTile(
          collapsedIconColor: Colors.white,
          iconColor: Colors.white,
          tilePadding: EdgeInsets.only(left: 5, right: 20, top: 5, bottom: 5),
          leading: NotifyIcon(
            size: 20,
          ),
          title: Text('Title'),
          subtitle: Text('09:15 AM'),
        ),
      ),
    );

当前得到的输出如对应图片所示,但原生ExpansionTile没有添加标题上方文本的选项,请问如何实现该效果?


解决方案

有两种实用方法可以实现这个需求:

方法一:自定义ExpansionTile的title组件

将原有的title替换为Column组件,就能在原有标题上方插入额外文本,同时保留ExpansionTile的所有原生交互和动画:

Padding(
  padding: const EdgeInsets.only(right: 30, left: 30, bottom: 20),
  child: Container(
    decoration: boxDecoration,
    child: ExpansionTile(
      collapsedIconColor: Colors.white,
      iconColor: Colors.white,
      tilePadding: EdgeInsets.only(left: 5, right: 20, top: 5, bottom: 5),
      leading: NotifyIcon(size: 20),
      // 用Column组合顶部文本和原标题
      title: Column(
        crossAxisAlignment: CrossAxisAlignment.start,
        mainAxisSize: MainAxisSize.min,
        children: [
          Text(
            '标题上方的文本',
            style: TextStyle(fontSize: 12, color: Colors.grey),
          ),
          SizedBox(height: 4),
          Text('Title'),
        ],
      ),
      subtitle: Text('09:15 AM'),
    ),
  ),
);

方法二:在ExpansionTile外层嵌套静态文本(不跟随折叠动画)

如果顶部文本不需要参与ExpansionTile的展开/折叠动画,可以将其放在Container内部、ExpansionTile的上方:

Padding(
  padding: const EdgeInsets.only(right: 30, left: 30, bottom: 20),
  child: Container(
    decoration: boxDecoration,
    child: Column(
      children: [
        // 独立的顶部文本,手动对齐leading的位置
        Padding(
          padding: EdgeInsets.only(left: 65, top: 10),
          child: Text(
            '标题上方的文本',
            style: TextStyle(fontSize: 12, color: Colors.grey),
          ),
        ),
        ExpansionTile(
          collapsedIconColor: Colors.white,
          iconColor: Colors.white,
          tilePadding: EdgeInsets.only(left: 5, right: 20, top: 5, bottom: 5),
          leading: NotifyIcon(size: 20),
          title: Text('Title'),
          subtitle: Text('09:15 AM'),
        ),
      ],
    ),
  ),
);

选择建议

  • 方法一的文本会跟随ExpansionTile的标题一起触发点击反馈和动画,适合需要整体交互的场景
  • 方法二的文本是静态元素,仅作为装饰存在,适合不需要交互的场景

内容的提问来源于stack exchange,提问作者Mishal Haneef

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 11:45:29