[NNBD] Migrate some Cupertino tests (#67086)

diff --git a/packages/flutter/lib/src/cupertino/nav_bar.dart b/packages/flutter/lib/src/cupertino/nav_bar.dart
index 40fa0bc..e8cf3b9 100644
--- a/packages/flutter/lib/src/cupertino/nav_bar.dart
+++ b/packages/flutter/lib/src/cupertino/nav_bar.dart
@@ -344,7 +344,7 @@
   ///
   /// If a border is null, the navigation bar will not display a border.
   /// {@endtemplate}
-  final Border border;
+  final Border? border;
 
   /// {@template flutter.cupertino.navBar.actionsForegroundColor}
   /// Default color used for text and icons of the [leading] and [trailing]
@@ -652,7 +652,7 @@
   final EdgeInsetsDirectional? padding;
 
   /// {@macro flutter.cupertino.navBar.border}
-  final Border border;
+  final Border? border;
 
   /// {@macro flutter.cupertino.navBar.actionsForegroundColor}
   ///
diff --git a/packages/flutter/test/cupertino/action_sheet_test.dart b/packages/flutter/test/cupertino/action_sheet_test.dart
index b086881..0f37a62 100644
--- a/packages/flutter/test/cupertino/action_sheet_test.dart
+++ b/packages/flutter/test/cupertino/action_sheet_test.dart
@@ -2,8 +2,6 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-// @dart = 2.8
-
 import 'package:flutter/cupertino.dart';
 import 'package:flutter/widgets.dart';
 
@@ -63,7 +61,7 @@
 
     final DefaultTextStyle widget = tester.widget(find.widgetWithText(DefaultTextStyle, 'Ok'));
 
-    expect(widget.style.color, const CupertinoDynamicColor.withBrightnessAndContrast(
+    expect(widget.style!.color, const CupertinoDynamicColor.withBrightnessAndContrast(
       color: Color.fromARGB(255, 255, 59, 48),
       darkColor: Color.fromARGB(255, 255, 69, 58),
       highContrastColor: Color.fromARGB(255, 215, 0, 21),
@@ -78,7 +76,7 @@
     );
 
     Brightness brightness = Brightness.light;
-    StateSetter stateSetter;
+    late StateSetter stateSetter;
 
     TextStyle actionTextStyle(String text) {
       return tester.widget<DefaultTextStyle>(
@@ -86,7 +84,7 @@
           of: find.widgetWithText(CupertinoActionSheetAction, text),
           matching: find.byType(DefaultTextStyle),
         ),
-      ).style;
+      ).style!;
     }
 
     await tester.pumpWidget(
@@ -115,7 +113,7 @@
     await tester.pump();
 
     expect(
-      actionTextStyle('action').color.value,
+      actionTextStyle('action').color!.value,
       const Color.fromARGB(255, 0, 122, 255).value,
     );
 
@@ -123,7 +121,7 @@
     await tester.pump();
 
     expect(
-      actionTextStyle('action').color.value,
+      actionTextStyle('action').color!.value,
       const Color.fromARGB(255, 10, 132, 255).value,
     );
   });
@@ -141,7 +139,7 @@
 
     final DefaultTextStyle widget = tester.widget(find.widgetWithText(DefaultTextStyle, 'Ok'));
 
-    expect(widget.style.fontWeight, equals(FontWeight.w600));
+    expect(widget.style!.fontWeight, equals(FontWeight.w600));
   });
 
   testWidgets('Action sheet text styles are correct when both title and message are included', (WidgetTester tester) async {
@@ -162,8 +160,8 @@
     final DefaultTextStyle messageStyle = tester.firstWidget(find.widgetWithText(DefaultTextStyle,
         'An action sheet'));
 
-    expect(titleStyle.style.fontWeight, FontWeight.w600);
-    expect(messageStyle.style.fontWeight, FontWeight.w400);
+    expect(titleStyle.style!.fontWeight, FontWeight.w600);
+    expect(messageStyle.style!.fontWeight, FontWeight.w400);
   });
 
   testWidgets('Action sheet text styles are correct when title but no message is included', (WidgetTester tester) async {
@@ -181,7 +179,7 @@
     final DefaultTextStyle titleStyle = tester.firstWidget(find.widgetWithText(DefaultTextStyle,
         'Action Sheet'));
 
-    expect(titleStyle.style.fontWeight, FontWeight.w400);
+    expect(titleStyle.style!.fontWeight, FontWeight.w400);
   });
 
   testWidgets('Action sheet text styles are correct when message but no title is included', (WidgetTester tester) async {
@@ -199,7 +197,7 @@
     final DefaultTextStyle messageStyle = tester.firstWidget(find.widgetWithText(DefaultTextStyle,
         'An action sheet'));
 
-    expect(messageStyle.style.fontWeight, FontWeight.w600);
+    expect(messageStyle.style!.fontWeight, FontWeight.w600);
   });
 
   testWidgets('Content section but no actions', (WidgetTester tester) async {
@@ -285,7 +283,7 @@
       createAppWithButtonThatLaunchesActionSheet(
         Builder(builder: (BuildContext context) {
           return MediaQuery(
-            data: MediaQuery.of(context).copyWith(textScaleFactor: 3.0),
+            data: MediaQuery.of(context)!.copyWith(textScaleFactor: 3.0),
             child: CupertinoActionSheet(
               title: const Text('The title'),
               message: const Text('The message.'),
@@ -346,13 +344,13 @@
 
   testWidgets('Content section is scrollable', (WidgetTester tester) async {
     final ScrollController messageScrollController = ScrollController();
-    double screenHeight;
+    late double screenHeight;
     await tester.pumpWidget(
       createAppWithButtonThatLaunchesActionSheet(
         Builder(builder: (BuildContext context) {
-          screenHeight = MediaQuery.of(context).size.height;
+          screenHeight = MediaQuery.of(context)!.size.height;
           return MediaQuery(
-            data: MediaQuery.of(context).copyWith(textScaleFactor: 3.0),
+            data: MediaQuery.of(context)!.copyWith(textScaleFactor: 3.0),
             child: CupertinoActionSheet(
               title: const Text('The title'),
               message: Text('Very long content' * 200),
diff --git a/packages/flutter/test/cupertino/activity_indicator_test.dart b/packages/flutter/test/cupertino/activity_indicator_test.dart
index db0e3fc..7b64dd4 100644
--- a/packages/flutter/test/cupertino/activity_indicator_test.dart
+++ b/packages/flutter/test/cupertino/activity_indicator_test.dart
@@ -2,8 +2,6 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-// @dart = 2.8
-
 import 'package:flutter/cupertino.dart';
 import 'package:flutter/scheduler.dart';
 import 'package:flutter_test/flutter_test.dart';
@@ -14,18 +12,18 @@
   testWidgets('Activity indicator animate property works',
       (WidgetTester tester) async {
     await tester.pumpWidget(buildCupertinoActivityIndicator());
-    expect(SchedulerBinding.instance.transientCallbackCount, equals(1));
+    expect(SchedulerBinding.instance!.transientCallbackCount, equals(1));
 
     await tester.pumpWidget(buildCupertinoActivityIndicator(false));
-    expect(SchedulerBinding.instance.transientCallbackCount, equals(0));
+    expect(SchedulerBinding.instance!.transientCallbackCount, equals(0));
 
     await tester.pumpWidget(Container());
 
     await tester.pumpWidget(buildCupertinoActivityIndicator(false));
-    expect(SchedulerBinding.instance.transientCallbackCount, equals(0));
+    expect(SchedulerBinding.instance!.transientCallbackCount, equals(0));
 
     await tester.pumpWidget(buildCupertinoActivityIndicator());
-    expect(SchedulerBinding.instance.transientCallbackCount, equals(1));
+    expect(SchedulerBinding.instance!.transientCallbackCount, equals(1));
   });
 
   testWidgets('Activity indicator dark mode', (WidgetTester tester) async {
@@ -161,7 +159,7 @@
   });
 }
 
-Widget buildCupertinoActivityIndicator([bool animating]) {
+Widget buildCupertinoActivityIndicator([bool? animating]) {
   return MediaQuery(
     data: const MediaQueryData(platformBrightness: Brightness.light),
     child: CupertinoActivityIndicator(
diff --git a/packages/flutter/test/cupertino/app_test.dart b/packages/flutter/test/cupertino/app_test.dart
index 9a1a03d..24c6860 100644
--- a/packages/flutter/test/cupertino/app_test.dart
+++ b/packages/flutter/test/cupertino/app_test.dart
@@ -2,8 +2,6 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-// @dart = 2.8
-
 import 'package:flutter_test/flutter_test.dart';
 import 'package:flutter/cupertino.dart';
 import 'package:flutter/foundation.dart';
@@ -52,8 +50,8 @@
           builder: (BuildContext context) {
             return Column(
               children: <Widget>[
-                Text(CupertinoLocalizations.of(context).selectAllButtonLabel),
-                Text(CupertinoLocalizations.of(context).datePickerMediumDate(
+                Text(CupertinoLocalizations.of(context)!.selectAllButtonLabel),
+                Text(CupertinoLocalizations.of(context)!.datePickerMediumDate(
                   DateTime(2018, 10, 4),
                 )),
               ],
@@ -126,7 +124,7 @@
     expect(find.text('non-regular page one'), findsNothing);
     expect(find.text('regular page one'), findsNothing);
     expect(find.text('regular page two'), findsNothing);
-    navigatorKey.currentState.pop();
+    navigatorKey.currentState!.pop();
     await tester.pumpAndSettle();
     expect(find.text('non-regular page two'), findsNothing);
     expect(find.text('non-regular page one'), findsOneWidget);
@@ -158,7 +156,7 @@
     );
     final SimpleNavigatorRouterDelegate delegate = SimpleNavigatorRouterDelegate(
       builder: (BuildContext context, RouteInformation information) {
-        return Text(information.location);
+        return Text(information.location!);
       },
       onPopPage: (Route<void> route, void result, SimpleNavigatorRouterDelegate delegate) {
         delegate.routeInformation = const RouteInformation(
@@ -176,7 +174,7 @@
 
     // Simulate android back button intent.
     final ByteData message = const JSONMethodCodec().encodeMethodCall(const MethodCall('popRoute'));
-    await ServicesBinding.instance.defaultBinaryMessenger.handlePlatformMessage('flutter/navigation', message, (_) { });
+    await ServicesBinding.instance!.defaultBinaryMessenger.handlePlatformMessage('flutter/navigation', message, (_) { });
     await tester.pumpAndSettle();
     expect(find.text('popped'), findsOneWidget);
   });
@@ -201,7 +199,7 @@
 
 class SimpleNavigatorRouterDelegate extends RouterDelegate<RouteInformation> with PopNavigatorRouterDelegateMixin<RouteInformation>, ChangeNotifier {
   SimpleNavigatorRouterDelegate({
-    @required this.builder,
+    required this.builder,
     this.onPopPage,
   });
 
@@ -209,14 +207,14 @@
   GlobalKey<NavigatorState> navigatorKey = GlobalKey<NavigatorState>();
 
   RouteInformation get routeInformation => _routeInformation;
-  RouteInformation _routeInformation;
+  late RouteInformation _routeInformation;
   set routeInformation(RouteInformation newValue) {
     _routeInformation = newValue;
     notifyListeners();
   }
 
   SimpleRouterDelegateBuilder builder;
-  SimpleNavigatorRouterDelegatePopPage<void> onPopPage;
+  SimpleNavigatorRouterDelegatePopPage<void>? onPopPage;
 
   @override
   Future<void> setNewRoutePath(RouteInformation configuration) {
@@ -225,7 +223,7 @@
   }
 
   bool _handlePopPage(Route<void> route, void data) {
-    return onPopPage(route, data, this);
+    return onPopPage!(route, data, this);
   }
 
   @override
@@ -240,7 +238,7 @@
           child:  Text('base'),
         ),
         CupertinoPage<void>(
-          key: ValueKey<String>(routeInformation?.location),
+          key: ValueKey<String?>(routeInformation.location),
           child: builder(context, routeInformation),
         )
       ],
diff --git a/packages/flutter/test/cupertino/bottom_tab_bar_test.dart b/packages/flutter/test/cupertino/bottom_tab_bar_test.dart
index 9f17634..454f917 100644
--- a/packages/flutter/test/cupertino/bottom_tab_bar_test.dart
+++ b/packages/flutter/test/cupertino/bottom_tab_bar_test.dart
@@ -2,8 +2,6 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-// @dart = 2.8
-
 import 'dart:typed_data';
 
 import 'package:flutter/cupertino.dart';
@@ -72,13 +70,13 @@
       of: find.text('Tab 1'),
       matching: find.byType(RichText),
     ));
-    expect(actualInactive.text.style.color, const Color(0xFF654321));
+    expect(actualInactive.text.style!.color, const Color(0xFF654321));
 
     final RichText actualActive = tester.widget(find.descendant(
       of: find.text('Tab 2'),
       matching: find.byType(RichText),
     ));
-    expect(actualActive.text.style.color, const Color(0xFF123456));
+    expect(actualActive.text.style!.color, const Color(0xFF123456));
   });
 
 
@@ -138,13 +136,13 @@
       of: find.text('Tab 1'),
       matching: find.byType(RichText),
     ));
-    expect(actualInactive.text.style.color.value, 0xFF000002);
+    expect(actualInactive.text.style!.color!.value, 0xFF000002);
 
     RichText actualActive = tester.widget(find.descendant(
       of: find.text('Tab 2'),
       matching: find.byType(RichText),
     ));
-    expect(actualActive.text.style.color.value, 0xFF000000);
+    expect(actualActive.text.style!.color!.value, 0xFF000000);
 
     final RenderDecoratedBox renderDecoratedBox = tester.renderObject(find.descendant(
       of: find.byType(BackdropFilter),
@@ -153,7 +151,7 @@
 
     // Border color is resolved correctly.
     final BoxDecoration decoration1 = renderDecoratedBox.decoration as BoxDecoration;
-    expect(decoration1.border.top.color.value, 0x4C000000);
+    expect(decoration1.border!.top.color.value, 0x4C000000);
 
     // Switch to dark mode.
     await pumpWidgetWithBoilerplate(tester, MediaQuery(
@@ -179,17 +177,17 @@
         of: find.text('Tab 1'),
         matching: find.byType(RichText),
     ));
-    expect(actualInactive.text.style.color.value, 0xFF000003);
+    expect(actualInactive.text.style!.color!.value, 0xFF000003);
 
     actualActive = tester.widget(find.descendant(
         of: find.text('Tab 2'),
         matching: find.byType(RichText),
     ));
-    expect(actualActive.text.style.color.value, 0xFF000001);
+    expect(actualActive.text.style!.color!.value, 0xFF000001);
 
     // Border color is resolved correctly.
     final BoxDecoration decoration2 = renderDecoratedBox.decoration as BoxDecoration;
-    expect(decoration2.border.top.color.value, 0x29000000);
+    expect(decoration2.border!.top.color.value, 0x29000000);
   });
 
   testWidgets('Tabs respects themes', (WidgetTester tester) async {
@@ -215,13 +213,13 @@
       of: find.text('Tab 1'),
       matching: find.byType(RichText),
     ));
-    expect(actualInactive.text.style.color.value, 0xFF999999);
+    expect(actualInactive.text.style!.color!.value, 0xFF999999);
 
     RichText actualActive = tester.widget(find.descendant(
       of: find.text('Tab 2'),
       matching: find.byType(RichText),
     ));
-    expect(actualActive.text.style.color, CupertinoColors.activeBlue);
+    expect(actualActive.text.style!.color, CupertinoColors.activeBlue);
 
     await tester.pumpWidget(
       CupertinoApp(
@@ -246,14 +244,14 @@
       of: find.text('Tab 1'),
       matching: find.byType(RichText),
     ));
-    expect(actualInactive.text.style.color.value, 0xFF757575);
+    expect(actualInactive.text.style!.color!.value, 0xFF757575);
 
     actualActive = tester.widget(find.descendant(
       of: find.text('Tab 2'),
       matching: find.byType(RichText),
     ));
 
-    expect(actualActive.text.style.color, isSameColorAs(CupertinoColors.activeBlue.darkColor));
+    expect(actualActive.text.style!.color, isSameColorAs(CupertinoColors.activeBlue.darkColor));
   });
 
   testWidgets('Use active icon', (WidgetTester tester) async {
@@ -368,7 +366,7 @@
   });
 
   testWidgets('Tap callback', (WidgetTester tester) async {
-    int callbackTab;
+    late int callbackTab;
 
     await pumpWidgetWithBoilerplate(tester, MediaQuery(
       data: const MediaQueryData(),
diff --git a/packages/flutter/test/cupertino/button_test.dart b/packages/flutter/test/cupertino/button_test.dart
index 6ba875f..3d221b4 100644
--- a/packages/flutter/test/cupertino/button_test.dart
+++ b/packages/flutter/test/cupertino/button_test.dart
@@ -2,8 +2,6 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-// @dart = 2.8
-
 import 'package:flutter/rendering.dart';
 import 'package:flutter/cupertino.dart';
 import 'package:flutter/scheduler.dart';
@@ -151,11 +149,11 @@
 
     expect(value, isFalse);
     // No animating by default.
-    expect(SchedulerBinding.instance.transientCallbackCount, equals(0));
+    expect(SchedulerBinding.instance!.transientCallbackCount, equals(0));
     await tester.tap(find.byType(CupertinoButton));
     expect(value, isTrue);
     // Animates.
-    expect(SchedulerBinding.instance.transientCallbackCount, equals(1));
+    expect(SchedulerBinding.instance!.transientCallbackCount, equals(1));
   });
 
   testWidgets("Disabled button doesn't animate", (WidgetTester tester) async {
@@ -163,10 +161,10 @@
       child: Text('Tap me'),
       onPressed: null,
     )));
-    expect(SchedulerBinding.instance.transientCallbackCount, equals(0));
+    expect(SchedulerBinding.instance!.transientCallbackCount, equals(0));
     await tester.tap(find.byType(CupertinoButton));
     // Still doesn't animate.
-    expect(SchedulerBinding.instance.transientCallbackCount, equals(0));
+    expect(SchedulerBinding.instance!.transientCallbackCount, equals(0));
   });
 
   testWidgets('pressedOpacity defaults to 0.1', (WidgetTester tester) async {
@@ -295,7 +293,7 @@
       find.widgetWithText(DecoratedBox, 'Skeuomorph me')
     ).decoration as BoxDecoration;
 
-    expect(boxDecoration.color.value, 0xFF654321);
+    expect(boxDecoration.color!.value, 0xFF654321);
 
     await tester.pumpWidget(
       MediaQuery(
@@ -314,18 +312,18 @@
     ).decoration as BoxDecoration;
 
     // Disabled color.
-    expect(boxDecoration.color.value, 0xFF111111);
+    expect(boxDecoration.color!.value, 0xFF111111);
   });
 
   testWidgets('Button respects themes', (WidgetTester tester) async {
-    TextStyle textStyle;
+    late TextStyle textStyle;
 
     await tester.pumpWidget(
       CupertinoApp(
         home: CupertinoButton(
           onPressed: () { },
           child: Builder(builder: (BuildContext context) {
-            textStyle = DefaultTextStyle.of(context).style;
+            textStyle = DefaultTextStyle.of(context).style!;
             return const Placeholder();
           }),
         ),
@@ -339,7 +337,7 @@
         home: CupertinoButton.filled(
           onPressed: () { },
           child: Builder(builder: (BuildContext context) {
-            textStyle = DefaultTextStyle.of(context).style;
+            textStyle = DefaultTextStyle.of(context).style!;
             return const Placeholder();
           }),
         ),
@@ -361,7 +359,7 @@
         home: CupertinoButton(
           onPressed: () { },
           child: Builder(builder: (BuildContext context) {
-            textStyle = DefaultTextStyle.of(context).style;
+            textStyle = DefaultTextStyle.of(context).style!;
             return const Placeholder();
           }),
         ),
@@ -375,7 +373,7 @@
         home: CupertinoButton.filled(
           onPressed: () { },
           child: Builder(builder: (BuildContext context) {
-            textStyle = DefaultTextStyle.of(context).style;
+            textStyle = DefaultTextStyle.of(context).style!;
             return const Placeholder();
           }),
         ),
@@ -392,7 +390,7 @@
   });
 }
 
-Widget boilerplate({ Widget child }) {
+Widget boilerplate({ required Widget child }) {
   return Directionality(
     textDirection: TextDirection.ltr,
     child: Center(child: child),
diff --git a/packages/flutter/test/cupertino/colors_test.dart b/packages/flutter/test/cupertino/colors_test.dart
index 5135736..d8cc947 100644
--- a/packages/flutter/test/cupertino/colors_test.dart
+++ b/packages/flutter/test/cupertino/colors_test.dart
@@ -2,8 +2,6 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-// @dart = 2.8
-
 import 'package:flutter/cupertino.dart';
 import 'package:flutter/material.dart';
 import 'package:flutter_test/flutter_test.dart';
@@ -13,15 +11,15 @@
 
 class DependentWidget extends StatelessWidget {
   const DependentWidget({
-    Key key,
-    this.color,
+    Key? key,
+    required this.color,
   }) : super(key: key);
 
   final Color color;
 
   @override
   Widget build(BuildContext context) {
-    final Color resolved = CupertinoDynamicColor.resolve(color, context, nullOk: false);
+    final Color resolved = CupertinoDynamicColor.resolve(color, context, nullOk: false)!;
     return DecoratedBox(
       decoration: BoxDecoration(color: resolved),
       child: const SizedBox.expand(),
@@ -422,7 +420,7 @@
   });
 
   testWidgets('CupertinoDynamicColor used in a CupertinoTheme', (WidgetTester tester) async {
-    CupertinoDynamicColor color;
+    late CupertinoDynamicColor color;
     await tester.pumpWidget(
       CupertinoApp(
         theme: const CupertinoThemeData(
@@ -503,7 +501,7 @@
   });
 
   group('MaterialApp:', () {
-    Color color;
+    Color? color;
     setUp(() { color = null; });
 
     testWidgets('dynamic color works in cupertino override theme', (WidgetTester tester) async {
diff --git a/packages/flutter/test/cupertino/context_menu_action_test.dart b/packages/flutter/test/cupertino/context_menu_action_test.dart
index 2f09144..278810b 100644
--- a/packages/flutter/test/cupertino/context_menu_action_test.dart
+++ b/packages/flutter/test/cupertino/context_menu_action_test.dart
@@ -2,8 +2,6 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-// @dart = 2.8
-
 import 'package:flutter_test/flutter_test.dart';
 import 'package:flutter/cupertino.dart';
 
@@ -15,7 +13,7 @@
   const Color _kDestructiveActionColor = CupertinoColors.destructiveRed;
   const FontWeight _kDefaultActionWeight = FontWeight.w600;
 
-  Widget _getApp({VoidCallback onPressed, bool isDestructiveAction = false, bool isDefaultAction = false}) {
+  Widget _getApp({VoidCallback? onPressed, bool isDestructiveAction = false, bool isDefaultAction = false}) {
     final UniqueKey actionKey = UniqueKey();
     final CupertinoContextMenuAction action = CupertinoContextMenuAction(
       key: actionKey,
@@ -52,7 +50,7 @@
     );
     expect(finder, findsOneWidget);
     final DefaultTextStyle defaultStyle = tester.widget(finder);
-    return defaultStyle.style;
+    return defaultStyle.style!;
   }
 
   Icon _getIcon(WidgetTester tester) {
diff --git a/packages/flutter/test/cupertino/context_menu_test.dart b/packages/flutter/test/cupertino/context_menu_test.dart
index 1203b29..be2a059 100644
--- a/packages/flutter/test/cupertino/context_menu_test.dart
+++ b/packages/flutter/test/cupertino/context_menu_test.dart
@@ -2,8 +2,6 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-// @dart = 2.8
-
 import 'package:flutter_test/flutter_test.dart';
 import 'package:flutter/cupertino.dart';
 import 'package:flutter/foundation.dart' show kIsWeb;
@@ -24,7 +22,7 @@
   Widget _getContextMenu({
     Alignment alignment = Alignment.center,
     Size screenSize = const Size(800.0, 600.0),
-    Widget child,
+    Widget? child,
   }) {
     return CupertinoApp(
       home: CupertinoPageScaffold(
diff --git a/packages/flutter/test/cupertino/date_picker_test.dart b/packages/flutter/test/cupertino/date_picker_test.dart
index c603c21..c8f9e41 100644
--- a/packages/flutter/test/cupertino/date_picker_test.dart
+++ b/packages/flutter/test/cupertino/date_picker_test.dart
@@ -2,8 +2,6 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-// @dart = 2.8
-
 import 'dart:ui';
 
 import 'package:flutter/cupertino.dart';
@@ -16,15 +14,6 @@
 
 void main() {
   group('Countdown timer picker', () {
-    testWidgets('onTimerDurationChanged is not null', (WidgetTester tester) async {
-      expect(
-        () {
-          CupertinoTimerPicker(onTimerDurationChanged: null);
-        },
-        throwsAssertionError,
-      );
-    });
-
     testWidgets('initialTimerDuration falls within limit', (WidgetTester tester) async {
       expect(
         () {
@@ -245,7 +234,7 @@
   });
 
   testWidgets('picker honors minuteInterval and secondInterval', (WidgetTester tester) async {
-    Duration duration;
+    late Duration duration;
     await tester.pumpWidget(
       CupertinoApp(
         home: SizedBox(
@@ -277,31 +266,6 @@
   });
 
   group('Date picker', () {
-    testWidgets('mode is not null', (WidgetTester tester) async {
-      expect(
-        () {
-          CupertinoDatePicker(
-            mode: null,
-            onDateTimeChanged: (_) { },
-            initialDateTime: DateTime.now(),
-          );
-        },
-        throwsAssertionError,
-      );
-    });
-
-    testWidgets('onDateTimeChanged is not null', (WidgetTester tester) async {
-      expect(
-        () {
-          CupertinoDatePicker(
-            onDateTimeChanged: null,
-            initialDateTime: DateTime.now(),
-          );
-        },
-        throwsAssertionError,
-      );
-    });
-
     testWidgets('initial date is set to default value', (WidgetTester tester) async {
       final CupertinoDatePicker picker = CupertinoDatePicker(
         onDateTimeChanged: (_) { },
@@ -350,7 +314,7 @@
     });
 
     testWidgets('initial date honors minuteInterval', (WidgetTester tester) async {
-      DateTime newDateTime;
+      late DateTime newDateTime;
       await tester.pumpWidget(
         CupertinoApp(
           home: Center(
@@ -399,7 +363,7 @@
     });
 
     testWidgets('changing initialDateTime after first build does not do anything', (WidgetTester tester) async {
-      DateTime selectedDateTime;
+      late DateTime selectedDateTime;
       await tester.pumpWidget(
         CupertinoApp(
           home: Center(
@@ -622,7 +586,7 @@
     });
 
     testWidgets('picker automatically scrolls away from invalid date on month change', (WidgetTester tester) async {
-      DateTime date;
+      late DateTime date;
       await tester.pumpWidget(
         CupertinoApp(
           home: Center(
@@ -666,7 +630,7 @@
       'date picker automatically scrolls away from invalid date, '
       "and onDateTimeChanged doesn't report these dates",
       (WidgetTester tester) async {
-        DateTime date;
+        late DateTime date;
         // 2016 is a leap year.
         final DateTime minimum = DateTime(2016, 2, 29);
         final DateTime maximum = DateTime(2018, 12, 31);
@@ -695,7 +659,7 @@
 
         // 2017 has 28 days in Feb so 29 is greyed out.
         expect(
-          tester.widget<Text>(find.text('29')).style.color,
+          tester.widget<Text>(find.text('29')).style!.color,
           isSameColorAs(CupertinoColors.inactiveGray.color),
         );
 
@@ -710,7 +674,7 @@
 
         // 2016 has 29 days in Feb so 29 is not greyed out.
         expect(
-          tester.widget<Text>(find.text('29')).style.color,
+          tester.widget<Text>(find.text('29')).style!.color,
           isNot(isSameColorAs(CupertinoColors.inactiveGray.color)),
         );
 
@@ -724,7 +688,7 @@
         );
 
         expect(
-          tester.widget<Text>(find.text('29')).style.color,
+          tester.widget<Text>(find.text('29')).style!.color,
           isSameColorAs(CupertinoColors.inactiveGray.color),
         );
     });
@@ -733,7 +697,7 @@
       'dateTime picker automatically scrolls away from invalid date, '
       "and onDateTimeChanged doesn't report these dates",
       (WidgetTester tester) async {
-        DateTime date;
+        late DateTime date;
         final DateTime minimum = DateTime(2019, 11, 11, 3, 30);
         final DateTime maximum = DateTime(2019, 11, 11, 14, 59, 59);
         await tester.pumpWidget(
@@ -761,18 +725,18 @@
 
         // 3:00 is valid but 2:00 should be invalid.
         expect(
-          tester.widget<Text>(find.text('3')).style.color,
+          tester.widget<Text>(find.text('3')).style!.color,
           isNot(isSameColorAs(CupertinoColors.inactiveGray.color)),
         );
 
         expect(
-          tester.widget<Text>(find.text('2')).style.color,
+          tester.widget<Text>(find.text('2')).style!.color,
           isSameColorAs(CupertinoColors.inactiveGray.color),
         );
 
         // 'PM' is greyed out.
         expect(
-          tester.widget<Text>(find.text('PM')).style.color,
+          tester.widget<Text>(find.text('PM')).style!.color,
           isSameColorAs(CupertinoColors.inactiveGray.color),
         );
 
@@ -787,11 +751,11 @@
 
         // 3'o clock and 'AM' are now greyed out.
         expect(
-          tester.widget<Text>(find.text('AM')).style.color,
+          tester.widget<Text>(find.text('AM')).style!.color,
           isSameColorAs(CupertinoColors.inactiveGray.color),
         );
         expect(
-          tester.widget<Text>(find.text('3')).style.color,
+          tester.widget<Text>(find.text('3')).style!.color,
           isSameColorAs(CupertinoColors.inactiveGray.color),
         );
 
@@ -810,7 +774,7 @@
       'time picker automatically scrolls away from invalid date, '
       "and onDateTimeChanged doesn't report these dates",
       (WidgetTester tester) async {
-        DateTime date;
+        late DateTime date;
         final DateTime minimum = DateTime(2019, 11, 11, 3, 30);
         final DateTime maximum = DateTime(2019, 11, 11, 14, 59, 59);
         await tester.pumpWidget(
@@ -838,18 +802,18 @@
 
         // 3:00 is valid but 2:00 should be invalid.
         expect(
-          tester.widget<Text>(find.text('3')).style.color,
+          tester.widget<Text>(find.text('3')).style!.color,
           isNot(isSameColorAs(CupertinoColors.inactiveGray.color)),
         );
 
         expect(
-          tester.widget<Text>(find.text('2')).style.color,
+          tester.widget<Text>(find.text('2')).style!.color,
           isSameColorAs(CupertinoColors.inactiveGray.color),
         );
 
         // 'PM' is greyed out.
         expect(
-          tester.widget<Text>(find.text('PM')).style.color,
+          tester.widget<Text>(find.text('PM')).style!.color,
           isSameColorAs(CupertinoColors.inactiveGray.color),
         );
 
@@ -864,11 +828,11 @@
 
         // 3'o clock and 'AM' are now greyed out.
         expect(
-          tester.widget<Text>(find.text('AM')).style.color,
+          tester.widget<Text>(find.text('AM')).style!.color,
           isSameColorAs(CupertinoColors.inactiveGray.color),
         );
         expect(
-          tester.widget<Text>(find.text('3')).style.color,
+          tester.widget<Text>(find.text('3')).style!.color,
           isSameColorAs(CupertinoColors.inactiveGray.color),
         );
 
@@ -884,7 +848,7 @@
     });
 
     testWidgets('picker automatically scrolls away from invalid date on day change', (WidgetTester tester) async {
-      DateTime date;
+      late DateTime date;
       await tester.pumpWidget(
         CupertinoApp(
           home: Center(
@@ -941,7 +905,7 @@
       'date picker should only take into account the date part of minimumDate and maximumDate',
       (WidgetTester tester) async {
         // Regression test for https://github.com/flutter/flutter/issues/49606.
-        DateTime date;
+        late DateTime date;
         final DateTime minDate = DateTime(2020, 1, 1, 12);
         await tester.pumpWidget(
           CupertinoApp(
@@ -972,7 +936,7 @@
 
     group('Picker handles initial noon/midnight times', () {
       testWidgets('midnight', (WidgetTester tester) async {
-        DateTime date;
+        late DateTime date;
         await tester.pumpWidget(
           CupertinoApp(
             home: Center(
@@ -1000,7 +964,7 @@
       });
 
       testWidgets('noon', (WidgetTester tester) async {
-        DateTime date;
+        late DateTime date;
         await tester.pumpWidget(
           CupertinoApp(
             home: Center(
@@ -1028,7 +992,7 @@
       });
 
       testWidgets('noon in 24 hour time', (WidgetTester tester) async {
-        DateTime date;
+        late DateTime date;
         await tester.pumpWidget(
           CupertinoApp(
             home: Center(
@@ -1058,7 +1022,7 @@
     });
 
     testWidgets('picker persists am/pm value when scrolling hours', (WidgetTester tester) async {
-      DateTime date;
+      late DateTime date;
       await tester.pumpWidget(
         CupertinoApp(
           home: Center(
@@ -1107,7 +1071,7 @@
     });
 
     testWidgets('picker automatically scrolls the am/pm column when the hour column changes enough', (WidgetTester tester) async {
-      DateTime date;
+      late DateTime date;
       await tester.pumpWidget(
         CupertinoApp(
           home: Center(
@@ -1285,7 +1249,7 @@
   });
 
   testWidgets('TimerPicker only changes hour label after scrolling stops', (WidgetTester tester) async {
-    Duration duration;
+    Duration? duration;
     await tester.pumpWidget(
       CupertinoApp(
         home: Center(
@@ -1308,13 +1272,13 @@
 
     await tester.drag(find.text('2'), Offset(0, -_kRowOffset.dy));
     // Duration should change but not the label.
-    expect(duration?.inHours, 1);
+    expect(duration!.inHours, 1);
     expect(find.text('hour'), findsNothing);
     expect(find.text('hours'), findsOneWidget);
     await tester.pumpAndSettle();
 
     // Now the label should change.
-    expect(duration?.inHours, 1);
+    expect(duration!.inHours, 1);
     expect(find.text('hours'), findsNothing);
     expect(find.text('hour'), findsOneWidget);
   });
@@ -1368,7 +1332,7 @@
 
   testWidgets('scrollController can be removed or added', (WidgetTester tester) async {
     final SemanticsHandle handle = tester.ensureSemantics();
-    int lastSelectedItem;
+    late int lastSelectedItem;
     void onSelectedItemChanged(int index) {
       lastSelectedItem = index;
     }
@@ -1377,7 +1341,7 @@
       onSelectedItemChanged: onSelectedItemChanged,
     ));
 
-    tester.binding.pipelineOwner.semanticsOwner.performAction(1, SemanticsAction.increase);
+    tester.binding.pipelineOwner.semanticsOwner!.performAction(1, SemanticsAction.increase);
     await tester.pumpAndSettle();
     expect(lastSelectedItem, 1);
 
@@ -1385,7 +1349,7 @@
       onSelectedItemChanged: onSelectedItemChanged,
     ));
 
-    tester.binding.pipelineOwner.semanticsOwner.performAction(1, SemanticsAction.increase);
+    tester.binding.pipelineOwner.semanticsOwner!.performAction(1, SemanticsAction.increase);
     await tester.pumpAndSettle();
     expect(lastSelectedItem, 2);
 
@@ -1394,7 +1358,7 @@
       onSelectedItemChanged: onSelectedItemChanged,
     ));
 
-    tester.binding.pipelineOwner.semanticsOwner.performAction(1, SemanticsAction.increase);
+    tester.binding.pipelineOwner.semanticsOwner!.performAction(1, SemanticsAction.increase);
     await tester.pumpAndSettle();
     expect(lastSelectedItem, 3);
 
@@ -1404,7 +1368,7 @@
   testWidgets('CupertinoDataPicker does not provide invalid MediaQuery', (WidgetTester tester) async {
     // Regression test for https://github.com/flutter/flutter/issues/47989.
     Brightness brightness = Brightness.light;
-    StateSetter setState;
+    late StateSetter setState;
 
     await tester.pumpWidget(
       CupertinoApp(
@@ -1421,7 +1385,7 @@
         home: StatefulBuilder(builder: (BuildContext context, StateSetter stateSetter) {
           setState = stateSetter;
           return MediaQuery(
-            data: MediaQuery.of(context).copyWith(platformBrightness: brightness),
+            data: MediaQuery.of(context)!.copyWith(platformBrightness: brightness),
             child: CupertinoDatePicker(
               initialDateTime: DateTime(2019),
               mode: CupertinoDatePickerMode.date,
@@ -1433,7 +1397,7 @@
     );
 
     expect(
-      tester.widget<Text>(find.text('2019')).style.color,
+      tester.widget<Text>(find.text('2019')).style!.color,
       isSameColorAs(const Color(0xFFFFFFFF)),
     );
 
@@ -1441,7 +1405,7 @@
     await tester.pump();
 
     expect(
-      tester.widget<Text>(find.text('2019')).style.color,
+      tester.widget<Text>(find.text('2019')).style!.color,
       isSameColorAs(const Color(0xFF000000)),
     );
   });
@@ -1449,7 +1413,7 @@
   testWidgets('picker exports semantics', (WidgetTester tester) async {
     final SemanticsHandle handle = tester.ensureSemantics();
     debugResetSemanticsIdCounter();
-    int lastSelectedItem;
+    int? lastSelectedItem;
     await tester.pumpWidget(_buildPicker(onSelectedItemChanged: (int index) {
       lastSelectedItem = index;
     }));
@@ -1466,7 +1430,7 @@
       ],
     ));
 
-    tester.binding.pipelineOwner.semanticsOwner.performAction(1, SemanticsAction.increase);
+    tester.binding.pipelineOwner.semanticsOwner!.performAction(1, SemanticsAction.increase);
     await tester.pumpAndSettle();
 
     expect(tester.getSemantics(find.byType(CupertinoPicker)), matchesSemantics(
@@ -1486,7 +1450,10 @@
   });
 }
 
-Widget _buildPicker({ FixedExtentScrollController controller, ValueChanged<int> onSelectedItemChanged }) {
+Widget _buildPicker({
+  FixedExtentScrollController? controller,
+  required ValueChanged<int> onSelectedItemChanged,
+}) {
   return Directionality(
     textDirection: TextDirection.ltr,
     child: CupertinoPicker(
diff --git a/packages/flutter/test/cupertino/dialog_test.dart b/packages/flutter/test/cupertino/dialog_test.dart
index 82f9342..6d70a73 100644
--- a/packages/flutter/test/cupertino/dialog_test.dart
+++ b/packages/flutter/test/cupertino/dialog_test.dart
@@ -2,8 +2,6 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-// @dart = 2.8
-
 import 'dart:math';
 
 import 'package:flutter/cupertino.dart';
@@ -118,7 +116,7 @@
 
     final DefaultTextStyle widget = tester.widget(find.byType(DefaultTextStyle));
 
-    expect(widget.style.color.withAlpha(255), CupertinoColors.systemRed.color);
+    expect(widget.style!.color!.withAlpha(255), CupertinoColors.systemRed.color);
   });
 
   testWidgets('Dialog dark theme', (WidgetTester tester) async {
@@ -143,7 +141,7 @@
     );
 
     expect(
-      cancelText.text.style.color.value,
+      cancelText.text.style!.color!.value,
       0xFF0A84FF, // dark elevated color of systemBlue.
     );
 
@@ -233,7 +231,7 @@
 
     final DefaultTextStyle widget = tester.widget(find.byType(DefaultTextStyle));
 
-    expect(widget.style.fontWeight, equals(FontWeight.w600));
+    expect(widget.style!.fontWeight, equals(FontWeight.w600));
   });
 
   testWidgets('Dialog default and destructive action styles', (WidgetTester tester) async {
@@ -245,8 +243,8 @@
 
     final DefaultTextStyle widget = tester.widget(find.byType(DefaultTextStyle));
 
-    expect(widget.style.color.withAlpha(255), CupertinoColors.systemRed.color);
-    expect(widget.style.fontWeight, equals(FontWeight.w600));
+    expect(widget.style!.color!.withAlpha(255), CupertinoColors.systemRed.color);
+    expect(widget.style!.fontWeight, equals(FontWeight.w600));
   });
 
   testWidgets('Dialog disabled action style', (WidgetTester tester) async {
@@ -256,8 +254,8 @@
 
     final DefaultTextStyle widget = tester.widget(find.byType(DefaultTextStyle));
 
-    expect(widget.style.color.opacity, greaterThanOrEqualTo(127 / 255));
-    expect(widget.style.color.opacity, lessThanOrEqualTo(128 / 255));
+    expect(widget.style!.color!.opacity, greaterThanOrEqualTo(127 / 255));
+    expect(widget.style!.color!.opacity, lessThanOrEqualTo(128 / 255));
   });
 
   testWidgets('Dialog enabled action style', (WidgetTester tester) async {
@@ -268,7 +266,7 @@
 
     final DefaultTextStyle widget = tester.widget(find.byType(DefaultTextStyle));
 
-    expect(widget.style.color.opacity, equals(1.0));
+    expect(widget.style!.color!.opacity, equals(1.0));
   });
 
   testWidgets('Message is scrollable, has correct padding with large text sizes', (WidgetTester tester) async {
@@ -277,7 +275,7 @@
       createAppWithButtonThatLaunchesDialog(
         dialogBuilder: (BuildContext context) {
           return MediaQuery(
-            data: MediaQuery.of(context).copyWith(textScaleFactor: 3.0),
+            data: MediaQuery.of(context)!.copyWith(textScaleFactor: 3.0),
             child: CupertinoAlertDialog(
               title: const Text('The Title'),
               content: Text('Very long content ' * 20),
@@ -377,7 +375,7 @@
       createAppWithButtonThatLaunchesDialog(
         dialogBuilder: (BuildContext context) {
           return MediaQuery(
-            data: MediaQuery.of(context).copyWith(textScaleFactor: 3.0),
+            data: MediaQuery.of(context)!.copyWith(textScaleFactor: 3.0),
             child: CupertinoAlertDialog(
               title: const Text('The title'),
               content: const Text('The content.'),
@@ -438,7 +436,7 @@
       createAppWithButtonThatLaunchesDialog(
         dialogBuilder: (BuildContext context) {
           return MediaQuery(
-            data: MediaQuery.of(context).copyWith(textScaleFactor: textScaleFactor),
+            data: MediaQuery.of(context)!.copyWith(textScaleFactor: textScaleFactor),
             child: CupertinoAlertDialog(
               actions: const <Widget>[
                 CupertinoDialogAction(
@@ -489,7 +487,7 @@
       createAppWithButtonThatLaunchesDialog(
         dialogBuilder: (BuildContext context) {
           return MediaQuery(
-            data: MediaQuery.of(context).copyWith(textScaleFactor: textScaleFactor),
+            data: MediaQuery.of(context)!.copyWith(textScaleFactor: textScaleFactor),
             child: CupertinoAlertDialog(
               title: const Text('The title'),
               content: const Text('The content.'),
@@ -554,11 +552,11 @@
 
   testWidgets('Actions section height for 2 side-by-side buttons is height of tallest button.', (WidgetTester tester) async {
     final ScrollController scrollController = ScrollController();
-    double dividerWidth; // Will be set when the dialog builder runs. Needs a BuildContext.
+    late double dividerWidth; // Will be set when the dialog builder runs. Needs a BuildContext.
     await tester.pumpWidget(
       createAppWithButtonThatLaunchesDialog(
         dialogBuilder: (BuildContext context) {
-          dividerWidth = 1.0 / MediaQuery.of(context).devicePixelRatio;
+          dividerWidth = 1.0 / MediaQuery.of(context)!.devicePixelRatio;
           return CupertinoAlertDialog(
             title: const Text('The Title'),
             content: const Text('The message'),
@@ -599,11 +597,11 @@
 
   testWidgets('Actions section height for 2 stacked buttons with enough room is height of both buttons.', (WidgetTester tester) async {
     final ScrollController scrollController = ScrollController();
-    double dividerThickness; // Will be set when the dialog builder runs. Needs a BuildContext.
+    late double dividerThickness; // Will be set when the dialog builder runs. Needs a BuildContext.
     await tester.pumpWidget(
       createAppWithButtonThatLaunchesDialog(
         dialogBuilder: (BuildContext context) {
-          dividerThickness = 1.0 / MediaQuery.of(context).devicePixelRatio;
+          dividerThickness = 1.0 / MediaQuery.of(context)!.devicePixelRatio;
           return CupertinoAlertDialog(
             title: const Text('The Title'),
             content: const Text('The message'),
@@ -679,7 +677,7 @@
       createAppWithButtonThatLaunchesDialog(
         dialogBuilder: (BuildContext context) {
           return MediaQuery(
-            data: MediaQuery.of(context).copyWith(textScaleFactor: 3.0),
+            data: MediaQuery.of(context)!.copyWith(textScaleFactor: 3.0),
             child: CupertinoAlertDialog(
               title: const Text('The Title'),
               content: Text('The message\n' * 20),
@@ -807,11 +805,11 @@
 
   testWidgets('Pressed button changes appearance and dividers disappear.', (WidgetTester tester) async {
     final ScrollController scrollController = ScrollController();
-    double dividerThickness; // Will be set when the dialog builder runs. Needs a BuildContext.
+    late double dividerThickness; // Will be set when the dialog builder runs. Needs a BuildContext.
     await tester.pumpWidget(
       createAppWithButtonThatLaunchesDialog(
         dialogBuilder: (BuildContext context) {
-          dividerThickness = 1.0 / MediaQuery.of(context).devicePixelRatio;
+          dividerThickness = 1.0 / MediaQuery.of(context)!.devicePixelRatio;
           return CupertinoAlertDialog(
             title: const Text('The Title'),
             content: const Text('The message'),
@@ -1153,7 +1151,7 @@
       createAppWithButtonThatLaunchesDialog(
         dialogBuilder: (BuildContext context) {
           return MediaQuery(
-            data: MediaQuery.of(context).copyWith(textScaleFactor: 3.0),
+            data: MediaQuery.of(context)!.copyWith(textScaleFactor: 3.0),
             child: const RepaintBoundary(
               child: CupertinoAlertDialog(
                 title: Text('Title'),
@@ -1195,7 +1193,9 @@
   return actionsSection as RenderBox;
 }
 
-Widget createAppWithButtonThatLaunchesDialog({ WidgetBuilder dialogBuilder }) {
+Widget createAppWithButtonThatLaunchesDialog({
+  required WidgetBuilder dialogBuilder
+}) {
   return MaterialApp(
     home: Material(
       child: Center(
diff --git a/packages/flutter/test/cupertino/icon_theme_data_test.dart b/packages/flutter/test/cupertino/icon_theme_data_test.dart
index bd09dfa..082f071 100644
--- a/packages/flutter/test/cupertino/icon_theme_data_test.dart
+++ b/packages/flutter/test/cupertino/icon_theme_data_test.dart
@@ -2,8 +2,6 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-// @dart = 2.8
-
 import 'package:flutter/cupertino.dart';
 import 'package:flutter_test/flutter_test.dart';
 
@@ -11,7 +9,7 @@
   testWidgets('IconTheme.of works', (WidgetTester tester) async {
     const IconThemeData data = IconThemeData(color: Color(0xAAAAAAAA), opacity: 0.5, size: 16.0);
 
-    IconThemeData retrieved;
+    late IconThemeData retrieved;
     await tester.pumpWidget(
       IconTheme(data: data, child: Builder(builder: (BuildContext context) {
         retrieved = IconTheme.of(context);
diff --git a/packages/flutter/test/cupertino/localizations_test.dart b/packages/flutter/test/cupertino/localizations_test.dart
index a3ecf82..e87d290 100644
--- a/packages/flutter/test/cupertino/localizations_test.dart
+++ b/packages/flutter/test/cupertino/localizations_test.dart
@@ -2,8 +2,6 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-// @dart = 2.8
-
 import 'package:flutter/cupertino.dart';
 import 'package:flutter_test/flutter_test.dart';
 
diff --git a/packages/flutter/test/cupertino/nav_bar_test.dart b/packages/flutter/test/cupertino/nav_bar_test.dart
index 035dd3c..7ef0f65 100644
--- a/packages/flutter/test/cupertino/nav_bar_test.dart
+++ b/packages/flutter/test/cupertino/nav_bar_test.dart
@@ -2,8 +2,6 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-// @dart = 2.8
-
 import 'package:flutter/cupertino.dart';
 import 'package:flutter/rendering.dart';
 import 'package:flutter/services.dart';
@@ -394,11 +392,11 @@
         ..sort((Element a, Element b) {
           final RenderParagraph aParagraph = a.renderObject as RenderParagraph;
           final RenderParagraph bParagraph = b.renderObject as RenderParagraph;
-          return aParagraph.text.style.fontSize.compareTo(bParagraph.text.style.fontSize);
+          return aParagraph.text.style!.fontSize!.compareTo(bParagraph.text.style!.fontSize!);
         });
 
     Iterable<double> opacities = titles.map<double>((Element element) {
-      final RenderAnimatedOpacity renderOpacity = element.findAncestorRenderObjectOfType<RenderAnimatedOpacity>();
+      final RenderAnimatedOpacity renderOpacity = element.findAncestorRenderObjectOfType<RenderAnimatedOpacity>()!;
       return renderOpacity.opacity.value;
     });
 
@@ -419,11 +417,11 @@
         ..sort((Element a, Element b) {
           final RenderParagraph aParagraph = a.renderObject as RenderParagraph;
           final RenderParagraph bParagraph = b.renderObject as RenderParagraph;
-          return aParagraph.text.style.fontSize.compareTo(bParagraph.text.style.fontSize);
+          return aParagraph.text.style!.fontSize!.compareTo(bParagraph.text.style!.fontSize!);
         });
 
     opacities = titles.map<double>((Element element) {
-      final RenderAnimatedOpacity renderOpacity = element.findAncestorRenderObjectOfType<RenderAnimatedOpacity>();
+      final RenderAnimatedOpacity renderOpacity = element.findAncestorRenderObjectOfType<RenderAnimatedOpacity>()!;
       return renderOpacity.opacity.value;
     });
 
@@ -531,7 +529,7 @@
     expect(find.text('Different title'), findsOneWidget);
 
     RenderAnimatedOpacity largeTitleOpacity =
-        tester.element(find.text('Title')).findAncestorRenderObjectOfType<RenderAnimatedOpacity>();
+        tester.element(find.text('Title')).findAncestorRenderObjectOfType<RenderAnimatedOpacity>()!;
     // Large title initially visible.
     expect(
       largeTitleOpacity.opacity.value,
@@ -550,7 +548,7 @@
     await tester.pump(const Duration(milliseconds: 300));
 
     largeTitleOpacity =
-        tester.element(find.text('Title')).findAncestorRenderObjectOfType<RenderAnimatedOpacity>();
+        tester.element(find.text('Title')).findAncestorRenderObjectOfType<RenderAnimatedOpacity>()!;
     // Large title no longer visible.
     expect(
       largeTitleOpacity.opacity.value,
@@ -680,7 +678,7 @@
     final BoxDecoration decoration = decoratedBox.decoration as BoxDecoration;
     expect(decoration.border, isNotNull);
 
-    final BorderSide side = decoration.border.bottom;
+    final BorderSide side = decoration.border!.bottom;
     expect(side, isNotNull);
   });
 
@@ -708,7 +706,7 @@
     final BoxDecoration decoration = decoratedBox.decoration as BoxDecoration;
     expect(decoration.border, isNotNull);
 
-    final BorderSide side = decoration.border.bottom;
+    final BorderSide side = decoration.border!.bottom;
     expect(side, isNotNull);
     expect(side.color, const Color(0xFFAABBCC));
   });
@@ -757,7 +755,7 @@
     final BoxDecoration decoration = decoratedBox.decoration as BoxDecoration;
     expect(decoration.border, isNotNull);
 
-    final BorderSide bottom = decoration.border.bottom;
+    final BorderSide bottom = decoration.border!.bottom;
     expect(bottom, isNotNull);
   });
 
@@ -863,10 +861,10 @@
     final BoxDecoration decoration = decoratedBox.decoration as BoxDecoration;
     expect(decoration.border, isNotNull);
 
-    final BorderSide top = decoration.border.top;
+    final BorderSide top = decoration.border!.top;
     expect(top, isNotNull);
     expect(top, BorderSide.none);
-    final BorderSide bottom = decoration.border.bottom;
+    final BorderSide bottom = decoration.border!.bottom;
     expect(bottom, isNotNull);
     expect(bottom.color, const Color(0xFFAABBCC));
   });
@@ -1108,7 +1106,7 @@
       CupertinoApp(
         home: Builder(builder: (BuildContext context) {
           return MediaQuery(
-            data: MediaQuery.of(context).copyWith(textScaleFactor: 99),
+            data: MediaQuery.of(context)!.copyWith(textScaleFactor: 99),
             child: CupertinoPageScaffold(
               child: CustomScrollView(
                 slivers: <Widget>[
@@ -1156,7 +1154,7 @@
       title: 'title',
       builder: (BuildContext context) {
         return MediaQuery(
-          data: MediaQuery.of(context).copyWith(textScaleFactor: 99),
+          data: MediaQuery.of(context)!.copyWith(textScaleFactor: 99),
           child: Container(
             child: const CupertinoPageScaffold(
               child: CustomScrollView(
@@ -1190,14 +1188,17 @@
 }
 
 class _ExpectStyles extends StatelessWidget {
-  const _ExpectStyles({ this.color, this.index });
+  const _ExpectStyles({
+    required this.color,
+    required this.index
+  });
 
   final Color color;
   final int index;
 
   @override
   Widget build(BuildContext context) {
-    final TextStyle style = DefaultTextStyle.of(context).style;
+    final TextStyle style = DefaultTextStyle.of(context).style!;
     expect(style.color, isSameColorAs(color));
     expect(style.fontFamily, '.SF Pro Text');
     expect(style.fontSize, 17.0);
diff --git a/packages/flutter/test/cupertino/nav_bar_transition_test.dart b/packages/flutter/test/cupertino/nav_bar_transition_test.dart
index e214cbd..f7f46b2 100644
--- a/packages/flutter/test/cupertino/nav_bar_transition_test.dart
+++ b/packages/flutter/test/cupertino/nav_bar_transition_test.dart
@@ -2,28 +2,26 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-// @dart = 2.8
-
 import 'package:flutter/cupertino.dart';
 import 'package:flutter/rendering.dart';
 import 'package:flutter_test/flutter_test.dart';
 
 Future<void> startTransitionBetween(
   WidgetTester tester, {
-  Widget from,
-  Widget to,
-  String fromTitle,
-  String toTitle,
+  Widget? from,
+  Widget? to,
+  String? fromTitle,
+  String? toTitle,
   TextDirection textDirection = TextDirection.ltr,
-  CupertinoThemeData theme,
+  CupertinoThemeData? theme,
 }) async {
   await tester.pumpWidget(
     CupertinoApp(
       theme: theme,
-      builder: (BuildContext context, Widget navigator) {
+      builder: (BuildContext context, Widget? navigator) {
         return Directionality(
           textDirection: textDirection,
-          child: navigator,
+          child: navigator!,
         );
       },
       home: const Placeholder(),
@@ -34,7 +32,7 @@
       .state<NavigatorState>(find.byType(Navigator))
       .push(CupertinoPageRoute<void>(
         title: fromTitle,
-        builder: (BuildContext context) => scaffoldForNavBar(from),
+        builder: (BuildContext context) => scaffoldForNavBar(from)!,
       ));
 
   await tester.pump();
@@ -44,16 +42,16 @@
       .state<NavigatorState>(find.byType(Navigator))
       .push(CupertinoPageRoute<void>(
         title: toTitle,
-        builder: (BuildContext context) => scaffoldForNavBar(to),
+        builder: (BuildContext context) => scaffoldForNavBar(to)!,
       ));
 
   await tester.pump();
 }
 
-CupertinoPageScaffold scaffoldForNavBar(Widget navBar) {
+CupertinoPageScaffold? scaffoldForNavBar(Widget? navBar) {
   if (navBar is CupertinoNavigationBar || navBar == null) {
     return CupertinoPageScaffold(
-      navigationBar: navBar as CupertinoNavigationBar ?? const CupertinoNavigationBar(),
+      navigationBar: navBar as CupertinoNavigationBar? ?? const CupertinoNavigationBar(),
       child: const Placeholder(),
     );
   } else if (navBar is CupertinoSliverNavigationBar) {
@@ -175,10 +173,10 @@
     // The transition's stack is ordered. The bottom middle is inserted first.
     final RenderParagraph bottomMiddle =
         tester.renderObject(flying(tester, find.text('Page 1')).first);
-    expect(bottomMiddle.text.style.color, const Color(0xff00050a));
-    expect(bottomMiddle.text.style.fontWeight, FontWeight.w600);
-    expect(bottomMiddle.text.style.fontFamily, '.SF Pro Text');
-    expect(bottomMiddle.text.style.letterSpacing, -0.41);
+    expect(bottomMiddle.text.style!.color, const Color(0xff00050a));
+    expect(bottomMiddle.text.style!.fontWeight, FontWeight.w600);
+    expect(bottomMiddle.text.style!.fontFamily, '.SF Pro Text');
+    expect(bottomMiddle.text.style!.letterSpacing, -0.41);
 
     checkOpacity(
         tester, flying(tester, find.text('Page 1')).first, 0.9004602432250977);
@@ -187,26 +185,26 @@
     // are flipped.
     final RenderParagraph topBackLabel =
         tester.renderObject(flying(tester, find.text('Page 1')).last);
-    expect(topBackLabel.text.style.color, const Color(0xff00050a));
-    expect(topBackLabel.text.style.fontWeight, FontWeight.w600);
-    expect(topBackLabel.text.style.fontFamily, '.SF Pro Text');
-    expect(topBackLabel.text.style.letterSpacing, -0.41);
+    expect(topBackLabel.text.style!.color, const Color(0xff00050a));
+    expect(topBackLabel.text.style!.fontWeight, FontWeight.w600);
+    expect(topBackLabel.text.style!.fontFamily, '.SF Pro Text');
+    expect(topBackLabel.text.style!.letterSpacing, -0.41);
 
     checkOpacity(tester, flying(tester, find.text('Page 1')).last, 0.0);
 
     // Move animation further a bit.
     await tester.pump(const Duration(milliseconds: 200));
-    expect(bottomMiddle.text.style.color, const Color(0xff006de4));
-    expect(bottomMiddle.text.style.fontWeight, FontWeight.w400);
-    expect(bottomMiddle.text.style.fontFamily, '.SF Pro Text');
-    expect(bottomMiddle.text.style.letterSpacing, -0.41);
+    expect(bottomMiddle.text.style!.color, const Color(0xff006de4));
+    expect(bottomMiddle.text.style!.fontWeight, FontWeight.w400);
+    expect(bottomMiddle.text.style!.fontFamily, '.SF Pro Text');
+    expect(bottomMiddle.text.style!.letterSpacing, -0.41);
 
     checkOpacity(tester, flying(tester, find.text('Page 1')).first, 0.0);
 
-    expect(topBackLabel.text.style.color, const Color(0xff006de4));
-    expect(topBackLabel.text.style.fontWeight, FontWeight.w400);
-    expect(topBackLabel.text.style.fontFamily, '.SF Pro Text');
-    expect(topBackLabel.text.style.letterSpacing, -0.41);
+    expect(topBackLabel.text.style!.color, const Color(0xff006de4));
+    expect(topBackLabel.text.style!.fontWeight, FontWeight.w400);
+    expect(topBackLabel.text.style!.fontFamily, '.SF Pro Text');
+    expect(topBackLabel.text.style!.letterSpacing, -0.41);
 
     checkOpacity(
         tester, flying(tester, find.text('Page 1')).last, 0.7630139589309692);
@@ -225,10 +223,10 @@
     // The transition's stack is ordered. The bottom middle is inserted first.
     final RenderParagraph bottomMiddle =
         tester.renderObject(flying(tester, find.text('Page 1')).first);
-    expect(bottomMiddle.text.style.color, const Color(0xFFF4F9FF));
-    expect(bottomMiddle.text.style.fontWeight, FontWeight.w600);
-    expect(bottomMiddle.text.style.fontFamily, '.SF Pro Text');
-    expect(bottomMiddle.text.style.letterSpacing, -0.41);
+    expect(bottomMiddle.text.style!.color, const Color(0xFFF4F9FF));
+    expect(bottomMiddle.text.style!.fontWeight, FontWeight.w600);
+    expect(bottomMiddle.text.style!.fontFamily, '.SF Pro Text');
+    expect(bottomMiddle.text.style!.letterSpacing, -0.41);
 
     checkOpacity(tester, flying(tester, find.text('Page 1')).first, 0.9004602432250977);
 
@@ -236,26 +234,26 @@
     // are flipped.
     final RenderParagraph topBackLabel =
         tester.renderObject(flying(tester, find.text('Page 1')).last);
-    expect(topBackLabel.text.style.color, const Color(0xFFF4F9FF));
-    expect(topBackLabel.text.style.fontWeight, FontWeight.w600);
-    expect(topBackLabel.text.style.fontFamily, '.SF Pro Text');
-    expect(topBackLabel.text.style.letterSpacing, -0.41);
+    expect(topBackLabel.text.style!.color, const Color(0xFFF4F9FF));
+    expect(topBackLabel.text.style!.fontWeight, FontWeight.w600);
+    expect(topBackLabel.text.style!.fontFamily, '.SF Pro Text');
+    expect(topBackLabel.text.style!.letterSpacing, -0.41);
 
     checkOpacity(tester, flying(tester, find.text('Page 1')).last, 0.0);
 
     // Move animation further a bit.
     await tester.pump(const Duration(milliseconds: 200));
-    expect(bottomMiddle.text.style.color, const Color(0xFF2390FF));
-    expect(bottomMiddle.text.style.fontWeight, FontWeight.w400);
-    expect(bottomMiddle.text.style.fontFamily, '.SF Pro Text');
-    expect(bottomMiddle.text.style.letterSpacing, -0.41);
+    expect(bottomMiddle.text.style!.color, const Color(0xFF2390FF));
+    expect(bottomMiddle.text.style!.fontWeight, FontWeight.w400);
+    expect(bottomMiddle.text.style!.fontFamily, '.SF Pro Text');
+    expect(bottomMiddle.text.style!.letterSpacing, -0.41);
 
     checkOpacity(tester, flying(tester, find.text('Page 1')).first, 0.0);
 
-    expect(topBackLabel.text.style.color, const Color(0xFF2390FF));
-    expect(topBackLabel.text.style.fontWeight, FontWeight.w400);
-    expect(topBackLabel.text.style.fontFamily, '.SF Pro Text');
-    expect(topBackLabel.text.style.letterSpacing, -0.41);
+    expect(topBackLabel.text.style!.color, const Color(0xFF2390FF));
+    expect(topBackLabel.text.style!.fontWeight, FontWeight.w400);
+    expect(topBackLabel.text.style!.fontFamily, '.SF Pro Text');
+    expect(topBackLabel.text.style!.letterSpacing, -0.41);
 
     checkOpacity(tester, flying(tester, find.text('Page 1')).last, 0.7630139589309692);
   });
@@ -271,7 +269,7 @@
         .state<NavigatorState>(find.byType(Navigator))
         .push(CupertinoPageRoute<void>(
           title: 'Page 1',
-          builder: (BuildContext context) => scaffoldForNavBar(null),
+          builder: (BuildContext context) => scaffoldForNavBar(null)!,
         ));
 
     await tester.pump();
@@ -282,7 +280,7 @@
         .push(CupertinoPageRoute<void>(
           title: 'Page 2',
           fullscreenDialog: true,
-          builder: (BuildContext context) => scaffoldForNavBar(null),
+          builder: (BuildContext context) => scaffoldForNavBar(null)!,
         ));
 
     await tester.pump();
@@ -328,7 +326,7 @@
       // The transition's stack is ordered. The bottom middle is inserted first.
       final RenderParagraph bottomMiddle =
           tester.renderObject(flying(tester, find.text('Page 1')).first);
-      expect(bottomMiddle.text.style.color, const Color(0xff00050a));
+      expect(bottomMiddle.text.style!.color, const Color(0xff00050a));
       expect(
         tester.getTopLeft(flying(tester, find.text('Page 1')).first),
         const Offset(337.0234375, 13.5),
@@ -338,7 +336,7 @@
       // are flipped.
       final RenderParagraph topBackLabel =
           tester.renderObject(flying(tester, find.text('Page 1')).last);
-      expect(topBackLabel.text.style.color, const Color(0xff00050a));
+      expect(topBackLabel.text.style!.color, const Color(0xff00050a));
       expect(
         tester.getTopLeft(flying(tester, find.text('Page 1')).last),
         const Offset(337.0234375, 13.5),
@@ -373,7 +371,7 @@
       // The transition's stack is ordered. The bottom middle is inserted first.
       final RenderParagraph bottomMiddle =
           tester.renderObject(flying(tester, find.text('Page 1')).first);
-      expect(bottomMiddle.text.style.color, const Color(0xff00050a));
+      expect(bottomMiddle.text.style!.color, const Color(0xff00050a));
       expect(
         tester.getTopLeft(flying(tester, find.text('Page 1')).first),
         const Offset(362.9765625, 13.5),
@@ -383,7 +381,7 @@
       // are flipped.
       final RenderParagraph topBackLabel =
           tester.renderObject(flying(tester, find.text('Page 1')).last);
-      expect(topBackLabel.text.style.color, const Color(0xff00050a));
+      expect(topBackLabel.text.style!.color, const Color(0xff00050a));
       expect(
         tester.getTopLeft(flying(tester, find.text('Page 1')).last),
         const Offset(362.9765625, 13.5),
@@ -584,7 +582,7 @@
         .state<NavigatorState>(find.byType(Navigator))
         .push(CupertinoPageRoute<void>(
           title: 'Page 1',
-          builder: (BuildContext context) => scaffoldForNavBar(null),
+          builder: (BuildContext context) => scaffoldForNavBar(null)!,
         ));
 
     await tester.pump();
@@ -612,10 +610,10 @@
   testWidgets('First appearance of back chevron fades in from the left in RTL', (WidgetTester tester) async {
     await tester.pumpWidget(
       CupertinoApp(
-        builder: (BuildContext context, Widget navigator) {
+        builder: (BuildContext context, Widget? navigator) {
           return Directionality(
             textDirection: TextDirection.rtl,
-            child: navigator,
+            child: navigator!,
           );
         },
         home: scaffoldForNavBar(null),
@@ -626,7 +624,7 @@
         .state<NavigatorState>(find.byType(Navigator))
         .push(CupertinoPageRoute<void>(
           title: 'Page 1',
-          builder: (BuildContext context) => scaffoldForNavBar(null),
+          builder: (BuildContext context) => scaffoldForNavBar(null)!,
         ));
 
     await tester.pump();
@@ -778,7 +776,7 @@
         .state<NavigatorState>(find.byType(Navigator))
         .push(CupertinoPageRoute<void>(
           title: 'Page 3',
-          builder: (BuildContext context) => scaffoldForNavBar(null),
+          builder: (BuildContext context) => scaffoldForNavBar(null)!,
         ));
 
     await tester.pump();
@@ -815,7 +813,7 @@
         .state<NavigatorState>(find.byType(Navigator))
         .push(CupertinoPageRoute<void>(
           title: 'Page 3',
-          builder: (BuildContext context) => scaffoldForNavBar(null),
+          builder: (BuildContext context) => scaffoldForNavBar(null)!,
         ));
 
     await tester.pump();
@@ -931,30 +929,30 @@
     // The transition's stack is ordered. The bottom large title is inserted first.
     final RenderParagraph bottomLargeTitle =
         tester.renderObject(flying(tester, find.text('Page 1')).first);
-    expect(bottomLargeTitle.text.style.color, const Color(0xff00050a));
-    expect(bottomLargeTitle.text.style.fontWeight, FontWeight.w700);
-    expect(bottomLargeTitle.text.style.fontFamily, '.SF Pro Display');
-    expect(bottomLargeTitle.text.style.letterSpacing, moreOrLessEquals(0.374765625));
+    expect(bottomLargeTitle.text.style!.color, const Color(0xff00050a));
+    expect(bottomLargeTitle.text.style!.fontWeight, FontWeight.w700);
+    expect(bottomLargeTitle.text.style!.fontFamily, '.SF Pro Display');
+    expect(bottomLargeTitle.text.style!.letterSpacing, moreOrLessEquals(0.374765625));
 
     // The top back label is styled exactly the same way.
     final RenderParagraph topBackLabel =
         tester.renderObject(flying(tester, find.text('Page 1')).last);
-    expect(topBackLabel.text.style.color, const Color(0xff00050a));
-    expect(topBackLabel.text.style.fontWeight, FontWeight.w700);
-    expect(topBackLabel.text.style.fontFamily, '.SF Pro Display');
-    expect(topBackLabel.text.style.letterSpacing, moreOrLessEquals(0.374765625));
+    expect(topBackLabel.text.style!.color, const Color(0xff00050a));
+    expect(topBackLabel.text.style!.fontWeight, FontWeight.w700);
+    expect(topBackLabel.text.style!.fontFamily, '.SF Pro Display');
+    expect(topBackLabel.text.style!.letterSpacing, moreOrLessEquals(0.374765625));
 
     // Move animation further a bit.
     await tester.pump(const Duration(milliseconds: 200));
-    expect(bottomLargeTitle.text.style.color, const Color(0xff006de4));
-    expect(bottomLargeTitle.text.style.fontWeight, FontWeight.w400);
-    expect(bottomLargeTitle.text.style.fontFamily, '.SF Pro Text');
-    expect(bottomLargeTitle.text.style.letterSpacing, moreOrLessEquals(-0.32379547566175454));
+    expect(bottomLargeTitle.text.style!.color, const Color(0xff006de4));
+    expect(bottomLargeTitle.text.style!.fontWeight, FontWeight.w400);
+    expect(bottomLargeTitle.text.style!.fontFamily, '.SF Pro Text');
+    expect(bottomLargeTitle.text.style!.letterSpacing, moreOrLessEquals(-0.32379547566175454));
 
-    expect(topBackLabel.text.style.color, const Color(0xff006de4));
-    expect(topBackLabel.text.style.fontWeight, FontWeight.w400);
-    expect(topBackLabel.text.style.fontFamily, '.SF Pro Text');
-    expect(topBackLabel.text.style.letterSpacing, moreOrLessEquals(-0.32379547566175454));
+    expect(topBackLabel.text.style!.color, const Color(0xff006de4));
+    expect(topBackLabel.text.style!.fontWeight, FontWeight.w400);
+    expect(topBackLabel.text.style!.fontFamily, '.SF Pro Text');
+    expect(topBackLabel.text.style!.letterSpacing, moreOrLessEquals(-0.32379547566175454));
   });
 
   testWidgets('Top middle fades in and slides in from the right', (WidgetTester tester) async {
diff --git a/packages/flutter/test/cupertino/page_test.dart b/packages/flutter/test/cupertino/page_test.dart
index fe0f4d4..aa069ee 100644
--- a/packages/flutter/test/cupertino/page_test.dart
+++ b/packages/flutter/test/cupertino/page_test.dart
@@ -2,8 +2,6 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-// @dart = 2.8
-
 import 'package:flutter/cupertino.dart';
 import 'package:flutter_test/flutter_test.dart';
 
@@ -276,10 +274,10 @@
   testWidgets('test edge swipes work with media query padding (LTR)', (WidgetTester tester) async {
     await tester.pumpWidget(
       CupertinoApp(
-        builder: (BuildContext context, Widget navigator) {
+        builder: (BuildContext context, Widget? navigator) {
           return MediaQuery(
             data: const MediaQueryData(padding: EdgeInsets.only(left: 40)),
-            child: navigator,
+            child: navigator!,
           );
         },
         home: const Placeholder(),
@@ -320,12 +318,12 @@
   testWidgets('test edge swipes work with media query padding (RLT)', (WidgetTester tester) async {
     await tester.pumpWidget(
       CupertinoApp(
-        builder: (BuildContext context, Widget navigator) {
+        builder: (BuildContext context, Widget? navigator) {
           return Directionality(
             textDirection: TextDirection.rtl,
             child: MediaQuery(
               data: const MediaQueryData(padding: EdgeInsets.only(right: 40)),
-              child: navigator,
+              child: navigator!,
             ),
           );
         },
@@ -471,7 +469,7 @@
     expect(find.text('subpage'), findsOneWidget);
     expect(find.text('home'), findsNothing);
 
-    navigator.currentState.pop();
+    navigator.currentState!.pop();
     await tester.pump();
 
     expect(find.text('subpage'), findsOneWidget);
@@ -498,14 +496,14 @@
 class KeepsStateTestWidget extends StatefulWidget {
   const KeepsStateTestWidget({this.navigatorKey});
 
-  final Key navigatorKey;
+  final Key? navigatorKey;
 
   @override
   State<KeepsStateTestWidget> createState() => _KeepsStateTestWidgetState();
 }
 
 class _KeepsStateTestWidgetState extends State<KeepsStateTestWidget> {
-  String _subpage = 'subpage';
+  String? _subpage = 'subpage';
 
   @override
   Widget build(BuildContext context) {
@@ -514,7 +512,7 @@
         key: widget.navigatorKey,
         pages: <Page<void>>[
           const CupertinoPage<void>(child: Text('home')),
-          if (_subpage != null) CupertinoPage<void>(child: Text(_subpage)),
+          if (_subpage != null) CupertinoPage<void>(child: Text(_subpage!)),
         ],
         onPopPage: (Route<dynamic> route, dynamic result) {
           if (!route.didPop(result)) {
diff --git a/packages/flutter/test/cupertino/picker_test.dart b/packages/flutter/test/cupertino/picker_test.dart
index bb7d7a8..54d76a4 100644
--- a/packages/flutter/test/cupertino/picker_test.dart
+++ b/packages/flutter/test/cupertino/picker_test.dart
@@ -2,8 +2,6 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-// @dart = 2.8
-
 import 'package:flutter/cupertino.dart';
 import 'package:flutter/foundation.dart';
 import 'package:flutter/rendering.dart';
@@ -39,8 +37,8 @@
 
     final RenderParagraph paragraph = tester.renderObject(find.text('1'));
 
-    expect(paragraph.text.style.color, isSameColorAs(CupertinoColors.black));
-    expect(paragraph.text.style.copyWith(color: CupertinoColors.black), const TextStyle(
+    expect(paragraph.text.style!.color, isSameColorAs(CupertinoColors.black));
+    expect(paragraph.text.style!.copyWith(color: CupertinoColors.black), const TextStyle(
       inherit: false,
       fontFamily: '.SF Pro Display',
       fontSize: 21.0,