diff --git a/packages/flutter/lib/src/cupertino/date_picker.dart b/packages/flutter/lib/src/cupertino/date_picker.dart index 802d40cfaf..04e85bec7a 100644 --- a/packages/flutter/lib/src/cupertino/date_picker.dart +++ b/packages/flutter/lib/src/cupertino/date_picker.dart @@ -448,7 +448,7 @@ class _CupertinoDatePickerDateTimeState extends State { date.year, date.month, date.day, - selectedHour + selectedAmPm * 12, + widget.use24hFormat ? selectedHour : selectedHour % 12 + selectedAmPm * 12, selectedMinute, ); } diff --git a/packages/flutter/test/cupertino/date_picker_test.dart b/packages/flutter/test/cupertino/date_picker_test.dart index 3e8f452095..652b09d62c 100644 --- a/packages/flutter/test/cupertino/date_picker_test.dart +++ b/packages/flutter/test/cupertino/date_picker_test.dart @@ -560,6 +560,87 @@ void main() { ); }); + group('Picker handles initial noon/midnight times', () { + testWidgets('midnight', (WidgetTester tester) async { + DateTime date; + await tester.pumpWidget( + CupertinoApp( + home: SizedBox( + height: 400.0, + width: 400.0, + child: CupertinoDatePicker( + mode: CupertinoDatePickerMode.time, + onDateTimeChanged: (DateTime newDate) { + date = newDate; + }, + initialDateTime: DateTime(2019, 1, 1, 0, 15), + ), + ), + ), + ); + + // 0:15 -> 0:16 + await tester.drag(find.text('15'), _kRowOffset); + await tester.pump(); + await tester.pump(const Duration(milliseconds: 500)); + + expect(date, DateTime(2019, 1, 1, 0, 16)); + }); + + testWidgets('noon', (WidgetTester tester) async { + DateTime date; + await tester.pumpWidget( + CupertinoApp( + home: SizedBox( + height: 400.0, + width: 400.0, + child: CupertinoDatePicker( + mode: CupertinoDatePickerMode.time, + onDateTimeChanged: (DateTime newDate) { + date = newDate; + }, + initialDateTime: DateTime(2019, 1, 1, 12, 15), + ), + ), + ), + ); + + // 12:15 -> 12:16 + await tester.drag(find.text('15'), _kRowOffset); + await tester.pump(); + await tester.pump(const Duration(milliseconds: 500)); + + expect(date, DateTime(2019, 1, 1, 12, 16)); + }); + + testWidgets('noon in 24 hour time', (WidgetTester tester) async { + DateTime date; + await tester.pumpWidget( + CupertinoApp( + home: SizedBox( + height: 400.0, + width: 400.0, + child: CupertinoDatePicker( + use24hFormat: true, + mode: CupertinoDatePickerMode.time, + onDateTimeChanged: (DateTime newDate) { + date = newDate; + }, + initialDateTime: DateTime(2019, 1, 1, 12, 25), + ), + ), + ), + ); + + // 12:25 -> 12:26 + await tester.drag(find.text('25'), _kRowOffset); + await tester.pump(); + await tester.pump(const Duration(milliseconds: 500)); + + expect(date, DateTime(2019, 1, 1, 12, 26)); + }); + }); + testWidgets('picker persists am/pm value when scrolling hours', (WidgetTester tester) async { DateTime date; await tester.pumpWidget(