如何修改Flutter table_calendar包的头部格式,将月份显示为3字母缩写
实现方案
你可以通过TableCalendar组件自带的headerTitleBuilder参数自定义头部标题渲染逻辑,即可实现3位月份缩写的显示效果,具体操作如下:
- 方案1:使用intl包快速实现(推荐)
- 先在
pubspec.yaml中添加intl依赖:
dependencies: flutter: sdk: flutter intl: ^0.18.1 # 可替换为适配你项目的兼容版本
- 在页面头部引入intl包:
import 'package:intl/intl.dart';
- 给
TableCalendar添加headerTitleBuilder参数,自定义标题格式化逻辑,修改后的完整代码如下:
Container( height: MediaQuery.of(context).size.height*0.3, color: Colors.white, child: TableCalendar( headerStyle: HeaderStyle( titleTextStyle: TextStyle(fontSize: 12) ), // 新增的自定义头部标题逻辑 headerTitleBuilder: (context, day) { // MMM 就是3位月份缩写的格式符,输出效果如 Nov 2021 final title = DateFormat('MMM yyyy').format(day); return Text(title, style: const TextStyle(fontSize: 12)); }, shouldFillViewport: true, rowHeight:MediaQuery.of(context).size.height*0.02, firstDay: DateTime.utc(2010, 10, 16), lastDay: DateTime.utc(2030, 3, 14), focusedDay: DateTime.now(), onDaySelected: (selectedDay, focusedDay) { if (!isSameDay(_selectedDay, selectedDay)) { setState(() { _selectedDay = selectedDay; _focusedDay = focusedDay; }); } } ), ),
- 方案2:无需额外依赖,手动映射月份缩写
如果不想引入intl包,可以自己写月份缩写映射来实现,替换上面的headerTitleBuilder逻辑即可:
headerTitleBuilder: (context, day) { const monthAbbr = ['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec']; final title = '${monthAbbr[day.month - 1]} ${day.year}'; return Text(title, style: const TextStyle(fontSize: 12)); },
如果需要显示其他语言的月份缩写,只要修改映射数组或者给DateFormat传入对应locale参数即可。
内容的提问来源于stack exchange,提问作者West
相关产品推荐
相关产品推荐

