Migrate some material tests to nnbd (#67477)

diff --git a/packages/flutter/lib/src/material/popup_menu.dart b/packages/flutter/lib/src/material/popup_menu.dart
index 8891a4e..c86d124 100644
--- a/packages/flutter/lib/src/material/popup_menu.dart
+++ b/packages/flutter/lib/src/material/popup_menu.dart
@@ -96,8 +96,7 @@
 ///  * [showMenu], a method to dynamically show a popup menu at a given location.
 ///  * [PopupMenuButton], an [IconButton] that automatically shows a menu when
 ///    it is tapped.
-// ignore: prefer_void_to_null, https://github.com/dart-lang/sdk/issues/34416
-class PopupMenuDivider extends PopupMenuEntry<Null> {
+class PopupMenuDivider extends PopupMenuEntry<Never> {
   /// Creates a horizontal divider for a popup menu.
   ///
   /// By default, the divider has a height of 16 logical pixels.
diff --git a/packages/flutter/test/material/navigation_rail_test.dart b/packages/flutter/test/material/navigation_rail_test.dart
index d85dfb2..11e7253 100644
--- a/packages/flutter/test/material/navigation_rail_test.dart
+++ b/packages/flutter/test/material/navigation_rail_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/material.dart';
 import 'package:flutter/rendering.dart';
 import 'package:flutter_test/flutter_test.dart';
@@ -26,8 +24,8 @@
       ),
     );
 
-    final TextStyle actualSelectedTextStyle = tester.renderObject<RenderParagraph>(find.text('Abc')).text.style;
-    final TextStyle actualUnselectedTextStyle = tester.renderObject<RenderParagraph>(find.text('Def')).text.style;
+    final TextStyle actualSelectedTextStyle = tester.renderObject<RenderParagraph>(find.text('Abc')).text.style!;
+    final TextStyle actualUnselectedTextStyle = tester.renderObject<RenderParagraph>(find.text('Def')).text.style!;
     expect(actualSelectedTextStyle.fontSize, equals(selectedTextStyle.fontSize));
     expect(actualSelectedTextStyle.fontWeight, equals(selectedTextStyle.fontWeight));
     expect(actualUnselectedTextStyle.fontSize, equals(actualUnselectedTextStyle.fontSize));
@@ -1416,7 +1414,7 @@
 
   testWidgets('Extended rail animates the width and labels appear - [textDirection]=LTR', (WidgetTester tester) async {
     bool extended = false;
-    StateSetter stateSetter;
+    late StateSetter stateSetter;
 
     await tester.pumpWidget(
       MaterialApp(
@@ -1553,7 +1551,7 @@
 
   testWidgets('Extended rail animates the width and labels appear - [textDirection]=RTL', (WidgetTester tester) async {
     bool extended = false;
-    StateSetter stateSetter;
+    late StateSetter stateSetter;
 
     await tester.pumpWidget(
       MaterialApp(
@@ -1697,7 +1695,7 @@
 
   testWidgets('Extended rail gets wider with longer labels are larger text scale', (WidgetTester tester) async {
     bool extended = false;
-    StateSetter stateSetter;
+    late StateSetter stateSetter;
 
     await tester.pumpWidget(
       MaterialApp(
@@ -1708,7 +1706,7 @@
               body: Row(
                 children: <Widget>[
                   MediaQuery(
-                    data: MediaQuery.of(context).copyWith(textScaleFactor: 3.0),
+                    data: MediaQuery.of(context)!.copyWith(textScaleFactor: 3.0),
                     child: NavigationRail(
                       selectedIndex: 0,
                       destinations: const <NavigationRailDestination>[
@@ -1755,7 +1753,7 @@
 
   testWidgets('Extended rail final width can be changed', (WidgetTester tester) async {
     bool extended = false;
-    StateSetter stateSetter;
+    late StateSetter stateSetter;
 
     await tester.pumpWidget(
       MaterialApp(
@@ -1797,7 +1795,7 @@
   /// Regression test for https://github.com/flutter/flutter/issues/65657
   testWidgets('Extended rail transition does not jump from the beginning', (WidgetTester tester) async {
     bool extended = false;
-    StateSetter stateSetter;
+    late StateSetter stateSetter;
 
     await tester.pumpWidget(
       MaterialApp(
@@ -1855,8 +1853,8 @@
 
   testWidgets('Extended rail animation can be consumed', (WidgetTester tester) async {
     bool extended = false;
-    Animation<double> animation;
-    StateSetter stateSetter;
+    late Animation<double> animation;
+    late StateSetter stateSetter;
 
     await tester.pumpWidget(
       MaterialApp(
@@ -1899,7 +1897,7 @@
   });
 
   testWidgets('onDestinationSelected is called', (WidgetTester tester) async {
-    int selectedIndex;
+    late int selectedIndex;
 
     await _pumpNavigationRail(
       tester,
@@ -2106,14 +2104,14 @@
 Future<void> _pumpNavigationRail(
   WidgetTester tester, {
   double textScaleFactor = 1.0,
-  NavigationRail navigationRail,
+  required NavigationRail navigationRail,
 }) async {
   await tester.pumpWidget(
     MaterialApp(
       home: Builder(
         builder: (BuildContext context) {
           return MediaQuery(
-            data: MediaQuery.of(context).copyWith(textScaleFactor: textScaleFactor),
+            data: MediaQuery.of(context)!.copyWith(textScaleFactor: textScaleFactor),
             child: Scaffold(
               body: Row(
                 children: <Widget>[
@@ -2131,7 +2129,7 @@
   );
 }
 
-Future<void> _pumpLocalizedTestRail(WidgetTester tester, { NavigationRailLabelType labelType, bool extended = false }) async {
+Future<void> _pumpLocalizedTestRail(WidgetTester tester, { NavigationRailLabelType? labelType, bool extended = false }) async {
   await tester.pumpWidget(
     Localizations(
       locale: const Locale('en', 'US'),
@@ -2184,7 +2182,7 @@
       of: find.byIcon(icon),
       matching: find.byType(RichText),
     ),
-  ).text.style;
+  ).text.style!;
 }
 
 Finder _opacityAboveLabel(String text) {
@@ -2213,4 +2211,4 @@
       matching: find.byType(Material),
     ),
   );
-}
\ No newline at end of file
+}
diff --git a/packages/flutter/test/material/navigation_rail_theme_test.dart b/packages/flutter/test/material/navigation_rail_theme_test.dart
index 2787bb3..72dc6b1 100644
--- a/packages/flutter/test/material/navigation_rail_theme_test.dart
+++ b/packages/flutter/test/material/navigation_rail_theme_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/foundation.dart';
 import 'package:flutter/material.dart';
 import 'package:flutter/rendering.dart';
@@ -271,7 +269,7 @@
       of: find.text('Abc'),
       matching: find.byType(RichText),
     ),
-  ).text.style;
+  ).text.style!;
 }
 
 TextStyle _unselectedLabelStyle(WidgetTester tester) {
@@ -280,7 +278,7 @@
       of: find.text('Def'),
       matching: find.byType(RichText),
     ),
-  ).text.style;
+  ).text.style!;
 }
 
 Align _destinationsAlign(WidgetTester tester) {
diff --git a/packages/flutter/test/material/outlined_button_test.dart b/packages/flutter/test/material/outlined_button_test.dart
index 80be500..8c315a1 100644
--- a/packages/flutter/test/material/outlined_button_test.dart
+++ b/packages/flutter/test/material/outlined_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/gestures.dart';
 import 'package:flutter/material.dart';
 import 'package:flutter_test/flutter_test.dart';
@@ -49,10 +47,10 @@
       ),
       borderRadius: BorderRadius.circular(4.0),
     ));
-    expect(material.textStyle.color, colorScheme.primary);
-    expect(material.textStyle.fontFamily, 'Roboto');
-    expect(material.textStyle.fontSize, 14);
-    expect(material.textStyle.fontWeight, FontWeight.w500);
+    expect(material.textStyle!.color, colorScheme.primary);
+    expect(material.textStyle!.fontFamily, 'Roboto');
+    expect(material.textStyle!.fontSize, 14);
+    expect(material.textStyle!.fontWeight, FontWeight.w500);
     expect(material.type, MaterialType.button);
 
     final Offset center = tester.getCenter(find.byType(OutlinedButton));
@@ -80,10 +78,10 @@
       ),
       borderRadius: BorderRadius.circular(4.0),
     ));
-    expect(material.textStyle.color, colorScheme.primary);
-    expect(material.textStyle.fontFamily, 'Roboto');
-    expect(material.textStyle.fontSize, 14);
-    expect(material.textStyle.fontWeight, FontWeight.w500);
+    expect(material.textStyle!.color, colorScheme.primary);
+    expect(material.textStyle!.fontFamily, 'Roboto');
+    expect(material.textStyle!.fontSize, 14);
+    expect(material.textStyle!.fontWeight, FontWeight.w500);
     expect(material.type, MaterialType.button);
 
     // Disabled OutlinedButton
@@ -114,17 +112,17 @@
       ),
       borderRadius: BorderRadius.circular(4.0),
     ));
-    expect(material.textStyle.color, colorScheme.onSurface.withOpacity(0.38));
-    expect(material.textStyle.fontFamily, 'Roboto');
-    expect(material.textStyle.fontSize, 14);
-    expect(material.textStyle.fontWeight, FontWeight.w500);
+    expect(material.textStyle!.color, colorScheme.onSurface.withOpacity(0.38));
+    expect(material.textStyle!.fontFamily, 'Roboto');
+    expect(material.textStyle!.fontSize, 14);
+    expect(material.textStyle!.fontWeight, FontWeight.w500);
     expect(material.type, MaterialType.button);
   });
 
   testWidgets('Does OutlinedButton work with hover', (WidgetTester tester) async {
     const Color hoverColor = Color(0xff001122);
 
-    Color getOverlayColor(Set<MaterialState> states) {
+    Color? getOverlayColor(Set<MaterialState> states) {
       return states.contains(MaterialState.hovered) ? hoverColor : null;
     }
 
@@ -133,7 +131,7 @@
         textDirection: TextDirection.ltr,
         child: OutlinedButton(
           style: ButtonStyle(
-            overlayColor: MaterialStateProperty.resolveWith<Color>(getOverlayColor),
+            overlayColor: MaterialStateProperty.resolveWith<Color?>(getOverlayColor),
           ),
           onPressed: () { },
           child: const Text('button'),
@@ -154,7 +152,7 @@
   testWidgets('Does OutlinedButton work with focus', (WidgetTester tester) async {
     const Color focusColor = Color(0xff001122);
 
-    Color getOverlayColor(Set<MaterialState> states) {
+    Color? getOverlayColor(Set<MaterialState> states) {
       return states.contains(MaterialState.focused) ? focusColor : null;
     }
 
@@ -164,7 +162,7 @@
         textDirection: TextDirection.ltr,
         child: OutlinedButton(
           style: ButtonStyle(
-            overlayColor: MaterialStateProperty.resolveWith<Color>(getOverlayColor),
+            overlayColor: MaterialStateProperty.resolveWith<Color?>(getOverlayColor),
           ),
           focusNode: focusNode,
           onPressed: () { },
@@ -184,7 +182,7 @@
   testWidgets('Does OutlinedButton work with autofocus', (WidgetTester tester) async {
     const Color focusColor = Color(0xff001122);
 
-    Color getOverlayColor(Set<MaterialState> states) {
+    Color? getOverlayColor(Set<MaterialState> states) {
       return states.contains(MaterialState.focused) ? focusColor : null;
     }
 
@@ -195,7 +193,7 @@
         child: OutlinedButton(
           autofocus: true,
           style: ButtonStyle(
-            overlayColor: MaterialStateProperty.resolveWith<Color>(getOverlayColor),
+            overlayColor: MaterialStateProperty.resolveWith<Color?>(getOverlayColor),
           ),
           focusNode: focusNode,
           onPressed: () { },
@@ -268,9 +266,9 @@
         MaterialState.focused,
       };
       if (states.any(interactiveStates.contains)) {
-        return Colors.blue[900];
+        return Colors.blue[900]!;
       }
-      return Colors.blue[800];
+      return Colors.blue[800]!;
     }
 
     await tester.pumpWidget(
@@ -368,7 +366,7 @@
     );
 
     Color textColor() {
-      return tester.renderObject<RenderParagraph>(find.text('OutlinedButton')).text.style.color;
+      return tester.renderObject<RenderParagraph>(find.text('OutlinedButton')).text.style!.color!;
     }
 
     // Default, not disabled.
@@ -438,7 +436,7 @@
       ),
     );
 
-    Color iconColor() => _iconStyle(tester, Icons.add).color;
+    Color iconColor() => _iconStyle(tester, Icons.add).color!;
     // Default, not disabled.
     expect(iconColor(), equals(defaultColor));
 
@@ -535,7 +533,7 @@
     bool wasPressed;
     Finder outlinedButton;
 
-    Widget buildFrame({ VoidCallback onPressed, VoidCallback onLongPress }) {
+    Widget buildFrame({ VoidCallback? onPressed, VoidCallback? onLongPress }) {
       return Directionality(
         textDirection: TextDirection.ltr,
         child: OutlinedButton(
@@ -575,7 +573,7 @@
   });
 
   testWidgets("Outline button doesn't crash if disabled during a gesture", (WidgetTester tester) async {
-    Widget buildFrame(VoidCallback onPressed) {
+    Widget buildFrame(VoidCallback? onPressed) {
       return Directionality(
         textDirection: TextDirection.ltr,
         child: Theme(
@@ -600,7 +598,7 @@
     const BorderSide enabledBorderSide = BorderSide(color: Color(0xFFFF00FF), width: 4);
     const BorderSide pressedBorderSide = BorderSide(color: Color(0xFF0000FF), width: 5);
 
-    Widget buildFrame({ VoidCallback onPressed }) {
+    Widget buildFrame({ VoidCallback? onPressed }) {
       return Directionality(
         textDirection: TextDirection.ltr,
         child: Theme(
@@ -946,7 +944,7 @@
 
     const List<double> textScaleFactorOptions = <double>[0.5, 1.0, 1.25, 1.5, 2.0, 2.5, 3.0, 4.0];
     const List<TextDirection> textDirectionOptions = <TextDirection>[TextDirection.ltr, TextDirection.rtl];
-    const List<Widget> iconOptions = <Widget>[null, Icon(Icons.add, size: 18, key: iconKey)];
+    const List<Widget?> iconOptions = <Widget?>[null, Icon(Icons.add, size: 18, key: iconKey)];
 
     // Expected values for each textScaleFactor.
     final Map<double, double> paddingVertical = <double, double>{
@@ -986,7 +984,7 @@
     }
 
     /// Computes the padding between two [Rect]s, one inside the other.
-    EdgeInsets paddingBetween({ Rect parent, Rect child }) {
+    EdgeInsets paddingBetween({ required Rect parent, required Rect child }) {
       assert (parent.intersect(child) == child);
       return EdgeInsets.fromLTRB(
         child.left - parent.left,
@@ -998,7 +996,7 @@
 
     for (final double textScaleFactor in textScaleFactorOptions) {
       for (final TextDirection textDirection in textDirectionOptions) {
-        for (final Widget icon in iconOptions) {
+        for (final Widget? icon in iconOptions) {
           final String testName = 'OutlinedButton'
             ', text scale $textScaleFactor'
             '${icon != null ? ", with icon" : ""}'
@@ -1011,7 +1009,7 @@
                 home: Builder(
                   builder: (BuildContext context) {
                     return MediaQuery(
-                      data: MediaQuery.of(context).copyWith(
+                      data: MediaQuery.of(context)!.copyWith(
                         textScaleFactor: textScaleFactor,
                       ),
                       child: Directionality(
@@ -1050,9 +1048,9 @@
 
             // Compute expected padding, and check.
 
-            final double expectedPaddingTop = paddingVertical[textScaleFactor];
-            final double expectedPaddingBottom = paddingVertical[textScaleFactor];
-            final double expectedPaddingStart = paddingHorizontal[textScaleFactor];
+            final double expectedPaddingTop = paddingVertical[textScaleFactor]!;
+            final double expectedPaddingBottom = paddingVertical[textScaleFactor]!;
+            final double expectedPaddingStart = paddingHorizontal[textScaleFactor]!;
             final double expectedPaddingEnd = expectedPaddingStart;
 
             final EdgeInsets expectedPadding = EdgeInsetsDirectional.fromSTEB(
@@ -1069,9 +1067,9 @@
 
             final RenderBox labelRenderBox = tester.renderObject<RenderBox>(find.byKey(labelKey));
             final Rect labelBounds = globalBounds(labelRenderBox);
-            final RenderBox iconRenderBox = icon == null ? null : tester.renderObject<RenderBox>(find.byKey(iconKey));
-            final Rect iconBounds = icon == null ? null : globalBounds(iconRenderBox);
-            final Rect childBounds = icon == null ? labelBounds : labelBounds.expandToInclude(iconBounds);
+            final RenderBox? iconRenderBox = icon == null ? null : tester.renderObject<RenderBox>(find.byKey(iconKey));
+            final Rect? iconBounds = icon == null ? null : globalBounds(iconRenderBox!);
+            final Rect childBounds = icon == null ? labelBounds : labelBounds.expandToInclude(iconBounds!);
 
             // We measure the `InkResponse` descendant of the button
             // element, because the button has a larger `RenderBox`
@@ -1120,8 +1118,8 @@
             // Check the gap between the icon and the label
             if (icon != null) {
               final double gapWidth = textDirection == TextDirection.ltr
-                ? labelBounds.left - iconBounds.right
-                : iconBounds.left - labelBounds.right;
+                ? labelBounds.left - iconBounds!.right
+                : iconBounds!.left - labelBounds.right;
               expect(gapWidth, paddingWithIconGap[textScaleFactor]);
             }
 
@@ -1150,7 +1148,7 @@
         home: Builder(
           builder: (BuildContext context) {
             return MediaQuery(
-              data: MediaQuery.of(context).copyWith(
+              data: MediaQuery.of(context)!.copyWith(
                 textScaleFactor: 2,
               ),
               child: Scaffold(
@@ -1180,24 +1178,24 @@
 
 PhysicalModelLayer _findPhysicalLayer(Element element) {
   expect(element, isNotNull);
-  RenderObject object = element.renderObject;
+  RenderObject? object = element.renderObject;
   while (object != null && object is! RenderRepaintBoundary && object is! RenderView) {
     object = object.parent as RenderObject;
   }
-  expect(object.debugLayer, isNotNull);
-  expect(object.debugLayer.firstChild, isA<PhysicalModelLayer>());
-  final PhysicalModelLayer layer = object.debugLayer.firstChild as PhysicalModelLayer;
-  final Layer child = layer.firstChild;
+  expect(object!.debugLayer, isNotNull);
+  expect(object.debugLayer!.firstChild, isA<PhysicalModelLayer>());
+  final PhysicalModelLayer layer = object.debugLayer!.firstChild as PhysicalModelLayer;
+  final Layer child = layer.firstChild!;
   return child is PhysicalModelLayer ? child : layer;
 }
 
-void _checkPhysicalLayer(Element element, Color expectedColor, { Path clipPath, Rect clipRect }) {
+void _checkPhysicalLayer(Element element, Color expectedColor, { Path? clipPath, Rect? clipRect }) {
   final PhysicalModelLayer expectedLayer = _findPhysicalLayer(element);
   expect(expectedLayer.elevation, 0.0);
   expect(expectedLayer.color, expectedColor);
   if (clipPath != null) {
     expect(clipRect, isNotNull);
-    expect(expectedLayer.clipPath, coversSameAreaAs(clipPath, areaToCompare: clipRect.inflate(10.0)));
+    expect(expectedLayer.clipPath, coversSameAreaAs(clipPath, areaToCompare: clipRect!.inflate(10.0)));
   }
 }
 
@@ -1205,5 +1203,5 @@
   final RichText iconRichText = tester.widget<RichText>(
     find.descendant(of: find.byIcon(icon), matching: find.byType(RichText)),
   );
-  return iconRichText.text.style;
+  return iconRichText.text.style!;
 }
diff --git a/packages/flutter/test/material/outlined_button_theme_test.dart b/packages/flutter/test/material/outlined_button_theme_test.dart
index dde81e7..fb1ff3b 100644
--- a/packages/flutter/test/material/outlined_button_theme_test.dart
+++ b/packages/flutter/test/material/outlined_button_theme_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/material.dart';
 import 'package:flutter/rendering.dart';
 import 'package:flutter_test/flutter_test.dart';
@@ -40,10 +38,10 @@
       side: BorderSide(width: 1, color: colorScheme.onSurface.withOpacity(0.12)),
       borderRadius: BorderRadius.circular(4.0),
     ));
-    expect(material.textStyle.color, colorScheme.primary);
-    expect(material.textStyle.fontFamily, 'Roboto');
-    expect(material.textStyle.fontSize, 14);
-    expect(material.textStyle.fontWeight, FontWeight.w500);
+    expect(material.textStyle!.color, colorScheme.primary);
+    expect(material.textStyle!.fontFamily, 'Roboto');
+    expect(material.textStyle!.fontSize, 14);
+    expect(material.textStyle!.fontWeight, FontWeight.w500);
   });
 
   group('[Theme, TextTheme, OutlinedButton style overrides]', () {
@@ -81,7 +79,7 @@
       enableFeedback: enableFeedback,
     );
 
-    Widget buildFrame({ ButtonStyle buttonStyle, ButtonStyle themeStyle, ButtonStyle overallStyle }) {
+    Widget buildFrame({ ButtonStyle? buttonStyle, ButtonStyle? themeStyle, ButtonStyle? overallStyle }) {
       final Widget child = Builder(
         builder: (BuildContext context) {
           return OutlinedButton(
@@ -126,15 +124,15 @@
     void checkButton(WidgetTester tester) {
       final Material material = tester.widget<Material>(findMaterial);
       final InkWell inkWell = tester.widget<InkWell>(findInkWell);
-      expect(material.textStyle.color, primaryColor);
-      expect(material.textStyle.fontSize, 12);
+      expect(material.textStyle!.color, primaryColor);
+      expect(material.textStyle!.fontSize, 12);
       expect(material.color, backgroundColor);
       expect(material.shadowColor, shadowColor);
       expect(material.elevation, elevation);
-      expect(MaterialStateProperty.resolveAs<MouseCursor>(inkWell.mouseCursor, enabled), enabledMouseCursor);
-      expect(MaterialStateProperty.resolveAs<MouseCursor>(inkWell.mouseCursor, disabled), disabledMouseCursor);
-      expect(inkWell.overlayColor.resolve(hovered), primaryColor.withOpacity(0.04));
-      expect(inkWell.overlayColor.resolve(focused), primaryColor.withOpacity(0.12));
+      expect(MaterialStateProperty.resolveAs<MouseCursor?>(inkWell.mouseCursor, enabled), enabledMouseCursor);
+      expect(MaterialStateProperty.resolveAs<MouseCursor?>(inkWell.mouseCursor, disabled), disabledMouseCursor);
+      expect(inkWell.overlayColor!.resolve(hovered), primaryColor.withOpacity(0.04));
+      expect(inkWell.overlayColor!.resolve(focused), primaryColor.withOpacity(0.12));
       expect(inkWell.enableFeedback, enableFeedback);
       expect(material.borderRadius, null);
       expect(material.shape, shape);
@@ -186,7 +184,7 @@
     const Color shadowColor = Color(0xff000001);
     const Color overiddenColor = Color(0xff000002);
 
-    Widget buildFrame({ Color overallShadowColor, Color themeShadowColor, Color shadowColor }) {
+    Widget buildFrame({ Color? overallShadowColor, Color? themeShadowColor, Color? shadowColor }) {
       return MaterialApp(
         theme: ThemeData.from(colorScheme: colorScheme).copyWith(
           shadowColor: overallShadowColor,
diff --git a/packages/flutter/test/material/page_selector_test.dart b/packages/flutter/test/material/page_selector_test.dart
index 2eb3727..8fd5771 100644
--- a/packages/flutter/test/material/page_selector_test.dart
+++ b/packages/flutter/test/material/page_selector_test.dart
@@ -2,15 +2,13 @@
 // 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/material.dart';
 
 const Color kSelectedColor = Color(0xFF00FF00);
 const Color kUnselectedColor = Colors.transparent;
 
-Widget buildFrame(TabController tabController, { Color color, Color selectedColor, double indicatorSize = 12.0 }) {
+Widget buildFrame(TabController tabController, { Color? color, Color? selectedColor, double indicatorSize = 12.0 }) {
   return Directionality(
     textDirection: TextDirection.ltr,
     child: Theme(
diff --git a/packages/flutter/test/material/page_test.dart b/packages/flutter/test/material/page_test.dart
index d9861b6..504e24d 100644
--- a/packages/flutter/test/material/page_test.dart
+++ b/packages/flutter/test/material/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/foundation.dart';
 import 'package:flutter/material.dart';
 import 'package:flutter/cupertino.dart' show CupertinoPageRoute;
@@ -32,7 +30,7 @@
     await tester.pump(const Duration(milliseconds: 1));
 
     FadeTransition widget2Opacity =
-        tester.element(find.text('Page 2')).findAncestorWidgetOfExactType<FadeTransition>();
+        tester.element(find.text('Page 2')).findAncestorWidgetOfExactType<FadeTransition>()!;
     Offset widget2TopLeft = tester.getTopLeft(find.text('Page 2'));
     final Size widget2Size = tester.getSize(find.text('Page 2'));
 
@@ -56,7 +54,7 @@
     await tester.pump(const Duration(milliseconds: 1));
 
     widget2Opacity =
-        tester.element(find.text('Page 2')).findAncestorWidgetOfExactType<FadeTransition>();
+        tester.element(find.text('Page 2')).findAncestorWidgetOfExactType<FadeTransition>()!;
     widget2TopLeft = tester.getTopLeft(find.text('Page 2'));
 
     // Page 2 starts to move down.
@@ -96,7 +94,7 @@
     Offset widget1TransientTopLeft = tester.getTopLeft(find.text('Page 1'));
     Offset widget2TopLeft = tester.getTopLeft(find.text('Page 2'));
     final RenderDecoratedBox box = tester.element(find.byKey(page2Key))
-        .findAncestorRenderObjectOfType<RenderDecoratedBox>();
+        .findAncestorRenderObjectOfType<RenderDecoratedBox>()!;
 
     // Page 1 is moving to the left.
     expect(widget1TransientTopLeft.dx < widget1InitialTopLeft.dx, true);
@@ -284,7 +282,7 @@
       '/': (BuildContext context) => Material(
         child: TextButton(
           child: const Text('PUSH'),
-          onPressed: () { Navigator.of(context).pushNamed('/b'); },
+          onPressed: () { Navigator.of(context)!.pushNamed('/b'); },
         ),
       ),
       '/b': (BuildContext context) => Container(child: const Text('HELLO')),
@@ -311,7 +309,7 @@
     final Offset helloPosition2 = tester.getCenter(find.text('HELLO'));
     expect(helloPosition1.dx, lessThan(helloPosition2.dx));
     expect(helloPosition1.dy, helloPosition2.dy);
-    expect(Theme.of(tester.element(find.text('HELLO'))).platform, TargetPlatform.iOS);
+    expect(Theme.of(tester.element(find.text('HELLO')))!.platform, TargetPlatform.iOS);
     await tester.pumpWidget(
       MaterialApp(
         theme: ThemeData(platform: TargetPlatform.android),
@@ -327,7 +325,7 @@
     //     frame in which the theme animation ends.
     //  3. End all the other animations.
     expect(await tester.pumpAndSettle(const Duration(minutes: 1)), 2);
-    expect(Theme.of(tester.element(find.text('HELLO'))).platform, TargetPlatform.android);
+    expect(Theme.of(tester.element(find.text('HELLO')))!.platform, TargetPlatform.android);
     final Offset helloPosition3 = tester.getCenter(find.text('HELLO'));
     expect(helloPosition3, helloPosition2);
     expect(find.text('PUSH'), findsOneWidget);
@@ -367,7 +365,7 @@
     final Offset helloPosition6 = tester.getCenter(find.text('HELLO'));
     expect(helloPosition5.dx, lessThan(helloPosition6.dx));
     expect(helloPosition5.dy, helloPosition6.dy);
-    expect(Theme.of(tester.element(find.text('HELLO'))).platform, TargetPlatform.macOS);
+    expect(Theme.of(tester.element(find.text('HELLO')))!.platform, TargetPlatform.macOS);
   });
 
   testWidgets('test no back gesture on fullscreen dialogs', (WidgetTester tester) async {
@@ -481,30 +479,6 @@
     expect(widget1InitialTopLeft == widget1TransientTopLeft, true);
   }, variant: const TargetPlatformVariant(<TargetPlatform>{ TargetPlatform.iOS,  TargetPlatform.macOS }));
 
-  testWidgets('throws when builder returns null', (WidgetTester tester) async {
-    await tester.pumpWidget(const MaterialApp(
-      home: Text('Home'),
-    ));
-    // No exceptions yet.
-    expect(tester.takeException(), isNull);
-
-    tester
-        .state<NavigatorState>(find.byType(Navigator))
-        .push(MaterialPageRoute<void>(
-          settings: const RouteSettings(name: 'broken'),
-          builder: (BuildContext context) => null,
-        ));
-    await tester.pumpAndSettle();
-    // An exception should've been thrown because the `builder` returned null.
-    final dynamic exception = tester.takeException();
-    expect(exception, isFlutterError);
-    expect(exception.toStringDeep(), equalsIgnoringHashCodes(
-      'FlutterError\n'
-      '   The builder for route "broken" returned null.\n'
-      '   Route builders must never return null.\n'
-    ));
-  });
-
   testWidgets('test edge swipe then drop back at starting point works', (WidgetTester tester) async {
     await tester.pumpWidget(
       MaterialApp(
@@ -584,7 +558,7 @@
           body: Center(
             child: ElevatedButton(
               onPressed: () {
-                Navigator.push<void>(scaffoldKey.currentContext, MaterialPageRoute<void>(
+                Navigator.push<void>(scaffoldKey.currentContext!, MaterialPageRoute<void>(
                   builder: (BuildContext context) {
                     return const Scaffold(
                       body: Center(child: Text('route')),
@@ -655,7 +629,7 @@
     // Use the navigator to push a route instead of tapping the 'push' button.
     // The topmost route (the one that's animating away), ignores input while
     // the pop is underway because route.navigator.userGestureInProgress.
-    Navigator.push<void>(scaffoldKey.currentContext, MaterialPageRoute<void>(
+    Navigator.push<void>(scaffoldKey.currentContext!, MaterialPageRoute<void>(
       builder: (BuildContext context) {
         return const Scaffold(
           body: Center(child: Text('route')),
@@ -693,7 +667,7 @@
     expect(homeTapCount, 1);
     expect(pageTapCount, 0);
 
-    Navigator.push<void>(homeScaffoldKey.currentContext, MaterialPageRoute<void>(
+    Navigator.push<void>(homeScaffoldKey.currentContext!, MaterialPageRoute<void>(
       builder: (BuildContext context) {
         return Scaffold(
           key: pageScaffoldKey,
@@ -763,10 +737,10 @@
     expect(homeTapCount, 1);
     expect(pageTapCount, 0);
 
-    final ValueNotifier<bool> notifier = Navigator.of(homeScaffoldKey.currentContext).userGestureInProgressNotifier;
+    final ValueNotifier<bool> notifier = Navigator.of(homeScaffoldKey.currentContext!)!.userGestureInProgressNotifier;
     expect(notifier.value, false);
 
-    Navigator.push<void>(homeScaffoldKey.currentContext, MaterialPageRoute<void>(
+    Navigator.push<void>(homeScaffoldKey.currentContext!, MaterialPageRoute<void>(
       builder: (BuildContext context) {
         return Scaffold(
           key: pageScaffoldKey,
@@ -846,7 +820,10 @@
     await tester.pumpWidget(
       buildNavigator(
         pages: myPages,
-        onPopPage: (Route<dynamic> route, dynamic result) => null,
+        onPopPage: (Route<dynamic> route, dynamic result) {
+          assert(false); // The test should never execute this.
+          return true;
+        },
         transitionDelegate: detector,
       )
     );
@@ -861,7 +838,10 @@
     await tester.pumpWidget(
       buildNavigator(
         pages: myPages,
-        onPopPage: (Route<dynamic> route, dynamic result) => null,
+        onPopPage: (Route<dynamic> route, dynamic result) {
+          assert(false); // The test should never execute this.
+          return true;
+        },
         transitionDelegate: detector,
       )
     );
@@ -883,7 +863,10 @@
     await tester.pumpWidget(
       buildNavigator(
         pages: myPages,
-        onPopPage: (Route<dynamic> route, dynamic result) => null,
+        onPopPage: (Route<dynamic> route, dynamic result) {
+          assert(false); // The test should never execute this.
+          return true;
+        },
         transitionDelegate: detector,
       )
     );
@@ -901,7 +884,10 @@
     await tester.pumpWidget(
       buildNavigator(
         pages: myPages,
-        onPopPage: (Route<dynamic> route, dynamic result) => null,
+        onPopPage: (Route<dynamic> route, dynamic result) {
+          assert(false); // The test should never execute this.
+          return true;
+        },
         transitionDelegate: detector,
       )
     );
@@ -919,7 +905,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);
@@ -931,9 +917,9 @@
   bool hasTransition = false;
   @override
   Iterable<RouteTransitionRecord> resolve({
-    List<RouteTransitionRecord> newPageRouteHistory,
-    Map<RouteTransitionRecord, RouteTransitionRecord> locationToExitingPageRoute,
-    Map<RouteTransitionRecord, List<RouteTransitionRecord>> pageRouteToPagelessRoutes
+    required List<RouteTransitionRecord> newPageRouteHistory,
+    required Map<RouteTransitionRecord?, RouteTransitionRecord> locationToExitingPageRoute,
+    required Map<RouteTransitionRecord?, List<RouteTransitionRecord>> pageRouteToPagelessRoutes
   }) {
     hasTransition = true;
     return super.resolve(
@@ -945,13 +931,13 @@
 }
 
 Widget buildNavigator({
-  List<Page<dynamic>> pages,
-  PopPageCallback onPopPage,
-  GlobalKey<NavigatorState> key,
-  TransitionDelegate<dynamic> transitionDelegate
+  required List<Page<dynamic>> pages,
+  required PopPageCallback onPopPage,
+  GlobalKey<NavigatorState>? key,
+  TransitionDelegate<dynamic>? transitionDelegate
 }) {
   return MediaQuery(
-    data: MediaQueryData.fromWindow(WidgetsBinding.instance.window),
+    data: MediaQueryData.fromWindow(WidgetsBinding.instance!.window),
     child: Localizations(
       locale: const Locale('en', 'US'),
       delegates: const <LocalizationsDelegate<dynamic>>[
@@ -974,14 +960,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) {
@@ -990,7 +976,7 @@
         key: widget.navigatorKey,
         pages: <Page<void>>[
           const MaterialPage<void>(child: Text('home')),
-          if (_subpage != null) MaterialPage<void>(child: Text(_subpage)),
+          if (_subpage != null) MaterialPage<void>(child: Text(_subpage!)),
         ],
         onPopPage: (Route<dynamic> route, dynamic result) {
           if (!route.didPop(result)) {
diff --git a/packages/flutter/test/material/page_transitions_theme_test.dart b/packages/flutter/test/material/page_transitions_theme_test.dart
index a27381a..6649d98 100644
--- a/packages/flutter/test/material/page_transitions_theme_test.dart
+++ b/packages/flutter/test/material/page_transitions_theme_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/material.dart';
@@ -12,7 +10,7 @@
 void main() {
   testWidgets('Default PageTransitionsTheme platform', (WidgetTester tester) async {
     await tester.pumpWidget(const MaterialApp(home: Text('home')));
-    final PageTransitionsTheme theme = Theme.of(tester.element(find.text('home'))).pageTransitionsTheme;
+    final PageTransitionsTheme theme = Theme.of(tester.element(find.text('home')))!.pageTransitionsTheme;
     expect(theme.builders, isNotNull);
     for (final TargetPlatform platform in TargetPlatform.values) {
       if (platform == TargetPlatform.fuchsia) {
@@ -28,7 +26,7 @@
       '/': (BuildContext context) => Material(
         child: TextButton(
           child: const Text('push'),
-          onPressed: () { Navigator.of(context).pushNamed('/b'); },
+          onPressed: () { Navigator.of(context)!.pushNamed('/b'); },
         ),
       ),
       '/b': (BuildContext context) => const Text('page b'),
@@ -40,7 +38,7 @@
       ),
     );
 
-    expect(Theme.of(tester.element(find.text('push'))).platform, debugDefaultTargetPlatformOverride);
+    expect(Theme.of(tester.element(find.text('push')))!.platform, debugDefaultTargetPlatformOverride);
     expect(find.byType(CupertinoPageTransition), findsOneWidget);
 
     await tester.tap(find.text('push'));
@@ -54,7 +52,7 @@
       '/': (BuildContext context) => Material(
         child: TextButton(
           child: const Text('push'),
-          onPressed: () { Navigator.of(context).pushNamed('/b'); },
+          onPressed: () { Navigator.of(context)!.pushNamed('/b'); },
         ),
       ),
       '/b': (BuildContext context) => const Text('page b'),
@@ -73,7 +71,7 @@
       );
     }
 
-    expect(Theme.of(tester.element(find.text('push'))).platform, debugDefaultTargetPlatformOverride);
+    expect(Theme.of(tester.element(find.text('push')))!.platform, debugDefaultTargetPlatformOverride);
     expect(findFadeUpwardsPageTransition(), findsOneWidget);
 
     await tester.tap(find.text('push'));
@@ -87,7 +85,7 @@
       '/': (BuildContext context) => Material(
         child: TextButton(
           child: const Text('push'),
-          onPressed: () { Navigator.of(context).pushNamed('/b'); },
+          onPressed: () { Navigator.of(context)!.pushNamed('/b'); },
         ),
       ),
       '/b': (BuildContext context) => const Text('page b'),
@@ -113,7 +111,7 @@
       );
     }
 
-    expect(Theme.of(tester.element(find.text('push'))).platform, debugDefaultTargetPlatformOverride);
+    expect(Theme.of(tester.element(find.text('push')))!.platform, debugDefaultTargetPlatformOverride);
     expect(findOpenUpwardsPageTransition(), findsOneWidget);
 
     await tester.tap(find.text('push'));
@@ -127,7 +125,7 @@
       '/': (BuildContext context) => Material(
         child: TextButton(
           child: const Text('push'),
-          onPressed: () { Navigator.of(context).pushNamed('/b'); },
+          onPressed: () { Navigator.of(context)!.pushNamed('/b'); },
         ),
       ),
       '/b': (BuildContext context) => const Text('page b'),
@@ -153,7 +151,7 @@
       );
     }
 
-    expect(Theme.of(tester.element(find.text('push'))).platform, debugDefaultTargetPlatformOverride);
+    expect(Theme.of(tester.element(find.text('push')))!.platform, debugDefaultTargetPlatformOverride);
     expect(findZoomPageTransition(), findsOneWidget);
 
     await tester.tap(find.text('push'));
@@ -171,7 +169,7 @@
       '/': (BuildContext context) => Material(
         child: TextButton(
           child: const Text('push'),
-          onPressed: () { Navigator.of(context).pushNamed('/b'); },
+          onPressed: () { Navigator.of(context)!.pushNamed('/b'); },
         ),
       ),
       '/b': (BuildContext context) => StatefulBuilder(
diff --git a/packages/flutter/test/material/paginated_data_table_test.dart b/packages/flutter/test/material/paginated_data_table_test.dart
index 05470da..0e9a7bb 100644
--- a/packages/flutter/test/material/paginated_data_table_test.dart
+++ b/packages/flutter/test/material/paginated_data_table_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/material.dart';
 import 'package:flutter_test/flutter_test.dart';
 import 'package:flutter/gestures.dart' show DragStartBehavior;
@@ -15,7 +13,7 @@
     this.onSelectChanged,
   });
 
-  final void Function(bool) onSelectChanged;
+  final void Function(bool?)? onSelectChanged;
 
   int get generation => _generation;
   int _generation = 0;
@@ -68,7 +66,7 @@
         availableRowsPerPage: const <int>[
           2, 4, 8, 16,
         ],
-        onRowsPerPageChanged: (int rowsPerPage) {
+        onRowsPerPageChanged: (int? rowsPerPage) {
           log.add('rows-per-page-changed: $rowsPerPage');
         },
         onPageChanged: (int rowIndex) {
@@ -218,7 +216,7 @@
         availableRowsPerPage: const <int>[
           8, 9,
         ],
-        onRowsPerPageChanged: (int rowsPerPage) { },
+        onRowsPerPageChanged: (int? rowsPerPage) { },
         columns: const <DataColumn>[
           DataColumn(label: Text('COL1')),
           DataColumn(label: Text('COL2')),
@@ -243,7 +241,7 @@
           source: source,
           rowsPerPage: 501,
           availableRowsPerPage: const <int>[ 501 ],
-          onRowsPerPageChanged: (int rowsPerPage) { },
+          onRowsPerPageChanged: (int? rowsPerPage) { },
           columns: const <DataColumn>[
             DataColumn(label: Text('COL1')),
             DataColumn(label: Text('COL2')),
@@ -280,7 +278,7 @@
               rowsPerPage: 5,
               dragStartBehavior: DragStartBehavior.down,
               availableRowsPerPage: const <int>[ 5 ],
-              onRowsPerPageChanged: (int rowsPerPage) { },
+              onRowsPerPageChanged: (int? rowsPerPage) { },
               columns: const <DataColumn>[
                 DataColumn(label: Text('COL1')),
                 DataColumn(label: Text('COL2')),
@@ -315,7 +313,7 @@
         availableRowsPerPage: const <int>[
           2, 4, 8, 16,
         ],
-        onRowsPerPageChanged: (int rowsPerPage) {},
+        onRowsPerPageChanged: (int? rowsPerPage) {},
         onPageChanged: (int rowIndex) {},
         columns: const <DataColumn>[
           DataColumn(label: Text('Name')),
@@ -336,7 +334,7 @@
         availableRowsPerPage: const <int>[
           2, 4, 8, 16,
         ],
-        onRowsPerPageChanged: (int rowsPerPage) {},
+        onRowsPerPageChanged: (int? rowsPerPage) {},
         onPageChanged: (int rowIndex) {},
         columns: const <DataColumn>[
           DataColumn(label: Text('Name')),
@@ -398,7 +396,7 @@
     await binding.setSurfaceSize(const Size(_width, _height));
 
     final TestDataSource source = TestDataSource(
-      onSelectChanged: (bool value) {},
+      onSelectChanged: (bool? value) {},
     );
     Finder cellContent;
     Finder checkbox;
@@ -412,9 +410,9 @@
         availableRowsPerPage: const <int>[
           2, 4,
         ],
-        onRowsPerPageChanged: (int rowsPerPage) {},
+        onRowsPerPageChanged: (int? rowsPerPage) {},
         onPageChanged: (int rowIndex) {},
-        onSelectAll: (bool value) {},
+        onSelectAll: (bool? value) {},
         columns: const <DataColumn>[
           DataColumn(label: Text('Name')),
           DataColumn(label: Text('Calories'), numeric: true),
@@ -481,9 +479,9 @@
           availableRowsPerPage: const <int>[
             2, 4,
           ],
-          onRowsPerPageChanged: (int rowsPerPage) {},
+          onRowsPerPageChanged: (int? rowsPerPage) {},
           onPageChanged: (int rowIndex) {},
-          onSelectAll: (bool value) {},
+          onSelectAll: (bool? value) {},
           columns: const <DataColumn>[
             DataColumn(label: Text('Name')),
             DataColumn(label: Text('Calories'), numeric: true),
@@ -564,7 +562,7 @@
         availableRowsPerPage: const <int>[
           2, 4, 8, 16,
         ],
-        onRowsPerPageChanged: (int rowsPerPage) {},
+        onRowsPerPageChanged: (int? rowsPerPage) {},
         onPageChanged: (int rowIndex) {},
         columns: const <DataColumn>[
           DataColumn(label: Text('Name')),
@@ -620,7 +618,7 @@
           availableRowsPerPage: const <int>[
             2, 4, 8, 16,
           ],
-          onRowsPerPageChanged: (int rowsPerPage) {},
+          onRowsPerPageChanged: (int? rowsPerPage) {},
           onPageChanged: (int rowIndex) {},
           columns: const <DataColumn>[
             DataColumn(label: Text('Name')),
@@ -691,7 +689,7 @@
         availableRowsPerPage: const <int>[
           2, 4, 8, 16,
         ],
-        onRowsPerPageChanged: (int rowsPerPage) {},
+        onRowsPerPageChanged: (int? rowsPerPage) {},
         onPageChanged: (int rowIndex) {},
         columns: const <DataColumn>[
           DataColumn(label: Text('Name')),
@@ -735,7 +733,7 @@
     Widget buildTable(bool checkbox) => MaterialApp(
       home: PaginatedDataTable(
         header: const Text('Test table'),
-        source: TestDataSource(onSelectChanged: (bool value) {}),
+        source: TestDataSource(onSelectChanged: (bool? value) {}),
         showCheckboxColumn: checkbox,
         columns: const <DataColumn>[
           DataColumn(label: Text('Name')),
diff --git a/packages/flutter/test/material/persistent_bottom_sheet_test.dart b/packages/flutter/test/material/persistent_bottom_sheet_test.dart
index 3746663..75bf88e 100644
--- a/packages/flutter/test/material/persistent_bottom_sheet_test.dart
+++ b/packages/flutter/test/material/persistent_bottom_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_test/flutter_test.dart';
 import 'package:flutter/material.dart';
 
@@ -25,7 +23,6 @@
 
   testWidgets('Verify that a BottomSheet can be rebuilt with ScaffoldFeatureController.setState()', (WidgetTester tester) async {
     final GlobalKey<ScaffoldState> scaffoldKey = GlobalKey<ScaffoldState>();
-    PersistentBottomSheetController<void> bottomSheet;
     int buildCount = 0;
 
     await tester.pumpWidget(MaterialApp(
@@ -35,7 +32,7 @@
       ),
     ));
 
-    bottomSheet = scaffoldKey.currentState.showBottomSheet<void>((_) {
+    final PersistentBottomSheetController<void> bottomSheet = scaffoldKey.currentState!.showBottomSheet<void>((_) {
       return Builder(
         builder: (BuildContext context) {
           buildCount += 1;
@@ -46,7 +43,7 @@
 
     await tester.pump();
     expect(buildCount, equals(1));
-    bottomSheet.setState(() { });
+    bottomSheet.setState!(() { });
     await tester.pump();
     expect(buildCount, equals(2));
   });
@@ -92,7 +89,7 @@
       ),
     ));
 
-    scaffoldKey.currentState.showBottomSheet<void>((BuildContext context) {
+    scaffoldKey.currentState!.showBottomSheet<void>((BuildContext context) {
       return ListView(
         shrinkWrap: true,
         primary: false,
@@ -124,7 +121,7 @@
       ),
     ));
 
-    scaffoldKey.currentState.showBottomSheet<void>((BuildContext context) {
+    scaffoldKey.currentState!.showBottomSheet<void>((BuildContext context) {
       return ListView(
         shrinkWrap: true,
         primary: false,
@@ -159,7 +156,7 @@
       ),
     ));
 
-    scaffoldKey.currentState.showBottomSheet<void>(
+    scaffoldKey.currentState!.showBottomSheet<void>(
       (BuildContext context) {
         return DraggableScrollableSheet(
           expand: false,
@@ -313,7 +310,7 @@
       ),
     ));
 
-    scaffoldKey.currentState.showBottomSheet<void>(
+    scaffoldKey.currentState!.showBottomSheet<void>(
       (BuildContext context) {
         return DraggableScrollableSheet(
           expand: false,
@@ -363,7 +360,7 @@
 
     int buildCount = 0;
     showBottomSheet<void>(
-      context: key.currentContext,
+      context: key.currentContext!,
       builder: (BuildContext context) {
         return Builder(
           builder: (BuildContext context) {
@@ -378,8 +375,8 @@
   });
 
   testWidgets('Scaffold removes top MediaQuery padding', (WidgetTester tester) async {
-    BuildContext scaffoldContext;
-    BuildContext bottomSheetContext;
+    late BuildContext scaffoldContext;
+    late BuildContext bottomSheetContext;
 
     await tester.pumpWidget(MaterialApp(
       home: MediaQuery(
@@ -411,7 +408,7 @@
     await tester.pump();
 
     expect(
-      MediaQuery.of(bottomSheetContext).padding,
+      MediaQuery.of(bottomSheetContext)!.padding,
       const EdgeInsets.only(
         bottom: 50.0,
         left: 50.0,
@@ -492,7 +489,7 @@
       ),
     ));
 
-    scaffoldKey.currentState.showBottomSheet<void>((BuildContext context) {
+    scaffoldKey.currentState!.showBottomSheet<void>((BuildContext context) {
       return ListView(
         shrinkWrap: true,
         primary: false,
@@ -522,7 +519,7 @@
       ),
     ));
 
-    final PersistentBottomSheetController<void> bottomSheet = scaffoldKey.currentState.showBottomSheet<void>((_) {
+    final PersistentBottomSheetController<void> bottomSheet = scaffoldKey.currentState!.showBottomSheet<void>((_) {
       return Builder(
         builder: (BuildContext context) {
           return Container(height: 200.0);
diff --git a/packages/flutter/test/material/popup_menu_test.dart b/packages/flutter/test/material/popup_menu_test.dart
index df817df..292ebd4 100644
--- a/packages/flutter/test/material/popup_menu_test.dart
+++ b/packages/flutter/test/material/popup_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 'dart:ui' show window, SemanticsFlag;
 
 import 'package:flutter_test/flutter_test.dart';
@@ -66,7 +64,7 @@
 
   testWidgets('PopupMenuButton calls onCanceled callback when an item is not selected', (WidgetTester tester) async {
     int cancels = 0;
-    BuildContext popupContext;
+    late BuildContext popupContext;
     final Key noCallbackKey = UniqueKey();
     final Key withCallbackKey = UniqueKey();
 
@@ -125,7 +123,7 @@
     await tester.tap(find.byKey(withCallbackKey));
     await tester.pump();
     await tester.pump(const Duration(seconds: 1));
-    Navigator.of(popupContext).pop();
+    Navigator.of(popupContext)!.pop();
     await tester.pump();
     expect(cancels, equals(2));
   });
@@ -140,7 +138,7 @@
       return MaterialApp(
         home: Builder(builder: (BuildContext context) {
           return MediaQuery(
-            data: MediaQuery.of(context).copyWith(
+            data: MediaQuery.of(context)!.copyWith(
               navigationMode: NavigationMode.directional,
             ),
             child: Material(
@@ -191,7 +189,7 @@
     await tester.pumpWidget(buildApp(directional: true));
 
     // Try to bring up the popup menu and select the first item from it
-    Focus.of(popupButtonKey.currentContext).requestFocus();
+    Focus.of(popupButtonKey.currentContext!)!.requestFocus();
     await tester.pumpAndSettle();
     await tester.tap(find.byKey(popupButtonKey));
     await tester.pumpAndSettle();
@@ -240,10 +238,10 @@
         ),
       ),
     );
-    Focus.of(childKey.currentContext, nullOk: true).requestFocus();
+    Focus.of(childKey.currentContext!)!.requestFocus();
     await tester.pump();
 
-    expect(Focus.of(childKey.currentContext, nullOk: true).hasPrimaryFocus, isFalse);
+    expect(Focus.of(childKey.currentContext!)!.hasPrimaryFocus, isFalse);
     expect(itemBuilderCalled, isFalse);
     expect(onSelectedCalled, isFalse);
   });
@@ -256,7 +254,7 @@
       MaterialApp(
         home: Builder(builder: (BuildContext context) {
           return MediaQuery(
-            data: MediaQuery.of(context).copyWith(
+            data: MediaQuery.of(context)!.copyWith(
               navigationMode: NavigationMode.directional,
             ),
             child: Material(
@@ -283,10 +281,10 @@
         }),
       ),
     );
-    Focus.of(childKey.currentContext, nullOk: true).requestFocus();
+    Focus.of(childKey.currentContext!)!.requestFocus();
     await tester.pump();
 
-    expect(Focus.of(childKey.currentContext, nullOk: true).hasPrimaryFocus, isTrue);
+    expect(Focus.of(childKey.currentContext!)!.hasPrimaryFocus, isTrue);
   });
 
   testWidgets('PopupMenuItem is only focusable when enabled', (WidgetTester tester) async {
@@ -321,7 +319,7 @@
     // Open the popup to build and show the menu contents.
     await tester.tap(find.byKey(popupButtonKey));
     await tester.pumpAndSettle();
-    final FocusNode childNode = Focus.of(childKey.currentContext, nullOk: true);
+    final FocusNode childNode = Focus.of(childKey.currentContext!)!;
     // Now that the contents are shown, request focus on the child text.
     childNode.requestFocus();
     await tester.pumpAndSettle();
@@ -364,7 +362,7 @@
     await tester.pumpAndSettle();
 
     expect(itemBuilderCalled, isTrue);
-    expect(Focus.of(childKey.currentContext, nullOk: true).hasPrimaryFocus, isFalse);
+    expect(Focus.of(childKey.currentContext!)!.hasPrimaryFocus, isFalse);
   });
 
   testWidgets('PopupMenuButton is horizontal on iOS', (WidgetTester tester) async {
@@ -637,7 +635,7 @@
   });
 
   testWidgets('PopupMenu removes MediaQuery padding', (WidgetTester tester) async {
-    BuildContext popupContext;
+    late BuildContext popupContext;
 
     await tester.pumpWidget(MaterialApp(
       home: MediaQuery(
@@ -674,7 +672,7 @@
 
     await tester.pump();
 
-    expect(MediaQuery.of(popupContext).padding, EdgeInsets.zero);
+    expect(MediaQuery.of(popupContext)!.padding, EdgeInsets.zero);
   });
 
   testWidgets('Popup Menu Offset Test', (WidgetTester tester) async {
@@ -1042,7 +1040,7 @@
   testWidgets('PopupMenuButton PopupMenuDivider', (WidgetTester tester) async {
     // Regression test for https://github.com/flutter/flutter/issues/27072
 
-    String selectedValue;
+    late String selectedValue;
     await tester.pumpWidget(
       MaterialApp(
         home: Scaffold(
@@ -1093,41 +1091,6 @@
     expect(selectedValue, '2');
   });
 
-  testWidgets('showMenu position required', (WidgetTester tester) async {
-    // Test for https://github.com/flutter/flutter/issues/22256
-    await tester.pumpWidget(
-      MaterialApp(
-        home: Material(
-          child: Center(
-            child: Builder(
-              builder: (BuildContext context) {
-                return ElevatedButton(
-                  onPressed: () {
-                    // Ensure showMenu throws an assertion without a position
-                    expect(() {
-                      // ignore: missing_required_param
-                      showMenu<int>(
-                        context: context,
-                        items: <PopupMenuItem<int>>[
-                          const PopupMenuItem<int>(
-                              value: 1, child: Text('1'),
-                          ),
-                        ],
-                      );
-                    }, throwsAssertionError);
-                  },
-                  child: const Text('Menu Button'),
-                );
-              },
-            ),
-          ),
-        ),
-      ),
-    );
-
-    await tester.tap(find.text('Menu Button'));
-  });
-
   testWidgets('PopupMenuItem child height is a minimum, child is vertically centered', (WidgetTester tester) async {
     final Key popupMenuButtonKey = UniqueKey();
     final Type menuItemType = const PopupMenuItem<String>(child: Text('item')).runtimeType;
@@ -1219,14 +1182,14 @@
       double fontSize = 24,
     }) {
       return MaterialApp(
-        builder: (BuildContext context, Widget child) {
+        builder: (BuildContext context, Widget? child) {
           return Directionality(
             textDirection: textDirection,
             child: PopupMenuTheme(
               data: PopupMenuTheme.of(context).copyWith(
-                textStyle: Theme.of(context).textTheme.subtitle1.copyWith(fontSize: fontSize),
+                textStyle: Theme.of(context)!.textTheme.subtitle1!.copyWith(fontSize: fontSize),
               ),
-              child: child,
+              child: child!,
             ),
           );
         },
@@ -1533,7 +1496,7 @@
 
     expect(find.text('Tap me please!'), findsNothing);
 
-    globalKey.currentState.showButtonMenu();
+    globalKey.currentState!.showButtonMenu();
     // The PopupMenuItem will appear after an animation, hence,
     // we have to first wait for the tester to settle.
     await tester.pumpAndSettle();
@@ -1571,7 +1534,7 @@
 
     await tester.pump();
 
-    expect(RendererBinding.instance.mouseTracker.debugDeviceActiveCursor(1), SystemMouseCursors.text);
+    expect(RendererBinding.instance!.mouseTracker.debugDeviceActiveCursor(1), SystemMouseCursors.text);
 
     // Test default cursor
     await tester.pumpWidget(
@@ -1594,7 +1557,7 @@
       ),
     );
 
-    expect(RendererBinding.instance.mouseTracker.debugDeviceActiveCursor(1), SystemMouseCursors.click);
+    expect(RendererBinding.instance!.mouseTracker.debugDeviceActiveCursor(1), SystemMouseCursors.click);
 
     // Test default cursor when disabled
     await tester.pumpWidget(
@@ -1618,19 +1581,19 @@
       ),
     );
 
-    expect(RendererBinding.instance.mouseTracker.debugDeviceActiveCursor(1), SystemMouseCursors.basic);
+    expect(RendererBinding.instance!.mouseTracker.debugDeviceActiveCursor(1), SystemMouseCursors.basic);
   });
 }
 
 class TestApp extends StatefulWidget {
   const TestApp({
-    Key key,
-    this.textDirection,
+    Key? key,
+    required this.textDirection,
     this.child,
   }) : super(key: key);
 
   final TextDirection textDirection;
-  final Widget child;
+  final Widget? child;
 
   @override
   _TestAppState createState() => _TestAppState();
@@ -1670,7 +1633,7 @@
   int menuCount = 0;
 
   @override
-  void didPush(Route<dynamic> route, Route<dynamic> previousRoute) {
+  void didPush(Route<dynamic> route, Route<dynamic>? previousRoute) {
     if (route.toString().contains('_PopupMenuRoute')) {
       menuCount++;
     }
diff --git a/packages/flutter/test/material/popup_menu_theme_test.dart b/packages/flutter/test/material/popup_menu_theme_test.dart
index a964521..124254c 100644
--- a/packages/flutter/test/material/popup_menu_theme_test.dart
+++ b/packages/flutter/test/material/popup_menu_theme_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/material.dart';
 import 'package:flutter/rendering.dart';
 import 'package:flutter_test/flutter_test.dart';
@@ -79,7 +77,7 @@
             PopupMenuButton<void>(
               key: popupButtonKey,
               itemBuilder: (BuildContext context) {
-                return <PopupMenuEntry<Object>>[
+                return <PopupMenuEntry<void>>[
                   PopupMenuItem<void>(
                     key: popupItemKey,
                     child: const Text('Example'),
@@ -139,7 +137,7 @@
               key: popupButtonKey,
               itemBuilder: (BuildContext context) {
                 return <PopupMenuEntry<Object>>[
-                  PopupMenuItem<void>(
+                  PopupMenuItem<Object>(
                     key: popupItemKey,
                     child: const Text('Example'),
                   ),
@@ -206,7 +204,7 @@
               color: color,
               shape: shape,
               itemBuilder: (BuildContext context) {
-                return <PopupMenuEntry<Object>>[
+                return <PopupMenuEntry<void>>[
                   PopupMenuItem<void>(
                     key: popupItemKey,
                     textStyle: textStyle,
@@ -270,7 +268,7 @@
               child: PopupMenuButton<void>(
                 key: popupButtonKey,
                 itemBuilder: (BuildContext context) {
-                  return <PopupMenuEntry<Object>>[
+                  return <PopupMenuEntry<void>>[
                     PopupMenuItem<void>(
                       key: popupItemKey,
                       child: const Text('Example'),