From 1a3201bc74bff8f37401d1d67ea5cac35cd66c74 Mon Sep 17 00:00:00 2001 From: LongCatIsLooong <31859944+LongCatIsLooong@users.noreply.github.com> Date: Wed, 10 Apr 2019 20:14:35 -0700 Subject: [PATCH] CupertinoDatePicker initialDateTime accounts for minuteInterval (#30862) initialDateTime should account for minuteInterval --- .../lib/src/cupertino/date_picker.dart | 2 +- .../test/cupertino/date_picker_test.dart | 25 +++++++++++++++++++ 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/packages/flutter/lib/src/cupertino/date_picker.dart b/packages/flutter/lib/src/cupertino/date_picker.dart index b1ba3110f4..0bd31f4f0e 100644 --- a/packages/flutter/lib/src/cupertino/date_picker.dart +++ b/packages/flutter/lib/src/cupertino/date_picker.dart @@ -540,7 +540,7 @@ class _CupertinoDatePickerDateTimeState extends State { Widget _buildMinutePicker(double offAxisFraction, TransitionBuilder itemPositioningBuilder) { return CupertinoPicker( - scrollController: FixedExtentScrollController(initialItem: selectedMinute), + scrollController: FixedExtentScrollController(initialItem: selectedMinute ~/ widget.minuteInterval), offAxisFraction: offAxisFraction, itemExtent: _kItemExtent, useMagnifier: _kUseMagnifier, diff --git a/packages/flutter/test/cupertino/date_picker_test.dart b/packages/flutter/test/cupertino/date_picker_test.dart index 18acc910da..e387d0b81f 100644 --- a/packages/flutter/test/cupertino/date_picker_test.dart +++ b/packages/flutter/test/cupertino/date_picker_test.dart @@ -266,6 +266,31 @@ void main() { expect(picker.initialDateTime, isNotNull); }); + testWidgets('initial date honors minuteInterval', (WidgetTester tester) async { + DateTime newDateTime; + await tester.pumpWidget( + CupertinoApp( + home: SizedBox( + width: 400, + height: 400, + child: CupertinoDatePicker( + onDateTimeChanged: (DateTime d) => newDateTime = d, + initialDateTime: DateTime(2018, 10, 10, 10, 3), + minuteInterval: 3, + ) + ) + ) + ); + + // Drag the minute picker to the next slot (03 -> 06). + // The `initialDateTime` and the `minuteInterval` values are specifically choosen + // so that `find.text` finds exactly one widget. + await tester.drag(find.text('03'), _kRowOffset); + await tester.pump(); + + expect(newDateTime.minute, 6); + }); + testWidgets('changing initialDateTime after first build does not do anything', (WidgetTester tester) async { DateTime selectedDateTime; await tester.pumpWidget(