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

Flutter TableCalendar选其他月份日期后跳回当前月问题求助

解决table_calendar选择跨月日期后视图跳回当前月的问题

问题原因

你的代码中focusedDay直接绑定DateTime.now(),每次触发setState时,这个值会被重新计算为当前日期,导致日历视图强制跳回当前月份。

修复方案

将focusedDay绑定到状态变量_focusedDay,初始化时把_focusedDay设为DateTime.now(),这样既能保留今日日期的标记,又能维持切换后的月份视图。

修改后的完整代码

TableCalendar(
  calendarFormat: _calendarFormat,
  firstDay: DateTime.utc(2010, 10, 16),
  lastDay: DateTime.utc(2030, 3, 14),
  // 关键修改:把focusedDay绑定到状态变量_focusedDay
  focusedDay: _focusedDay,
  selectedDayPredicate: (day) {
    return isSameDay(_selectedDay, day);
  },
  onDaySelected: (selectedDay, focusedDay) {
    setState(() {
      _selectedDay = selectedDay;
      _focusedDay = focusedDay;
      context.read<Counter>().modify(_focusedDay);
    });
  },
  onFormatChanged: (format) {
    setState(() {
      _calendarFormat = format;
    });
  },
  onPageChanged: (focusedDay) {
    _focusedDay = focusedDay;
  },
)

补充说明

  • 确保状态类中已正确初始化变量:
    DateTime _focusedDay = DateTime.now();
    
  • table_calendar默认会高亮今日日期,无需额外配置,因为_focusedDay初始值为当前日期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 05:52:38