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,