Fix pick Date/Time/Range Exception. (#1042)
## Description
Fix pick Date/Time/Range Exception.
## Issues
[https://github.com/flutter/gallery/issues/1041](https://github.com/flutter/gallery/issues/1041)
---
Co-authored-by: Pierre-Louis <6655696+guidezpl@users.noreply.github.com>
diff --git a/lib/codeviewer/code_segments.dart b/lib/codeviewer/code_segments.dart
index e157a31..acb801e 100644
--- a/lib/codeviewer/code_segments.dart
+++ b/lib/codeviewer/code_segments.dart
@@ -34288,7 +34288,7 @@
TextSpan(style: codeStyle.classStyle, text: 'RestorableRouteFuture'),
TextSpan(style: codeStyle.punctuationStyle, text: '<'),
TextSpan(style: codeStyle.classStyle, text: 'DateTime'),
- TextSpan(style: codeStyle.punctuationStyle, text: '>'),
+ TextSpan(style: codeStyle.punctuationStyle, text: '?>'),
TextSpan(
style: codeStyle.baseStyle,
text: ' _restorableDatePickerRouteFuture'),
@@ -34297,7 +34297,7 @@
TextSpan(style: codeStyle.classStyle, text: 'RestorableRouteFuture'),
TextSpan(style: codeStyle.punctuationStyle, text: '<'),
TextSpan(style: codeStyle.classStyle, text: 'DateTimeRange'),
- TextSpan(style: codeStyle.punctuationStyle, text: '>'),
+ TextSpan(style: codeStyle.punctuationStyle, text: '?>'),
TextSpan(
style: codeStyle.baseStyle,
text: '\u000a _restorableDateRangePickerRouteFuture'),
@@ -34306,7 +34306,7 @@
TextSpan(style: codeStyle.classStyle, text: 'RestorableRouteFuture'),
TextSpan(style: codeStyle.punctuationStyle, text: '<'),
TextSpan(style: codeStyle.classStyle, text: 'TimeOfDay'),
- TextSpan(style: codeStyle.punctuationStyle, text: '>'),
+ TextSpan(style: codeStyle.punctuationStyle, text: '?>'),
TextSpan(
style: codeStyle.baseStyle,
text: ' _restorableTimePickerRouteFuture'),
@@ -34316,6 +34316,7 @@
TextSpan(style: codeStyle.baseStyle, text: ' _selectDate'),
TextSpan(style: codeStyle.punctuationStyle, text: '('),
TextSpan(style: codeStyle.classStyle, text: 'DateTime'),
+ TextSpan(style: codeStyle.punctuationStyle, text: '?'),
TextSpan(style: codeStyle.baseStyle, text: ' selectedDate'),
TextSpan(style: codeStyle.punctuationStyle, text: ')'),
TextSpan(style: codeStyle.baseStyle, text: ' '),
@@ -34326,6 +34327,12 @@
TextSpan(style: codeStyle.punctuationStyle, text: '('),
TextSpan(style: codeStyle.baseStyle, text: 'selectedDate '),
TextSpan(style: codeStyle.punctuationStyle, text: '!='),
+ TextSpan(style: codeStyle.baseStyle, text: ' '),
+ TextSpan(style: codeStyle.keywordStyle, text: 'null'),
+ TextSpan(style: codeStyle.baseStyle, text: ' '),
+ TextSpan(style: codeStyle.punctuationStyle, text: '&&'),
+ TextSpan(style: codeStyle.baseStyle, text: ' selectedDate '),
+ TextSpan(style: codeStyle.punctuationStyle, text: '!='),
TextSpan(style: codeStyle.baseStyle, text: ' _fromDate'),
TextSpan(style: codeStyle.punctuationStyle, text: '.'),
TextSpan(style: codeStyle.baseStyle, text: 'value'),
@@ -34353,15 +34360,27 @@
TextSpan(style: codeStyle.baseStyle, text: ' _selectDateRange'),
TextSpan(style: codeStyle.punctuationStyle, text: '('),
TextSpan(style: codeStyle.classStyle, text: 'DateTimeRange'),
+ TextSpan(style: codeStyle.punctuationStyle, text: '?'),
TextSpan(style: codeStyle.baseStyle, text: ' newSelectedDate'),
TextSpan(style: codeStyle.punctuationStyle, text: ')'),
TextSpan(style: codeStyle.baseStyle, text: ' '),
TextSpan(style: codeStyle.punctuationStyle, text: '{'),
- TextSpan(style: codeStyle.baseStyle, text: '\u000a setState'),
+ TextSpan(style: codeStyle.baseStyle, text: '\u000a '),
+ TextSpan(style: codeStyle.keywordStyle, text: 'if'),
+ TextSpan(style: codeStyle.baseStyle, text: ' '),
+ TextSpan(style: codeStyle.punctuationStyle, text: '('),
+ TextSpan(style: codeStyle.baseStyle, text: 'newSelectedDate '),
+ TextSpan(style: codeStyle.punctuationStyle, text: '!='),
+ TextSpan(style: codeStyle.baseStyle, text: ' '),
+ TextSpan(style: codeStyle.keywordStyle, text: 'null'),
+ TextSpan(style: codeStyle.punctuationStyle, text: ')'),
+ TextSpan(style: codeStyle.baseStyle, text: ' '),
+ TextSpan(style: codeStyle.punctuationStyle, text: '{'),
+ TextSpan(style: codeStyle.baseStyle, text: '\u000a setState'),
TextSpan(style: codeStyle.punctuationStyle, text: '(()'),
TextSpan(style: codeStyle.baseStyle, text: ' '),
TextSpan(style: codeStyle.punctuationStyle, text: '{'),
- TextSpan(style: codeStyle.baseStyle, text: '\u000a _startDate'),
+ TextSpan(style: codeStyle.baseStyle, text: '\u000a _startDate'),
TextSpan(style: codeStyle.punctuationStyle, text: '.'),
TextSpan(style: codeStyle.baseStyle, text: 'value '),
TextSpan(style: codeStyle.punctuationStyle, text: '='),
@@ -34369,7 +34388,7 @@
TextSpan(style: codeStyle.punctuationStyle, text: '.'),
TextSpan(style: codeStyle.baseStyle, text: 'start'),
TextSpan(style: codeStyle.punctuationStyle, text: ';'),
- TextSpan(style: codeStyle.baseStyle, text: '\u000a _endDate'),
+ TextSpan(style: codeStyle.baseStyle, text: '\u000a _endDate'),
TextSpan(style: codeStyle.punctuationStyle, text: '.'),
TextSpan(style: codeStyle.baseStyle, text: 'value '),
TextSpan(style: codeStyle.punctuationStyle, text: '='),
@@ -34377,8 +34396,10 @@
TextSpan(style: codeStyle.punctuationStyle, text: '.'),
TextSpan(style: codeStyle.baseStyle, text: 'end'),
TextSpan(style: codeStyle.punctuationStyle, text: ';'),
- TextSpan(style: codeStyle.baseStyle, text: '\u000a '),
+ TextSpan(style: codeStyle.baseStyle, text: '\u000a '),
TextSpan(style: codeStyle.punctuationStyle, text: '});'),
+ TextSpan(style: codeStyle.baseStyle, text: '\u000a '),
+ TextSpan(style: codeStyle.punctuationStyle, text: '}'),
TextSpan(style: codeStyle.baseStyle, text: '\u000a '),
TextSpan(style: codeStyle.punctuationStyle, text: '}'),
TextSpan(style: codeStyle.baseStyle, text: '\u000a\u000a '),
@@ -34386,6 +34407,7 @@
TextSpan(style: codeStyle.baseStyle, text: ' _selectTime'),
TextSpan(style: codeStyle.punctuationStyle, text: '('),
TextSpan(style: codeStyle.classStyle, text: 'TimeOfDay'),
+ TextSpan(style: codeStyle.punctuationStyle, text: '?'),
TextSpan(style: codeStyle.baseStyle, text: ' selectedTime'),
TextSpan(style: codeStyle.punctuationStyle, text: ')'),
TextSpan(style: codeStyle.baseStyle, text: ' '),
@@ -34396,6 +34418,12 @@
TextSpan(style: codeStyle.punctuationStyle, text: '('),
TextSpan(style: codeStyle.baseStyle, text: 'selectedTime '),
TextSpan(style: codeStyle.punctuationStyle, text: '!='),
+ TextSpan(style: codeStyle.baseStyle, text: ' '),
+ TextSpan(style: codeStyle.keywordStyle, text: 'null'),
+ TextSpan(style: codeStyle.baseStyle, text: ' '),
+ TextSpan(style: codeStyle.punctuationStyle, text: '&&'),
+ TextSpan(style: codeStyle.baseStyle, text: ' selectedTime '),
+ TextSpan(style: codeStyle.punctuationStyle, text: '!='),
TextSpan(style: codeStyle.baseStyle, text: ' _fromTime'),
TextSpan(style: codeStyle.punctuationStyle, text: '.'),
TextSpan(style: codeStyle.baseStyle, text: 'value'),
@@ -34726,7 +34754,7 @@
TextSpan(style: codeStyle.classStyle, text: 'RestorableRouteFuture'),
TextSpan(style: codeStyle.punctuationStyle, text: '<'),
TextSpan(style: codeStyle.classStyle, text: 'DateTime'),
- TextSpan(style: codeStyle.punctuationStyle, text: '>('),
+ TextSpan(style: codeStyle.punctuationStyle, text: '?>('),
TextSpan(style: codeStyle.baseStyle, text: '\u000a onComplete'),
TextSpan(style: codeStyle.punctuationStyle, text: ':'),
TextSpan(style: codeStyle.baseStyle, text: ' _selectDate'),
@@ -34772,7 +34800,7 @@
TextSpan(style: codeStyle.classStyle, text: 'RestorableRouteFuture'),
TextSpan(style: codeStyle.punctuationStyle, text: '<'),
TextSpan(style: codeStyle.classStyle, text: 'DateTimeRange'),
- TextSpan(style: codeStyle.punctuationStyle, text: '>('),
+ TextSpan(style: codeStyle.punctuationStyle, text: '?>('),
TextSpan(style: codeStyle.baseStyle, text: '\u000a onComplete'),
TextSpan(style: codeStyle.punctuationStyle, text: ':'),
TextSpan(style: codeStyle.baseStyle, text: ' _selectDateRange'),
@@ -34803,7 +34831,7 @@
TextSpan(style: codeStyle.classStyle, text: 'RestorableRouteFuture'),
TextSpan(style: codeStyle.punctuationStyle, text: '<'),
TextSpan(style: codeStyle.classStyle, text: 'TimeOfDay'),
- TextSpan(style: codeStyle.punctuationStyle, text: '>('),
+ TextSpan(style: codeStyle.punctuationStyle, text: '?>('),
TextSpan(style: codeStyle.baseStyle, text: '\u000a onComplete'),
TextSpan(style: codeStyle.punctuationStyle, text: ':'),
TextSpan(style: codeStyle.baseStyle, text: ' _selectTime'),
diff --git a/lib/demos/material/picker_demo.dart b/lib/demos/material/picker_demo.dart
index afcd741..68efa69 100644
--- a/lib/demos/material/picker_demo.dart
+++ b/lib/demos/material/picker_demo.dart
@@ -26,28 +26,30 @@
final RestorableDateTime _startDate = RestorableDateTime(DateTime.now());
final RestorableDateTime _endDate = RestorableDateTime(DateTime.now());
- late RestorableRouteFuture<DateTime> _restorableDatePickerRouteFuture;
- late RestorableRouteFuture<DateTimeRange>
+ late RestorableRouteFuture<DateTime?> _restorableDatePickerRouteFuture;
+ late RestorableRouteFuture<DateTimeRange?>
_restorableDateRangePickerRouteFuture;
- late RestorableRouteFuture<TimeOfDay> _restorableTimePickerRouteFuture;
+ late RestorableRouteFuture<TimeOfDay?> _restorableTimePickerRouteFuture;
- void _selectDate(DateTime selectedDate) {
- if (selectedDate != _fromDate.value) {
+ void _selectDate(DateTime? selectedDate) {
+ if (selectedDate != null && selectedDate != _fromDate.value) {
setState(() {
_fromDate.value = selectedDate;
});
}
}
- void _selectDateRange(DateTimeRange newSelectedDate) {
- setState(() {
- _startDate.value = newSelectedDate.start;
- _endDate.value = newSelectedDate.end;
- });
+ void _selectDateRange(DateTimeRange? newSelectedDate) {
+ if (newSelectedDate != null) {
+ setState(() {
+ _startDate.value = newSelectedDate.start;
+ _endDate.value = newSelectedDate.end;
+ });
+ }
}
- void _selectTime(TimeOfDay selectedTime) {
- if (selectedTime != _fromTime.value) {
+ void _selectTime(TimeOfDay? selectedTime) {
+ if (selectedTime != null && selectedTime != _fromTime.value) {
setState(() {
_fromTime.value = selectedTime;
});
@@ -111,7 +113,7 @@
@override
void initState() {
super.initState();
- _restorableDatePickerRouteFuture = RestorableRouteFuture<DateTime>(
+ _restorableDatePickerRouteFuture = RestorableRouteFuture<DateTime?>(
onComplete: _selectDate,
onPresent: (navigator, arguments) {
return navigator.restorablePush(
@@ -121,13 +123,13 @@
},
);
_restorableDateRangePickerRouteFuture =
- RestorableRouteFuture<DateTimeRange>(
+ RestorableRouteFuture<DateTimeRange?>(
onComplete: _selectDateRange,
onPresent: (navigator, arguments) =>
navigator.restorablePush(_dateRangePickerRoute),
);
- _restorableTimePickerRouteFuture = RestorableRouteFuture<TimeOfDay>(
+ _restorableTimePickerRouteFuture = RestorableRouteFuture<TimeOfDay?>(
onComplete: _selectTime,
onPresent: (navigator, arguments) => navigator.restorablePush(
_timePickerRoute,