用途
本技能介绍 Shadcn UI 的 Date Picker 组件用法,服务于日期选择相关的界面功能,包括单个日期选择和日期范围选择。它可用于普通交互场景,也可作为表单字段嵌入表单体系中。
主要能力
- ShadDatePicker:日期选择器,支持可选的日期范围与预设(presets)。
- ShadDatePicker.range():用于范围选择。
- 表单字段:ShadDatePickerFormField 与 ShadDateRangePickerFormField,支持 id、label、validator,以及可选的 fromValueTransformer/toValueTransformer。
- 预设:通过 header 组件(例如 ShadSelect)配合共享的 groupId 实现;共享 groupId 可在 select 弹层关闭时保持日期选择器弹层继续打开。选中项可由预设选项设置(例如 today 加上天数偏移)。
使用方式
单个日期选择:将 ShadDatePicker 放入 ConstrainedBox,并设置最大宽度(示例中为 maxWidth: 600):
ConstrainedBox(
constraints: const BoxConstraints(maxWidth: 600),
child: const ShadDatePicker(),
)
范围选择:使用 ShadDatePicker.range():
ConstrainedBox(
constraints: const BoxConstraints(maxWidth: 600),
child: const ShadDatePicker.range(),
)
带预设:使用 header(如 ShadSelect),并与日期选择器共享 groupId。示例中 ShadSelect 设置 minWidth: 276,placeholder 为 'Select',options 由 presets 映射生成(ShadOption(value: e.key, child: Text(e.value))),selectedOptionBuilder 返回预设文本,onChanged 中根据所选天数偏移设置 selected(today.add(Duration(days: value)))。ShadDatePicker 设置 groupId、header(Padding 包裹的 ShadSelect,bottom padding 为 4)、selected、calendarDecoration(theme.calendarTheme.decoration)与 popoverPadding(EdgeInsets.all(4))。
表单字段:ShadDatePickerFormField 使用 label、onChanged、description、validator 等参数;示例中 label 为 'Date of birth',onChanged 为 print,description 为 'Your date of birth is used to calculate your age.',validator 在值为 null 时返回 'A date of birth is required.'。
范围表单字段:ShadDateRangePickerFormField 使用 label、onChanged、description、validator;示例中 label 为 'Range of dates',onChanged 为 print,description 为 'Select the range of dates you want to search between.',validator 依次检查整体是否为 null、start 是否为 null、end 是否为 null,并返回相应提示信息。
字符串初值转换:当表单初始值为字符串(例如 'date': '2024-02-01')时,在 ShadDatePickerFormField 上使用 fromValueTransformer 和 toValueTransformer 完成与 DateTime 之间的相互转换。具体可参考 reference.md 或 Form 技能中的 value transformers 说明。
适用场景
- 需要用户选择单个日期的表单或界面。
- 需要选择日期范围的检索或筛选场景。
- 希望通过预设快速选择日期(如相对今天的偏移)的交互。
- 需要表单校验的日期输入(例如出生日期必填、日期范围起止必填)。
限制
资料中未提供该组件的完整 API 参数列表、支持的平台版本、性能与可访问性说明、收费或授权信息,相关内容暂未提供。