showDatePicker static method

void showDatePicker(
  1. BuildContext context, {
  2. DateMode mode = DateMode.YMD,
  3. PDuration? selectDate,
  4. PDuration? maxDate,
  5. PDuration? minDate,
  6. Suffix? suffix,
  7. PickerStyle? pickerStyle,
  8. DateCallback? onChanged,
  9. DateCallback? onConfirm,
  10. dynamic onCancel(
    1. bool isCancel
    )?,
  11. 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?>,
  );
}