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,
      minimumDate: minimumMonth,
      maximumDate: 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),
  );
}