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

如何修改Flutter table_calendar包的头部格式,将月份显示为3字母缩写

实现方案

你可以通过TableCalendar组件自带的headerTitleBuilder参数自定义头部标题渲染逻辑,即可实现3位月份缩写的显示效果,具体操作如下:

  • 方案1:使用intl包快速实现(推荐)
  1. 先在pubspec.yaml中添加intl依赖:
dependencies:
  flutter:
    sdk: flutter
  intl: ^0.18.1 # 可替换为适配你项目的兼容版本
  1. 在页面头部引入intl包:
import 'package:intl/intl.dart';
  1. 给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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 17:36:05