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

Flutter中TableCalendar当前日期不显示自定义组件问题求助

解决TableCalendar今日不显示自定义组件的问题

问题根源是TableCalendar的构建器优先级:今日(当前日期)会被todayBuilder处理,而非defaultBuilder,你只配置了defaultBuilder,所以今日无法显示自定义组件。

修改方案:在CalendarBuilders中同时实现todayBuilder,返回你的CustomWidget即可。如果后续需要复用组件逻辑,可以把构建逻辑提取成单独方法,避免重复代码。

修改后的完整代码

class CalendarWidget extends StatelessWidget {
  final int month;
  final int year;

  CalendarWidget({Key? key, required this.month, required this.year}) : super(key: key);

  // 提取复用的自定义组件构建逻辑
  Widget _buildCustomDayWidget(BuildContext context, DateTime day, DateTime focusedDay) {
    return CustomWidget();
  }

  @override
  Widget build(BuildContext context) {
    return TableCalendar(
      headerVisible: false,
      availableGestures: AvailableGestures.none,
      focusedDay: DateTime(year, month, 1),
      firstDay: DateTime(year, month, 1),
      lastDay: DateTime(year, month + 1, 0), // 获取当前月份最后一天
      startingDayOfWeek: StartingDayOfWeek.monday,
      daysOfWeekHeight: 30,
      rowHeight: 80,
      calendarBuilders: CalendarBuilders(
        defaultBuilder: _buildCustomDayWidget,
        // 为今日配置相同的自定义组件
        todayBuilder: _buildCustomDayWidget,
      ),
    );
  }
}

如果不需要复用逻辑,也可以直接在todayBuilder里写返回逻辑:

calendarBuilders: CalendarBuilders(
  defaultBuilder: (context, day, focusedDay) {
    return CustomWidget();
  },
  todayBuilder: (context, day, focusedDay) {
    return CustomWidget();
  },
),

这样修改后,今日就会和其他日期一样显示你的自定义组件了。

内容的提问来源于stack exchange,提问作者Irfan Ganatra

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 23:52:05