diff --git a/packages/flutter/lib/src/cupertino/date_picker.dart b/packages/flutter/lib/src/cupertino/date_picker.dart index 99f85106f58..8363a1b23a8 100644 --- a/packages/flutter/lib/src/cupertino/date_picker.dart +++ b/packages/flutter/lib/src/cupertino/date_picker.dart @@ -948,10 +948,11 @@ class _CupertinoDatePickerDateTimeState extends State { _getEstimatedColumnWidth(_PickerColumnType.hour), _getEstimatedColumnWidth(_PickerColumnType.minute), ]; - final List<_ColumnBuilder> pickerBuilders = <_ColumnBuilder>[ - _buildHourPicker, - _buildMinutePicker, - ]; + + // Swap the hours and minutes if RTL to ensure they are in the correct position. + final List<_ColumnBuilder> pickerBuilders = Directionality.of(context) == TextDirection.rtl + ? <_ColumnBuilder>[_buildMinutePicker, _buildHourPicker] + : <_ColumnBuilder>[_buildHourPicker, _buildMinutePicker]; // Adds am/pm column if the picker is not using 24h format. if (!widget.use24hFormat) { diff --git a/packages/flutter/test/cupertino/date_picker_test.dart b/packages/flutter/test/cupertino/date_picker_test.dart index 598fd4dc974..c603c216728 100644 --- a/packages/flutter/test/cupertino/date_picker_test.dart +++ b/packages/flutter/test/cupertino/date_picker_test.dart @@ -1215,6 +1215,31 @@ void main() { matchesGoldenFile('date_picker_test.datetime.drag.png'), ); }); + + testWidgets('DatePicker displays hours and minutes correctly in RTL', (WidgetTester tester) async { + await tester.pumpWidget( + CupertinoApp( + home: Directionality( + textDirection: TextDirection.rtl, + child: Center( + child: SizedBox( + width: 500, + height: 400, + child: CupertinoDatePicker( + mode: CupertinoDatePickerMode.dateAndTime, + initialDateTime: DateTime(2019, 1, 1, 4), + onDateTimeChanged: (_) {}, + ), + ), + ), + ), + ), + ); + + final double hourLeft = tester.getTopLeft(find.text('4')).dx; + final double minuteLeft = tester.getTopLeft(find.text('00')).dx; + expect(hourLeft, lessThan(minuteLeft)); + }); }); testWidgets('TimerPicker golden tests', (WidgetTester tester) async {