Flutter:如何无需指定firstDate创建支持选择过往日期的CalendarPicker
问题描述
我想要创建一个CalendarPicker,允许用户从指定的最后日期开始选择任意过往日期,但当前这个组件必须指定firstDate。相关代码示例如下:
CustomCalendarPicker( onDisplayedMonthChanged: context.read<OnBoardingViewModelCubit>().onDisplayMonthChange, currentDate: DateTime.now(), onDateChanged: context.read<OnBoardingViewModelCubit>().selectStartingDate, firstDate: DateTime.now().subtract( Duration(days: state.previousDays)), initialDate: state.selectedStartDate, lastDate: DateTime.now(), ),
解决方案
由于CustomCalendarPicker强制要求传入firstDate,要实现“允许选择任意过往日期”的需求,最简单的办法是将firstDate设置为一个非常早的固定日期(比如公元1900年1月1日),这样用户就能选择从这个早日期到lastDate之间的所有过往日期了。
修改后的代码示例:
CustomCalendarPicker( onDisplayedMonthChanged: context.read<OnBoardingViewModelCubit>().onDisplayMonthChange, currentDate: DateTime.now(), onDateChanged: context.read<OnBoardingViewModelCubit>().selectStartingDate, // 设置一个极早的日期作为起始范围 firstDate: DateTime(1900), initialDate: state.selectedStartDate, lastDate: DateTime.now(), ),
如果需要保留一定的灵活性(比如后续可能调整最早可选日期),也可以把这个起始日期抽成一个常量:
// 在文件顶部定义常量 const earliestAllowedDate = DateTime(1900); // 组件中使用 CustomCalendarPicker( // ...其他参数不变 firstDate: earliestAllowedDate, lastDate: DateTime.now(), ),
内容的提问来源于stack exchange,提问作者devjc
相关产品推荐
相关产品推荐

