Flutter中如何实现ExpansionTile展开时头部字体变大的效果?
实现方案
你的判断是正确的,headerBuilder回调自带的isExpanded参数已经实时同步当前面板的展开状态,直接用该参数动态控制标题字体大小即可。
基础实现(无状态切换动画)
直接根据isExpanded的布尔值给Text组件的fontSize赋值即可,修改后的代码片段如下:
children: infos.map<ExpansionPanel>((Info info) { return ExpansionPanel( headerBuilder: (BuildContext context, bool isExpanded) { return ListTile( title: Text( info.headerValue, // 展开时字体大小为18,收起时为14,可自行调整数值 style: TextStyle(fontSize: isExpanded ? 18 : 14), ), ); }, // 此处保留你原有其余代码 ); })
进阶实现(带平滑过渡动画)
如果需要实现展开/收起过程中字体大小平滑变化的效果,可以用AnimatedDefaultTextStyle组件包裹标题,代码如下:
children: infos.map<ExpansionPanel>((Info info) { return ExpansionPanel( headerBuilder: (BuildContext context, bool isExpanded) { return ListTile( title: AnimatedDefaultTextStyle( // 动画时长可根据需求调整 duration: const Duration(milliseconds: 200), curve: Curves.easeInOut, style: TextStyle( fontSize: isExpanded ? 18 : 14, // 还可同步配置其他样式的切换动画,例如字重、颜色 fontWeight: isExpanded ? FontWeight.w600 : FontWeight.normal, color: isExpanded ? Colors.black : Colors.grey[700], ), child: Text(info.headerValue), ), ); }, // 此处保留你原有其余代码 ); })
以上两种方案都可以实现你需要的展开时头部字体放大的效果,可根据交互需求选择。
内容的提问来源于stack exchange,提问作者Nikita
相关产品推荐
相关产品推荐

