diff --git a/packages/flutter_tools/lib/src/commands/update_packages.dart b/packages/flutter_tools/lib/src/commands/update_packages.dart
index 2ccfe6b..d8794b5 100644
--- a/packages/flutter_tools/lib/src/commands/update_packages.dart
+++ b/packages/flutter_tools/lib/src/commands/update_packages.dart
@@ -1439,7 +1439,7 @@
 /// It ends up holding the full graph of dependencies, and the version number for
 /// each one.
 class PubDependencyTree {
-  final Map<String, String?> _versions = <String, String>{};
+  final Map<String, String?> _versions = <String, String?>{};
   final Map<String, Set<String>> _dependencyTree = <String, Set<String>>{};
 
   /// Handles the output from "pub deps --style=compact".
diff --git a/packages/flutter_tools/test/commands.shard/hermetic/config_test.dart b/packages/flutter_tools/test/commands.shard/hermetic/config_test.dart
index 8c4377d..43a06e5 100644
--- a/packages/flutter_tools/test/commands.shard/hermetic/config_test.dart
+++ b/packages/flutter_tools/test/commands.shard/hermetic/config_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:convert';
 
 import 'package:args/command_runner.dart';
@@ -23,10 +21,10 @@
 import '../../src/test_flutter_command_runner.dart';
 
 void main() {
-  FakeAndroidStudio fakeAndroidStudio;
-  FakeAndroidSdk fakeAndroidSdk;
-  FakeFlutterVersion fakeFlutterVersion;
-  TestUsage testUsage;
+  late FakeAndroidStudio fakeAndroidStudio;
+  late FakeAndroidSdk fakeAndroidSdk;
+  late FakeFlutterVersion fakeFlutterVersion;
+  late TestUsage testUsage;
 
   setUpAll(() {
     Cache.disableLocking();
@@ -288,7 +286,7 @@
 
 class FakeFlutterVersion extends Fake implements FlutterVersion {
   @override
-  String channel;
+  late String channel;
 
   @override
   void ensureVersionFile() {}
diff --git a/packages/flutter_tools/test/commands.shard/hermetic/pub_get_test.dart b/packages/flutter_tools/test/commands.shard/hermetic/pub_get_test.dart
index 9a68bce..61a4010 100644
--- a/packages/flutter_tools/test/commands.shard/hermetic/pub_get_test.dart
+++ b/packages/flutter_tools/test/commands.shard/hermetic/pub_get_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:args/command_runner.dart';
 import 'package:file/memory.dart';
 import 'package:flutter_tools/src/base/file_system.dart';
@@ -12,15 +10,14 @@
 import 'package:flutter_tools/src/dart/pub.dart';
 import 'package:flutter_tools/src/project.dart';
 import 'package:flutter_tools/src/reporting/reporting.dart';
-import 'package:meta/meta.dart';
 import 'package:test/fake.dart';
 
 import '../../src/context.dart';
 import '../../src/test_flutter_command_runner.dart';
 
 void main() {
-  FileSystem fileSystem;
-  FakePub pub;
+  late FileSystem fileSystem;
+  late FakePub pub;
 
   setUp(() {
     Cache.disableLocking();
@@ -124,13 +121,13 @@
 
   @override
   Future<void> get({
-    @required PubContext context,
-    String directory,
+    required PubContext context,
+    String? directory,
     bool skipIfAbsent = false,
     bool upgrade = false,
     bool offline = false,
     bool generateSyntheticPackage = false,
-    String flutterRootOverride,
+    String? flutterRootOverride,
     bool checkUpToDate = false,
     bool shouldSkipThirdPartyGenerator = true,
     bool printProgress = true,
diff --git a/packages/flutter_tools/test/commands.shard/hermetic/update_packages_test.dart b/packages/flutter_tools/test/commands.shard/hermetic/update_packages_test.dart
index 89e2316..2d947bc 100644
--- a/packages/flutter_tools/test/commands.shard/hermetic/update_packages_test.dart
+++ b/packages/flutter_tools/test/commands.shard/hermetic/update_packages_test.dart
@@ -2,15 +2,12 @@
 // 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:file/file.dart';
 import 'package:file/memory.dart';
 import 'package:flutter_tools/src/base/file_system.dart';
 import 'package:flutter_tools/src/cache.dart';
 import 'package:flutter_tools/src/commands/update_packages.dart';
 import 'package:flutter_tools/src/dart/pub.dart';
-import 'package:meta/meta.dart';
 import 'package:test/fake.dart';
 import 'package:yaml/yaml.dart';
 
@@ -85,10 +82,10 @@
   });
 
   group('update-packages', () {
-    FileSystem fileSystem;
-    Directory flutterSdk;
-    Directory flutter;
-    FakePub pub;
+    late FileSystem fileSystem;
+    late Directory flutterSdk;
+    late Directory flutter;
+    late FakePub pub;
 
     setUpAll(() {
       Cache.disableLocking();
@@ -209,7 +206,6 @@
             isTransitive: false,
           ),
         ],
-        doUpgrade: false,
       );
       final YamlMap pubspec = loadYaml(pubspecSource) as YamlMap;
       expect((pubspec['dependencies'] as YamlMap)['foo'], prevVersion);
@@ -226,18 +222,20 @@
 
   @override
   Future<void> get({
-    @required PubContext context,
-    String directory,
+    required PubContext context,
+    String? directory,
     bool skipIfAbsent = false,
     bool upgrade = false,
     bool offline = false,
     bool generateSyntheticPackage = false,
-    String flutterRootOverride,
+    String? flutterRootOverride,
     bool checkUpToDate = false,
     bool shouldSkipThirdPartyGenerator = true,
     bool printProgress = true,
   }) async {
-    pubGetDirectories.add(directory);
+    if (directory != null) {
+      pubGetDirectories.add(directory);
+    }
     fileSystem.directory(directory).childFile('pubspec.lock')
       ..createSync(recursive: true)
       ..writeAsStringSync('''
@@ -264,14 +262,16 @@
   @override
   Future<void> batch(
       List<String> arguments, {
-        @required PubContext context,
-        String directory,
-        MessageFilter filter,
+        required PubContext context,
+        String? directory,
+        MessageFilter? filter,
         String failureMessage = 'pub failed',
-        @required bool retry,
-        bool showTraceForErrors,
+        required bool retry,
+        bool? showTraceForErrors,
       }) async {
-    pubBatchDirectories.add(directory);
+    if (directory != null) {
+      pubBatchDirectories.add(directory);
+    }
 
 '''
 Dart SDK 2.16.0-144.0.dev
@@ -290,6 +290,6 @@
 transitive dependencies:
 - platform 3.1.0
 - process 4.2.4 [file path platform]
-'''.split('\n').forEach(filter);
+'''.split('\n').forEach(filter!);
   }
 }
