diff --git a/example/lib/main.dart b/example/lib/main.dart index 8cccd47..10378ff 100644 --- a/example/lib/main.dart +++ b/example/lib/main.dart @@ -587,7 +587,9 @@ class ExampleApp extends StatelessWidget { } void _openDateTimePicker( - BuildContext context, CupertinoDatePickerCalendarType calendarType,) { + BuildContext context, + CupertinoDatePickerCalendarType calendarType, + ) { BottomPicker.dateTime( minuteInterval: 2, headerBuilder: (context) { diff --git a/lib/bottom_picker.dart b/lib/bottom_picker.dart index a7793e5..512d812 100644 --- a/lib/bottom_picker.dart +++ b/lib/bottom_picker.dart @@ -53,6 +53,8 @@ class BottomPicker extends StatefulWidget { this.buttonWidth, this.buttonSingleColor, this.backgroundColor = Colors.white, + this.pickerThemeData, + @Deprecated("should use pickerThemeData instead") this.pickerTextStyle = const TextStyle( fontSize: 14, color: Colors.black, @@ -107,6 +109,8 @@ class BottomPicker extends StatefulWidget { this.buttonSingleColor, this.backgroundColor = Colors.white, this.dateOrder = DatePickerDateOrder.ymd, + this.pickerThemeData, + @Deprecated("should use pickerThemeData instead") this.pickerTextStyle = const TextStyle( fontSize: 14, color: Colors.black, @@ -156,6 +160,8 @@ class BottomPicker extends StatefulWidget { this.buttonWidth, this.buttonSingleColor, this.backgroundColor = Colors.white, + this.pickerThemeData, + @Deprecated("should use pickerThemeData instead") this.pickerTextStyle = const TextStyle( fontSize: 14, color: Colors.black, @@ -209,6 +215,8 @@ class BottomPicker extends StatefulWidget { this.buttonSingleColor, this.backgroundColor = Colors.white, this.dateOrder = DatePickerDateOrder.ymd, + this.pickerThemeData, + @Deprecated("should use pickerThemeData instead") this.pickerTextStyle = const TextStyle( fontSize: 14, color: Colors.black, @@ -260,6 +268,8 @@ class BottomPicker extends StatefulWidget { this.buttonWidth, this.buttonSingleColor, this.backgroundColor = Colors.white, + this.pickerThemeData, + @Deprecated("should use pickerThemeData instead") this.pickerTextStyle = const TextStyle( fontSize: 14, color: Colors.black, @@ -313,6 +323,8 @@ class BottomPicker extends StatefulWidget { this.buttonWidth, this.buttonSingleColor, this.backgroundColor = Colors.white, + this.pickerThemeData, + @Deprecated("should use pickerThemeData instead") this.pickerTextStyle = const TextStyle( fontSize: 14, color: Colors.black, @@ -358,6 +370,8 @@ class BottomPicker extends StatefulWidget { this.buttonWidth, this.buttonSingleColor, this.backgroundColor = Colors.white, + this.pickerThemeData, + @Deprecated("should use pickerThemeData instead") this.pickerTextStyle = const TextStyle( fontSize: 14, color: Colors.black, @@ -425,6 +439,8 @@ class BottomPicker extends StatefulWidget { this.buttonWidth, this.buttonSingleColor, this.backgroundColor = Colors.white, + this.pickerThemeData, + @Deprecated("should use pickerThemeData instead") this.pickerTextStyle = const TextStyle( fontSize: 14, color: Colors.black, @@ -607,6 +623,9 @@ class BottomPicker extends StatefulWidget { ///by default `TextStyle(fontSize: 14)` final TextStyle pickerTextStyle; + /// The picker theme data + final CupertinoTextThemeData? pickerThemeData; + ///define the picker item extent available only for list items picker ///by default it's 35 late double itemExtent; @@ -903,6 +922,7 @@ class BottomPickerState extends State { textStyle: widget.pickerTextStyle, itemExtent: widget.itemExtent, selectionOverlay: widget.selectionOverlay, + pickerThemeData: widget.pickerThemeData, ) : widget.bottomPickerType == BottomPickerType.timer ? TimePicker( @@ -916,6 +936,7 @@ class BottomPickerState extends State { selectedTimerDuration = p0; }, secondInterval: widget.timerSecondsInterval, + pickerThemeData: widget.pickerThemeData, ) : widget.bottomPickerType == BottomPickerType.time ? DatePicker( @@ -934,6 +955,7 @@ class BottomPickerState extends State { itemExtent: widget.itemExtent, showTimeSeparator: widget.showTimeSeparator, calendarType: widget.calendarType, + pickerThemeData: widget.pickerThemeData, ) : widget.bottomPickerType == BottomPickerType.dateTime ? DatePicker( @@ -952,6 +974,7 @@ class BottomPickerState extends State { itemExtent: widget.itemExtent, showTimeSeparator: widget.showTimeSeparator, calendarType: widget.calendarType, + pickerThemeData: widget.pickerThemeData, ) : widget.bottomPickerType == BottomPickerType.rangeTime @@ -978,6 +1001,7 @@ class BottomPickerState extends State { itemExtent: widget.itemExtent, showTimeSeperator: widget.showTimeSeparator, + pickerThemeData: widget.pickerThemeData, ) : RangePicker( mode: CupertinoDatePickerMode.date, @@ -1001,6 +1025,7 @@ class BottomPickerState extends State { itemExtent: widget.itemExtent, showTimeSeperator: widget.showTimeSeparator, + pickerThemeData: widget.pickerThemeData, ), ), if (widget.displaySubmitButton) diff --git a/lib/widgets/date_picker.dart b/lib/widgets/date_picker.dart index 5002111..3274333 100644 --- a/lib/widgets/date_picker.dart +++ b/lib/widgets/date_picker.dart @@ -14,6 +14,7 @@ class DatePicker extends StatelessWidget { final double? itemExtent; final bool showTimeSeparator; final CupertinoDatePickerCalendarType calendarType; + final CupertinoTextThemeData? pickerThemeData; const DatePicker({ super.key, @@ -29,13 +30,14 @@ class DatePicker extends StatelessWidget { this.itemExtent = 0, this.showTimeSeparator = false, required this.calendarType, + this.pickerThemeData, }); @override Widget build(BuildContext context) { return CupertinoTheme( data: CupertinoThemeData( - textTheme: CupertinoTextThemeData( + textTheme: pickerThemeData ?? CupertinoTextThemeData( dateTimePickerTextStyle: textStyle, ), ), diff --git a/lib/widgets/range_picker.dart b/lib/widgets/range_picker.dart index 5f0da7b..c594440 100644 --- a/lib/widgets/range_picker.dart +++ b/lib/widgets/range_picker.dart @@ -18,6 +18,7 @@ class RangePicker extends StatefulWidget { final int? minuteInterval; final double? itemExtent; final bool showTimeSeperator; + final CupertinoTextThemeData? pickerThemeData; const RangePicker({ super.key, @@ -36,6 +37,7 @@ class RangePicker extends StatefulWidget { this.minuteInterval, this.itemExtent, this.showTimeSeperator = false, + this.pickerThemeData, }); @override @@ -106,6 +108,7 @@ class _RangePickerState extends State { dateOrder: widget.dateOrder, textStyle: widget.textStyle, calendarType: CupertinoDatePickerCalendarType.fullWeek, + pickerThemeData: widget.pickerThemeData, ), ), Expanded( @@ -123,6 +126,7 @@ class _RangePickerState extends State { itemExtent: widget.itemExtent, showTimeSeparator: widget.showTimeSeperator, calendarType: CupertinoDatePickerCalendarType.fullWeek, + pickerThemeData: widget.pickerThemeData, ), ), ], diff --git a/lib/widgets/simple_picker.dart b/lib/widgets/simple_picker.dart index 732ef8e..f9f828b 100644 --- a/lib/widgets/simple_picker.dart +++ b/lib/widgets/simple_picker.dart @@ -10,6 +10,7 @@ class SimplePicker extends StatelessWidget { final TextStyle textStyle; final double itemExtent; final Widget? selectionOverlay; + final CupertinoTextThemeData? pickerThemeData; const SimplePicker({ super.key, @@ -19,6 +20,7 @@ class SimplePicker extends StatelessWidget { required this.textStyle, required this.itemExtent, this.selectionOverlay, + this.pickerThemeData, }); @override @@ -26,7 +28,7 @@ class SimplePicker extends StatelessWidget { if (!kIsWeb && (Platform.isIOS || Platform.isAndroid)) { return CupertinoTheme( data: CupertinoThemeData( - textTheme: CupertinoTextThemeData( + textTheme: pickerThemeData ?? CupertinoTextThemeData( pickerTextStyle: textStyle, ), ), diff --git a/lib/widgets/time_picker.dart b/lib/widgets/time_picker.dart index 973c210..a3b20ef 100644 --- a/lib/widgets/time_picker.dart +++ b/lib/widgets/time_picker.dart @@ -9,6 +9,7 @@ class TimePicker extends StatelessWidget { final Function(Duration) onChange; final Duration? initialDuration; final int secondInterval; + final CupertinoTextThemeData? pickerThemeData; const TimePicker({ super.key, @@ -19,13 +20,14 @@ class TimePicker extends StatelessWidget { required this.onChange, required this.initialDuration, this.secondInterval = 1, + this.pickerThemeData, }); @override Widget build(BuildContext context) { return CupertinoTheme( data: CupertinoThemeData( - textTheme: CupertinoTextThemeData( + textTheme: pickerThemeData ?? CupertinoTextThemeData( dateTimePickerTextStyle: textStyle, ), ),