showCupertinoMonthPicker function

Future<DateTime?> showCupertinoMonthPicker(
  1. BuildContext context, {
  2. String? titleText,
  3. DateTime? initialMonth,
  4. DateTime? minimumMonth,
  5. DateTime? maximumMonth,
  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,
})

显示 iOS 风格的月份选择器

Implementation

Future<DateTime?> showCupertinoMonthPicker(BuildContext context, {
  String? titleText,
  DateTime? initialMonth,
  DateTime? minimumMonth,
  DateTime? maximumMonth,
  int? minimumYear,
  int? maximumYear,
  Color? backgroundColor,
  DatePickerDateOrder? dateOrder,
  double? itemExtent,
  bool? useMagnifier,
  double? magnification,
  double? diameterRatio,
  TextStyle? textStyle,
  TextStyle? unselectedTextStyle,
  Color? unselectedColor,
  double? squeeze,
}) async {
  DateTime? result = initialMonth ?? DateTime.now();
  if (minimumMonth != null && result.isBefore(minimumMonth)) {
    result = minimumMonth;
  }

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

  return await showDefaultBottomSheet<DateTime>(
    context,
    title: titleText ?? TxLocalizations
        .of(context)
        .monthPickerTitle,
    elevation: 0,
    backgroundColor: Theme
        .of(context)
        .colorScheme
        .surface,
    contentBuilder: (context) =>
        TxCupertinoMonthPicker(
          initialMonth: result,
          minimumYear: minimumYear,
          maximumYear: maximumYear,
          minimumMonth: minimumMonth,
          maximumMonth: maximumMonth,
          backgroundColor: backgroundColor,
          onMonthChanged: (DateTime date) => result = date,
          dateOrder: dateOrder,
          itemExtent: itemExtent,
          useMagnifier: useMagnifier,
          magnification: magnification,
          diameterRatio: diameterRatio,
          textStyle: textStyle,
          unselectedColor: unselectedColor,
          unselectedTextStyle: unselectedTextStyle,
        ),
    onConfirm: () => Navigator.pop(context, result),
  );
}