showCupertinoDatetimePicker function

Future<DateTime?> showCupertinoDatetimePicker(
  1. BuildContext context, {
  2. String? titleText,
  3. DateTime? initialDateTime,
  4. DateTime? minimumDate,
  5. DateTime? maximumDate,
  6. int? minimumYear,
  7. int? maximumYear,
  8. Color? backgroundColor,
  9. DatePickerDateOrder? dateOrder,
  10. double? itemExtent,
  11. bool? useMagnifier,
  12. double? magnification,
  13. double? diameterRatio,
  14. TextStyle? textStyle,
  15. TextStyle? unselectedTextStyle,
  16. Color? unselectedColor,
  17. double? squeeze,
  18. bool? showSeconds,
  19. int? minuteInterval,
  20. int? secondInterval,
})

显示 iOS 风格的日期时间选择器

Implementation

Future<DateTime?> showCupertinoDatetimePicker(BuildContext context, {
  String? titleText,
  DateTime? initialDateTime,
  DateTime? minimumDate,
  DateTime? maximumDate,
  int? minimumYear,
  int? maximumYear,
  Color? backgroundColor,
  DatePickerDateOrder? dateOrder,
  double? itemExtent,
  bool? useMagnifier,
  double? magnification,
  double? diameterRatio,
  TextStyle? textStyle,
  TextStyle? unselectedTextStyle,
  Color? unselectedColor,
  double? squeeze,
  bool? showSeconds,
  int? minuteInterval,
  int? secondInterval,
}) async {
  DateTime? result = initialDateTime ?? DateTime.now();
  if (minimumDate != null && result.isBefore(minimumDate)) {
    result = minimumDate;
  }

  if (maximumDate != null && result.isAfter(maximumDate)) {
    result = maximumDate;
  }

  return await showDefaultBottomSheet<DateTime>(
    context,
    title: titleText ?? TxLocalizations
        .of(context)
        .datetimePickerTitle,
    elevation: 0,
    backgroundColor: Theme
        .of(context)
        .colorScheme
        .surface,
    contentBuilder: (context) =>
        TxCupertinoDatetimePicker(
          initialDatetime: result,
          minimumDatetime: minimumDate,
          maximumDatetime: maximumDate,
          backgroundColor: backgroundColor,
          onDatetimeChanged: (DateTime datetime) => result = datetime,
          itemExtent: itemExtent,
          useMagnifier: useMagnifier,
          magnification: magnification,
          diameterRatio: diameterRatio,
          textStyle: textStyle,
          unselectedColor: unselectedColor,
          unselectedTextStyle: unselectedTextStyle,
          showSeconds: showSeconds,
          minuteInterval: minuteInterval,
          secondInterval: secondInterval,
          minimumYear: minimumYear,
          maximumYear: maximumYear,
          squeeze: squeeze,
        ),
    onConfirm: () => Navigator.pop(context, result),
  );
}