diff --git a/test/bidi_format_test.dart b/test/bidi_format_test.dart
index 0846907..ca69e85 100644
--- a/test/bidi_format_test.dart
+++ b/test/bidi_format_test.dart
@@ -1,7 +1,6 @@
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
-// @dart=2.9
 
 library bidi_format_test;
 
diff --git a/test/bidi_utils_test.dart b/test/bidi_utils_test.dart
index 1001817..a0a2e95 100644
--- a/test/bidi_utils_test.dart
+++ b/test/bidi_utils_test.dart
@@ -1,7 +1,6 @@
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
-// @dart=2.9
 
 library bidi_utils_test;
 
diff --git a/test/brazil_timezone_test.dart b/test/brazil_timezone_test.dart
index 78edb79..6fb5bd4 100644
--- a/test/brazil_timezone_test.dart
+++ b/test/brazil_timezone_test.dart
@@ -1,7 +1,6 @@
 // Copyright (c) 2017, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
-// @dart=2.9
 
 /// Test date formatting and parsing while the system time zone is set to
 /// America/Sao Paulo.
diff --git a/test/compact_number_test_data.dart b/test/compact_number_test_data.dart
index 946938d..b862ef3 100644
--- a/test/compact_number_test_data.dart
+++ b/test/compact_number_test_data.dart
@@ -3,7 +3,6 @@
 // for details. All rights reserved. Use of this source
 // code is governed by a
 // BSD-style license that can be found in the LICENSE file.
-// @dart=2.9
 
 /// Test data for compact number formatting.
 ///
diff --git a/test/compact_number_test_data_33.dart b/test/compact_number_test_data_33.dart
index 9ceaf61..0951c15 100644
--- a/test/compact_number_test_data_33.dart
+++ b/test/compact_number_test_data_33.dart
@@ -3,7 +3,6 @@
 // for details. All rights reserved. Use of this source
 // code is governed by a
 // BSD-style license that can be found in the LICENSE file.
-// @dart=2.9
 
 /// Test data for compact number formatting.
 ///
diff --git a/test/data_directory.dart b/test/data_directory.dart
index e2626a5..7c849e3 100644
--- a/test/data_directory.dart
+++ b/test/data_directory.dart
@@ -1,7 +1,6 @@
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
-// @dart=2.9
 
 /// A utility function for test and tools that compensates (at least for very
 /// simple cases) for file-dependent programs being run from different
diff --git a/test/date_format_flake_test.dart b/test/date_format_flake_test.dart
index 9be5168..c71158f 100644
--- a/test/date_format_flake_test.dart
+++ b/test/date_format_flake_test.dart
@@ -1,7 +1,6 @@
 // Copyright (c) 2019, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
-// @dart=2.9
 
 // Tests for what happens when DateTime instance creation does flaky things.
 
diff --git a/test/date_time_format_custom_test.dart b/test/date_time_format_custom_test.dart
index 5341f52..f9dd5f3 100644
--- a/test/date_time_format_custom_test.dart
+++ b/test/date_time_format_custom_test.dart
@@ -1,7 +1,6 @@
 // Copyright (c) 2017, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
-// @dart=2.9
 
 /// Test date formatting and parsing using custom locale data, which we get
 /// from the local copy.
@@ -18,7 +17,7 @@
   var symbols = local_symbols.dateTimeSymbolMap();
   var patterns = local_patterns.dateTimePatternMap();
   var locales = <String>[];
-  symbols.keys.take(10).forEach(locales.add);
+  symbols.keys.take(10).forEach((locale) => locales.add(locale));
   // Force inclusion of locales that are hard-coded in tests.
   var requiredLocales = ['en_US', 'de', 'fr', 'ja', 'el', 'de_AT'];
   locales.addAll(requiredLocales);
@@ -30,4 +29,4 @@
   runWith(() => locales, null, nullInitialization);
 }
 
-Future<void> nullInitialization(String a, String b) => Future.value(null);
+Future<void> nullInitialization(String a, String b) => Future.value();
diff --git a/test/date_time_format_file_even_test.dart b/test/date_time_format_file_even_test.dart
index b0be291..2e55022 100644
--- a/test/date_time_format_file_even_test.dart
+++ b/test/date_time_format_file_even_test.dart
@@ -1,7 +1,6 @@
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
-// @dart=2.9
 
 /// Tests date formatting and parsing using locale data read from the
 /// local file system. This tests one half the locales, since testing all
diff --git a/test/date_time_format_file_odd_test.dart b/test/date_time_format_file_odd_test.dart
index 527caff..687b392 100644
--- a/test/date_time_format_file_odd_test.dart
+++ b/test/date_time_format_file_odd_test.dart
@@ -1,7 +1,6 @@
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
-// @dart=2.9
 
 /// Tests date formatting and parsing using locale data read from the
 /// local file system. This tests one half the locales, since testing all
diff --git a/test/date_time_format_local_even_test.dart b/test/date_time_format_local_even_test.dart
index 86582e5..e52cb31 100644
--- a/test/date_time_format_local_even_test.dart
+++ b/test/date_time_format_local_even_test.dart
@@ -1,7 +1,6 @@
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
-// @dart=2.9
 
 /// Test date formatting and parsing using locale data which is available
 /// directly in the program as a constant. This tests one half the locales,
diff --git a/test/date_time_format_local_odd_test.dart b/test/date_time_format_local_odd_test.dart
index 7ec22f7..ecede2d 100644
--- a/test/date_time_format_local_odd_test.dart
+++ b/test/date_time_format_local_odd_test.dart
@@ -1,7 +1,6 @@
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
-// @dart=2.9
 
 /// Test date formatting and parsing using locale data which is available
 /// directly in the program as a constant. This tests one half the locales,
diff --git a/test/date_time_format_test_core.dart b/test/date_time_format_test_core.dart
index 9a699d2..600417d 100644
--- a/test/date_time_format_test_core.dart
+++ b/test/date_time_format_test_core.dart
@@ -1,7 +1,6 @@
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
-// @dart=2.9
 
 /// Tests the DateFormat library in dart. This file contains core tests that are
 /// run regardless of where the locale data is found, so it doesn't expect to be
@@ -174,19 +173,19 @@
 List<String> allLocales() => DateFormat.allLocalesWithSymbols();
 
 typedef SubsetFuncType = List<String> Function();
-SubsetFuncType _subsetFunc;
+SubsetFuncType? _subsetFunc;
 
-List<String> _subsetValue;
+List<String>? _subsetValue;
 
 List<String> get subset {
-  return _subsetValue ??= _subsetFunc();
+  return _subsetValue ??= _subsetFunc!();
 }
 
 // TODO(alanknight): Run specific tests for the en_ISO locale which isn't
 // included in CLDR, and check that our patterns for it are correct (they
 // very likely aren't).
 void runDateTests(SubsetFuncType subsetFunc) {
-  assert(subsetFunc != null);
+  ArgumentError.checkNotNull(subsetFunc);
   _subsetFunc = subsetFunc;
 
   test('Multiple patterns', () {
diff --git a/test/date_time_format_test_data.dart b/test/date_time_format_test_data.dart
index 9109c65..a0a57f7 100644
--- a/test/date_time_format_test_data.dart
+++ b/test/date_time_format_test_data.dart
@@ -1,7 +1,6 @@
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
-// @dart=2.9
 
 /// Test data for one particular date formatted for a small number of locales.
 /// Provides at least a basic check on formatting, including formatting with
diff --git a/test/date_time_format_test_stub.dart b/test/date_time_format_test_stub.dart
index 17980ae..b790899 100644
--- a/test/date_time_format_test_stub.dart
+++ b/test/date_time_format_test_stub.dart
@@ -1,7 +1,6 @@
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
-// @dart=2.9
 
 /// Test date formatting and parsing using locale data which is available
 /// directly in the program as a constant.
@@ -37,8 +36,10 @@
   return allLocales().where((x) => !(i++).isOdd).toList();
 }
 
-void runWith(TestListFunc getSubset, String dir,
+void runWith(TestListFunc getSubset, String? dir,
     InitializeDateFormattingFunc initFunction) {
+  var notNullDir = dir ?? '';
+
   // Initialize one locale just so we know what the list is.
   // Also, note that we take the list of locales as a function so that we don't
   // evaluate it until after we know that all the locales are available.
@@ -49,9 +50,10 @@
     if (initialized) {
       return null;
     }
-    return initFunction('en_US', dir).then((_) {
-      return Future.forEach(DateFormat.allLocalesWithSymbols(), (locale) {
-        return initFunction(locale, dir);
+    return initFunction('en_US', notNullDir).then((_) {
+      return Future.forEach(DateFormat.allLocalesWithSymbols(),
+          (String locale) {
+        return initFunction(locale, notNullDir);
       });
     }).then((_) {
       initialized = true;
diff --git a/test/date_time_format_uninitialized_test.dart b/test/date_time_format_uninitialized_test.dart
index 7374cc1..79b09f9 100644
--- a/test/date_time_format_uninitialized_test.dart
+++ b/test/date_time_format_uninitialized_test.dart
@@ -1,7 +1,6 @@
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
-// @dart=2.9
 
 /// Tests date formatting and parsing using locale data read from the
 /// local file system.
diff --git a/test/date_time_loose_parsing_test.dart b/test/date_time_loose_parsing_test.dart
index c28f124..353f946 100644
--- a/test/date_time_loose_parsing_test.dart
+++ b/test/date_time_loose_parsing_test.dart
@@ -1,7 +1,6 @@
 // Copyright (c) 2014, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
-// @dart=2.9
 
 /// Tests for the loose option when parsing dates and times, which accept
 /// mixed-case input and are able to skip missing delimiters. Such valid input
@@ -15,7 +14,7 @@
 import 'package:test/test.dart';
 
 void main() {
-  DateFormat format;
+  late DateFormat format;
 
   var date = DateTime(2014, 9, 3);
 
diff --git a/test/date_time_strict_test.dart b/test/date_time_strict_test.dart
index 04f9f75..730ceeb 100644
--- a/test/date_time_strict_test.dart
+++ b/test/date_time_strict_test.dart
@@ -1,7 +1,6 @@
 // Copyright (c) 2014, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
-// @dart=2.9
 
 /// Tests for the strict option when parsing dates and times, which are
 /// relatively locale-independent, depending only on the being a valid date
diff --git a/test/england_timezone_test.dart b/test/england_timezone_test.dart
index a2479c0..33e8901 100644
--- a/test/england_timezone_test.dart
+++ b/test/england_timezone_test.dart
@@ -1,7 +1,6 @@
 // Copyright (c) 2017, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
-// @dart=2.9
 
 /// Test date formatting and parsing while the system time zone is set to
 /// Europe/London.
diff --git a/test/find_default_locale_browser_test.dart b/test/find_default_locale_browser_test.dart
index a93dda9..cfc19f5 100644
--- a/test/find_default_locale_browser_test.dart
+++ b/test/find_default_locale_browser_test.dart
@@ -1,7 +1,6 @@
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
-// @dart=2.9
 
 @TestOn('browser')
 library find_default_locale_browser_test;
diff --git a/test/find_default_locale_standalone_test.dart b/test/find_default_locale_standalone_test.dart
index 217c281..e212848 100644
--- a/test/find_default_locale_standalone_test.dart
+++ b/test/find_default_locale_standalone_test.dart
@@ -1,7 +1,6 @@
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
-// @dart=2.9
 
 @TestOn('vm')
 import 'package:intl/intl.dart';
diff --git a/test/fixnum_test.dart b/test/fixnum_test.dart
index 3c7b6bc..8f9f874 100644
--- a/test/fixnum_test.dart
+++ b/test/fixnum_test.dart
@@ -1,7 +1,6 @@
 // Copyright (c) 2014, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
-// @dart=2.9
 
 library fixnum_test;
 
diff --git a/test/gmt_timezone_test.dart b/test/gmt_timezone_test.dart
index 1f61575..f8374ce 100644
--- a/test/gmt_timezone_test.dart
+++ b/test/gmt_timezone_test.dart
@@ -1,7 +1,6 @@
 // Copyright (c) 2017, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
-// @dart=2.9
 
 /// Test date formatting and parsing while the system time zone is set to
 /// GMT.
diff --git a/test/intl_test.dart b/test/intl_test.dart
index 0ba2f8e..77f10c5 100644
--- a/test/intl_test.dart
+++ b/test/intl_test.dart
@@ -1,7 +1,6 @@
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
-// @dart=2.9
 
 library intl_test;
 
diff --git a/test/locale_test.dart b/test/locale_test.dart
index 69d0cf4..59d75af 100644
--- a/test/locale_test.dart
+++ b/test/locale_test.dart
@@ -1,7 +1,6 @@
 // Copyright (c) 2019, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
-// @dart=2.9
 
 /// Tests for the Locale class.
 ///
@@ -40,7 +39,7 @@
 
   group('Locale.fromSubtags() FormatExceptions:', () {
     void testExceptionForSubtags(
-        String language, String script, String region) {
+        String language, String? script, String? region) {
       test('fromSubtags: "$language / $script / $region"', () {
         expect(
             () => Locale.fromSubtags(
@@ -175,7 +174,7 @@
 
   test('Locale cannot be modified via the variants field', () {
     var l = Locale.parse('en-scotland');
-    List<String> v = l.variants;
+    var v = l.variants as List<String>;
     var good = false;
     try {
       v.add('basiceng');
@@ -205,12 +204,12 @@
 
 void testFromSubtags(
     String language,
-    String script,
-    String region,
-    String expectedLanguage,
-    String expectedScript,
-    String expectedRegion,
-    String expectedTag) {
+    String? script,
+    String? region,
+    String? expectedLanguage,
+    String? expectedScript,
+    String? expectedRegion,
+    String? expectedTag) {
   test('Locale.fromSubtags(...) with $language, $script, $region', () {
     var l = Locale.fromSubtags(
         languageCode: language, scriptCode: script, countryCode: region);
@@ -225,10 +224,10 @@
 void testParse(
     String bcp47Tag,
     String expectedLanguage,
-    String expectedScript,
-    String expectedRegion,
+    String? expectedScript,
+    String? expectedRegion,
     Iterable<String> expectedVariants,
-    String expectedTag) {
+    String? expectedTag) {
   test('Locale.parse("$bcp47Tag");', () {
     var l = Locale.parse(bcp47Tag);
     expect(l.languageCode, expectedLanguage);
diff --git a/test/locale_test_data.dart b/test/locale_test_data.dart
index 40b7a10..9cd6f70 100644
--- a/test/locale_test_data.dart
+++ b/test/locale_test_data.dart
@@ -1,7 +1,6 @@
 // Copyright (c) 2019, the Dart project authors. Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
-// @dart=2.9
 
 /// Test data for Locale handling.
 ///
diff --git a/test/message_format_test.dart b/test/message_format_test.dart
index f61abee..03a2b47 100644
--- a/test/message_format_test.dart
+++ b/test/message_format_test.dart
@@ -1,7 +1,6 @@
 // Copyright (c) 2019, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
-// @dart=2.9
 
 /// Tests for the MessageFormat class.
 ///
diff --git a/test/more_compact_number_test_data.dart b/test/more_compact_number_test_data.dart
index cef3f3a..ef75c34 100644
--- a/test/more_compact_number_test_data.dart
+++ b/test/more_compact_number_test_data.dart
@@ -1,7 +1,6 @@
 // Copyright (c) 2019, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
-// @dart=2.9
 
 class CompactRoundingTestCase {
   CompactRoundingTestCase(this.number, this.expected,
@@ -14,12 +13,12 @@
 
   num number;
   String expected;
-  int maximumIntegerDigits;
-  int minimumIntegerDigits;
-  int maximumFractionDigits;
-  int minimumFractionDigits;
-  int minimumExponentDigits;
-  int significantDigits;
+  int? maximumIntegerDigits;
+  int? minimumIntegerDigits;
+  int? maximumFractionDigits;
+  int? minimumFractionDigits;
+  int? minimumExponentDigits;
+  int? significantDigits;
 
   String toString() => "CompactRoundingTestCase for $number, "
       "maxIntDig: $maximumIntegerDigits, "
diff --git a/test/number_closure_test.dart b/test/number_closure_test.dart
index 3e25e60..558b2dc 100644
--- a/test/number_closure_test.dart
+++ b/test/number_closure_test.dart
@@ -1,7 +1,6 @@
 /// Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 /// for details. All rights reserved. Use of this source code is governed by a
 /// BSD-style license that can be found in the LICENSE file.
-// @dart=2.9
 
 /// Tests based on the closure number formatting tests.
 library number_closure_test;
diff --git a/test/number_format_compact_icu_test.dart b/test/number_format_compact_icu_test.dart
index 51ee653..08cde65 100644
--- a/test/number_format_compact_icu_test.dart
+++ b/test/number_format_compact_icu_test.dart
@@ -4,6 +4,7 @@
 /// testing the package:intl implementation, they only help verify consistent
 /// behaviour across platforms.
 // @dart=2.9
+
 @TestOn("!browser")
 @Tags(['ffi'])
 @Skip(
diff --git a/test/number_format_compact_test.dart b/test/number_format_compact_test.dart
index 1fe900e..0103c97 100644
--- a/test/number_format_compact_test.dart
+++ b/test/number_format_compact_test.dart
@@ -1,7 +1,6 @@
 /// Copyright (c) 2016, the Dart project authors.  Please see the AUTHORS file
 /// for details. All rights reserved. Use of this source code is governed by a
 /// BSD-style license that can be found in the LICENSE file.
-// @dart=2.9
 
 /// Tests for compact format numbers, e.g. 1.2M rather than 1,200,000
 import 'dart:math';
@@ -101,7 +100,7 @@
 /// output of the formatters with significantDigits set to `1`.
 void testCurrency(
     String locale, num number, String expected, String expectedShort,
-    {String currency, String reason}) {
+    {String? currency, String? reason}) {
   test('Compact simple currency for $locale, $number', () {
     var format =
         NumberFormat.compactSimpleCurrency(locale: locale, name: currency);
@@ -220,7 +219,7 @@
     for (var data in expected) {
       var number = num.parse(data.first);
       validateNumber(number, shortFormat, data[1]);
-      var int64Number = Int64(number);
+      var int64Number = Int64(number as int);
       validateNumber(int64Number, shortFormat, data[1]);
       // TODO(alanknight): Make this work for MicroMoney
     }
@@ -259,7 +258,7 @@
 /// 999999 may print as 1M.
 num roundForPrinting(number, NumberFormat format) {
   var originalLength = NumberFormat.numberOfIntegerDigits(number);
-  var additionalDigits = originalLength - format.significantDigits;
+  var additionalDigits = originalLength - format.significantDigits!;
   if (additionalDigits > 0) {
     var divisor = pow(10, additionalDigits);
     // If we have an Int64, value speed over precision and make it double.
@@ -317,23 +316,23 @@
 void validateFancy(more_testdata.CompactRoundingTestCase t) {
   var shortFormat = NumberFormat.compact(locale: 'en');
   if (t.maximumIntegerDigits != null) {
-    shortFormat.maximumIntegerDigits = t.maximumIntegerDigits;
+    shortFormat.maximumIntegerDigits = t.maximumIntegerDigits!;
   }
 
   if (t.minimumIntegerDigits != null) {
-    shortFormat.minimumIntegerDigits = t.minimumIntegerDigits;
+    shortFormat.minimumIntegerDigits = t.minimumIntegerDigits!;
   }
 
   if (t.maximumFractionDigits != null) {
-    shortFormat.maximumFractionDigits = t.maximumFractionDigits;
+    shortFormat.maximumFractionDigits = t.maximumFractionDigits!;
   }
 
   if (t.minimumFractionDigits != null) {
-    shortFormat.minimumFractionDigits = t.minimumFractionDigits;
+    shortFormat.minimumFractionDigits = t.minimumFractionDigits!;
   }
 
   if (t.minimumExponentDigits != null) {
-    shortFormat.minimumExponentDigits = t.minimumExponentDigits;
+    shortFormat.minimumExponentDigits = t.minimumExponentDigits!;
   }
 
   if (t.significantDigits != null) {
diff --git a/test/number_format_compact_web_test.dart b/test/number_format_compact_web_test.dart
index 950775b..2508eb6 100644
--- a/test/number_format_compact_web_test.dart
+++ b/test/number_format_compact_web_test.dart
@@ -4,7 +4,6 @@
 /// consistency when the bug is fixed. Also fix documentation and perhaps
 /// merge tests: these tests currently also touch non-compact currency
 /// formatting.
-// @dart=2.9
 
 /// We use @Tags rather than @TestOn to be able to specify something that can be
 /// ignored when using a build system that can't read dart_test.yaml. This
@@ -63,7 +62,10 @@
 }
 
 String ecmaFormatNumber(String locale, num number,
-    {String style, String currency, String notation, String compactDisplay}) {
+    {String? style,
+    String? currency,
+    String? notation,
+    String? compactDisplay}) {
   var options = js.newObject();
   if (notation != null) js.setProperty(options, 'notation', notation);
   if (compactDisplay != null) {
diff --git a/test/number_format_test_core.dart b/test/number_format_test_core.dart
index 7f30a76..2c74137 100644
--- a/test/number_format_test_core.dart
+++ b/test/number_format_test_core.dart
@@ -1,7 +1,6 @@
 /// Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 /// for details. All rights reserved. Use of this source code is governed by a
 /// BSD-style license that can be found in the LICENSE file.
-// @dart=2.9
 
 library number_format_test;
 
@@ -94,7 +93,7 @@
       if (!testNumbersWeCannotReadBack.containsKey(x)) {
         var readBack = number.parse(formatted);
         // Even among ones we can read back, we can't test NaN for equality.
-        if (allTestNumbers[x].isNaN) {
+        if (allTestNumbers[x]!.isNaN) {
           expect(readBack.isNaN, isTrue);
         } else {
           expect(readBack, allTestNumbers[x]);
diff --git a/test/number_format_vm_test.dart b/test/number_format_vm_test.dart
index 6bc8e39..8c04b58 100644
--- a/test/number_format_vm_test.dart
+++ b/test/number_format_vm_test.dart
@@ -1,7 +1,6 @@
 /// Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 /// for details. All rights reserved. Use of this source code is governed by a
 /// BSD-style license that can be found in the LICENSE file.
-// @dart=2.9
 
 /// Number tests for the VM - includes numbers that can only be compiled for the
 /// VM.
diff --git a/test/number_format_web_test.dart b/test/number_format_web_test.dart
index 293e9f7..86db381 100644
--- a/test/number_format_web_test.dart
+++ b/test/number_format_web_test.dart
@@ -1,7 +1,6 @@
 /// Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 /// for details. All rights reserved. Use of this source code is governed by a
 /// BSD-style license that can be found in the LICENSE file.
-// @dart=2.9
 
 /// Number format tests for the web - excludes numbers too big to compile for
 /// the web.
diff --git a/test/number_test_data.dart b/test/number_test_data.dart
index c3549d4..10ed7ad 100644
--- a/test/number_test_data.dart
+++ b/test/number_test_data.dart
@@ -1,7 +1,6 @@
 // Copyright (c) 2014, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
-// @dart=2.9
 
 /// Test data for numeric formatting from a large set of locales.
 ///
diff --git a/test/plural_test.dart b/test/plural_test.dart
index 3ad91a3..1aa60b6 100644
--- a/test/plural_test.dart
+++ b/test/plural_test.dart
@@ -1,7 +1,6 @@
 // Copyright (c) 2016, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
-// @dart=2.9
 
 /// Test plurals without translation.
 ///
@@ -193,10 +192,8 @@
 
   test('Check null howMany', () {
     expect(plural(0, null), '0:Zero');
-    expect(() => plural(null, null),
-        anyOf(throwsArgumentError, throwsA(isA<AssertionError>())));
-    expect(() => plural(null, 'ru'),
-        anyOf(throwsArgumentError, throwsA(isA<AssertionError>())));
+    expect(() => plural(null, null), throwsA(isA<Error>()));
+    expect(() => plural(null, 'ru'), throwsA(isA<Error>()));
   });
 
   verifyWithPrecision('1 dollar', 'en', 1, 0);
diff --git a/test/scorbeysund_timezone_test.dart b/test/scorbeysund_timezone_test.dart
index 1463f08..873b75d 100644
--- a/test/scorbeysund_timezone_test.dart
+++ b/test/scorbeysund_timezone_test.dart
@@ -1,7 +1,6 @@
 // Copyright (c) 2017, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
-// @dart=2.9
 
 /// Test date formatting and parsing while the system time zone is set to
 /// America/Scoresbysund.
diff --git a/test/timezone_local_even_test_helper.dart b/test/timezone_local_even_test_helper.dart
index 46d6c81..7df4ea6 100644
--- a/test/timezone_local_even_test_helper.dart
+++ b/test/timezone_local_even_test_helper.dart
@@ -1,7 +1,6 @@
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
-// @dart=2.9
 
 /// Test date formatting and parsing using locale data directly imported.
 ///
diff --git a/test/timezone_test_core.dart b/test/timezone_test_core.dart
index d6e9285..10d8185 100644
--- a/test/timezone_test_core.dart
+++ b/test/timezone_test_core.dart
@@ -1,7 +1,6 @@
 // Copyright (c) 2017, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
-// @dart=2.9
 
 /// Test date formatting and parsing while the system time zone is set.
 import 'dart:convert';
@@ -16,7 +15,7 @@
 /// Test for a particular timezone. In order to verify that we are in fact
 /// running in that time zone, verify that the DateTime offset is one of the
 /// expected values.
-void testTimezone(String timezoneName, {int expectedUtcOffset}) {
+void testTimezone(String timezoneName, {int? expectedUtcOffset}) {
   // Define the environment variable 'PACKAGE_DIR=<directory>' to indicate the
   // root of the Intl package. If it is not provided, we assume that the root of
   // the Intl package is the current directory.
diff --git a/test/utc_timezone_test.dart b/test/utc_timezone_test.dart
index d085e7b..7c7d494 100644
--- a/test/utc_timezone_test.dart
+++ b/test/utc_timezone_test.dart
@@ -1,7 +1,6 @@
 // Copyright (c) 2017, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
-// @dart=2.9
 
 /// Test date formatting and parsing while the system time zone is set to
 /// UTC.
