showDatePicker static method
void
showDatePicker(
- BuildContext context, {
- DateMode mode = DateMode.YMD,
- PDuration? selectDate,
- PDuration? maxDate,
- PDuration? minDate,
- Suffix? suffix,
- PickerStyle? pickerStyle,
- DateCallback? onChanged,
- DateCallback? onConfirm,
- dynamic onCancel(
- bool isCancel
- bool overlapTabBar = false,
时间选择器
context 上下文
mode 时间选择器显示模式,16 种时间样式,默认:DateMode.YMD
selectDate 初始化选中时间,默认当前时间
- PDuration.now()
- PDuration.parse(DateTime.parse('20210101'))
- PDuration(year: 2020, month: 2)
maxDate最大时间,默认 2100 年minDate最小时间,默认 1900 年suffix每列时间对应的单位,默认中文常规pickerStyle选择器样式onChanged选择器发生变动时的回调onConfirm选择器确认时的回调onCancel选择器取消时的回调overlapTabBar是否覆盖 TabBar
注意:
- 当只有单列数据时,min/max 限制不产生关联,只针对单列 item 限制
- 如果用到了日期,selectDate 需要传入年份
Implementation
static void showDatePicker(
BuildContext context, {
DateMode mode = DateMode.YMD,
PDuration? selectDate,
PDuration? maxDate,
PDuration? minDate,
Suffix? suffix,
PickerStyle? pickerStyle,
DateCallback? onChanged,
DateCallback? onConfirm,
Function(bool isCancel)? onCancel,
bool overlapTabBar = false,
}) {
final style = _initPickerStyle(pickerStyle, context);
selectDate ??= PDuration.now();
suffix ??= Suffix.normal();
maxDate ??= PDuration(year: 2100);
minDate ??= PDuration(year: 1900);
// 解析是否有对应数据
final dateItemModel = DateItemModel.parse(mode);
if (dateItemModel.day || dateItemModel.year) {
if (intEmpty(selectDate.year)) {
debugPrint('picker Tip >>> initDate未设置years,默认设置为now().year');
selectDate.year = DateTime.now().year;
}
// 如果有年 item,必须限制
if (intEmpty(maxDate.year)) maxDate.year = 2100;
if (intEmpty(minDate.year)) minDate.year = 1900;
if (dateItemModel.month || dateItemModel.day) {
assert(minDate.year! > 1582, 'min Date Year must > 1582');
}
}
Navigator.of(context, rootNavigator: overlapTabBar).push(
DatePickerRoute(
mode: mode,
initDate: selectDate,
maxDate: maxDate,
minDate: minDate,
suffix: suffix,
pickerStyle: style,
onChanged: onChanged,
onConfirm: onConfirm,
onCancel: onCancel,
theme: Theme.of(context),
barrierLabel:
MaterialLocalizations.of(context).modalBarrierDismissLabel,
) as Route<Object?>,
);
}