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
相关产品推荐
相关产品推荐

