import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:flutter_smart_dialog/flutter_smart_dialog.dart'; import 'package:cs_resources/constants/color_constants.dart'; import 'package:shared/utils/date_time_utils.dart'; import '../utils/dark_theme_util.dart'; class DatePickerUtil { static void showCupertinoDatePicker({ required Function(DateTime) onDateTimeChanged, DateTime? selectedDateTime, int minuteInterval = 1, DateTime? minimumDate, DateTime? maximumDate, CupertinoDatePickerMode mode = CupertinoDatePickerMode.date, String title = '', DatePickerDateOrder? dateOrder, }) { int curMillisecond = DateTime.now().millisecondsSinceEpoch; //毫秒 selectedDateTime ??= DateTimeUtils.getDateTimeByMs(curMillisecond); //当前选中的日期 minimumDate ??= DateTimeUtils.getDateTimeByMs(curMillisecond - 10 * 365 * 24 * 60 * 60 * 1000); //最小范围默认减去10年 maximumDate ??= DateTimeUtils.getDateTimeByMs(curMillisecond + 10 * 365 * 24 * 60 * 60 * 1000); //最大范围默认加上10年 SmartDialog.show( usePenetrate: false, tag: 'date_picker', maskColor: Colors.black.withOpacity(0.4), alignment: Alignment.bottomCenter, builder: (BuildContext context) { return Container( height: 280, decoration: BoxDecoration( color: DarkThemeUtil.multiColors(context, Colors.white, darkColor: ColorConstants.darkBlackItem), borderRadius: const BorderRadius.only(topLeft: Radius.circular(25), topRight: Radius.circular(25)), ), child: Column( children: [ Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ CupertinoButton( child: const Text( 'Cancel', style: TextStyle( fontSize: 17, fontWeight: FontWeight.w500, color: ColorConstants.appBlue, ), ), onPressed: () => SmartDialog.dismiss(tag: 'date_picker'), ), Text( title, style: TextStyle( fontSize: 18, fontWeight: FontWeight.w500, color: DarkThemeUtil.multiColors(context, const Color(0xff404A5B), darkColor: Colors.white), ), ), CupertinoButton( child: const Text( 'Confirm', style: TextStyle( fontSize: 17, fontWeight: FontWeight.w500, color: ColorConstants.appBlue, ), ), onPressed: () { SmartDialog.dismiss(tag: 'date_picker'); // 将选中的值通过回调函数传递出去 onDateTimeChanged(selectedDateTime!); }, ), ], ), Divider( color: DarkThemeUtil.multiColors( context, ColorConstants.dividerA6, darkColor: ColorConstants.darkBlackItemDivider, ), height: 0.5), Expanded( child: CupertinoDatePicker( mode: mode, use24hFormat: true, minimumDate: minimumDate, maximumDate: maximumDate, initialDateTime: selectedDateTime, onDateTimeChanged: (date) { selectedDateTime = date; }, dateOrder: dateOrder, ), ), ], ), ); }, ); } }