Update to team lints, require Dart 3.0 (#139)

diff --git a/.github/workflows/test-package.yml b/.github/workflows/test-package.yml
index 34b8073..d14e9f4 100644
--- a/.github/workflows/test-package.yml
+++ b/.github/workflows/test-package.yml
@@ -47,7 +47,7 @@
       matrix:
         # Add macos-latest and/or windows-latest if relevant for this package.
         os: [ubuntu-latest]
-        sdk: [2.18.0, dev]
+        sdk: [3.0.0, dev]
     steps:
       - uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9
       - uses: dart-lang/setup-dart@d6a63dab3335f427404425de0fbfed4686d93c4f
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 62ef87d..d084d85 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,6 +1,6 @@
-## 2.1.1-dev
+## 2.1.1-wip
 
-- Require Dart 2.18
+- Require Dart 3.0
 
 ## 2.1.0
 
diff --git a/analysis_options.yaml b/analysis_options.yaml
index 278ec48..c0249e5 100644
--- a/analysis_options.yaml
+++ b/analysis_options.yaml
@@ -2,4 +2,4 @@
 # 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.
 
-include: package:lints/recommended.yaml
+include: package:dart_flutter_team_lints/analysis_options.yaml
diff --git a/example/main.dart b/example/main.dart
index 42a5963..db137ca 100644
--- a/example/main.dart
+++ b/example/main.dart
@@ -2,9 +2,10 @@
 // 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.
 
-import 'package:package_config/package_config.dart';
 import 'dart:io' show Directory;
 
+import 'package:package_config/package_config.dart';
+
 void main() async {
   var packageConfig = await findPackageConfig(Directory.current);
   if (packageConfig == null) {
diff --git a/lib/package_config.dart b/lib/package_config.dart
index a2c0321..8f40a8b 100644
--- a/lib/package_config.dart
+++ b/lib/package_config.dart
@@ -9,7 +9,7 @@
 /// configurations in the [specified format](https://github.com/dart-lang/language/blob/master/accepted/future-releases/language-versioning/package-config-file-v2.md).
 library package_config.package_config;
 
-import 'dart:io' show File, Directory;
+import 'dart:io' show Directory, File;
 import 'dart:typed_data' show Uint8List;
 
 import 'src/discovery.dart' as discover;
diff --git a/lib/package_config_types.dart b/lib/package_config_types.dart
index 976009b..756be05 100644
--- a/lib/package_config_types.dart
+++ b/lib/package_config_types.dart
@@ -12,6 +12,6 @@
 /// {@canonicalFor errors.PackageConfigError}
 library package_config.package_config_types;
 
-export 'src/package_config.dart'
-    show PackageConfig, Package, LanguageVersion, InvalidLanguageVersion;
 export 'src/errors.dart' show PackageConfigError;
+export 'src/package_config.dart'
+    show InvalidLanguageVersion, LanguageVersion, Package, PackageConfig;
diff --git a/lib/src/discovery.dart b/lib/src/discovery.dart
index ccc86ea..352bed8 100644
--- a/lib/src/discovery.dart
+++ b/lib/src/discovery.dart
@@ -5,10 +5,9 @@
 import 'dart:io';
 import 'dart:typed_data';
 
-import 'package_config_io.dart';
-
 import 'errors.dart';
 import 'package_config_impl.dart';
+import 'package_config_io.dart';
 import 'package_config_json.dart';
 import 'packages_file.dart' as packages_file;
 import 'util_io.dart' show defaultLoader, pathJoin;
diff --git a/lib/src/errors.dart b/lib/src/errors.dart
index f351571..69c4137 100644
--- a/lib/src/errors.dart
+++ b/lib/src/errors.dart
@@ -29,4 +29,5 @@
 }
 
 /// The default `onError` handler.
+// ignore: only_throw_errors
 Never throwError(Object error) => throw error;
diff --git a/lib/src/package_config_json.dart b/lib/src/package_config_json.dart
index bd22db4..47e7e96 100644
--- a/lib/src/package_config_json.dart
+++ b/lib/src/package_config_json.dart
@@ -167,7 +167,9 @@
         name!, root, packageRoot, version, extraData, relativeRoot, (error) {
       if (error is ArgumentError) {
         onError(
-            PackageConfigFormatException(error.message, error.invalidValue));
+          PackageConfigFormatException(
+              error.message.toString(), error.invalidValue),
+        );
       } else {
         onError(error);
       }
@@ -214,7 +216,10 @@
   }
   return SimplePackageConfig(configVersion!, packageList!, extraData, (error) {
     if (error is ArgumentError) {
-      onError(PackageConfigFormatException(error.message, error.invalidValue));
+      onError(
+        PackageConfigFormatException(
+            error.message.toString(), error.invalidValue),
+      );
     } else {
       onError(error);
     }
diff --git a/lib/src/packages_file.dart b/lib/src/packages_file.dart
index 3fd7db9..5d14677 100644
--- a/lib/src/packages_file.dart
+++ b/lib/src/packages_file.dart
@@ -2,10 +2,9 @@
 // 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.
 
-import 'package_config_impl.dart';
-
-import 'util.dart';
 import 'errors.dart';
+import 'package_config_impl.dart';
+import 'util.dart';
 
 /// The language version prior to the release of language versioning.
 ///
@@ -127,7 +126,7 @@
     var package = SimplePackage.validate(packageName, rootUri, packageLocation,
         _languageVersion, null, relativeRoot, (error) {
       if (error is ArgumentError) {
-        onError(PackageConfigFormatException(error.message, source));
+        onError(PackageConfigFormatException(error.message.toString(), source));
       } else {
         onError(error);
       }
diff --git a/pubspec.yaml b/pubspec.yaml
index 08255ff..e121ab0 100644
--- a/pubspec.yaml
+++ b/pubspec.yaml
@@ -1,10 +1,10 @@
 name: package_config
-version: 2.1.1-dev
+version: 2.1.1-wip
 description: Support for reading and writing Dart Package Configuration files.
 repository: https://github.com/dart-lang/package_config
 
 environment:
-  sdk: '>=2.18.0 <3.0.0'
+  sdk: ^3.0.0
 
 dependencies:
   path: ^1.8.0
@@ -12,6 +12,6 @@
 dev_dependencies:
   build_runner: ^2.0.0
   build_test: ^2.1.2
-  build_web_compilers: '>=3.0.0 <5.0.0'
-  lints: ^2.0.0
+  build_web_compilers: ^4.0.0
+  dart_flutter_team_lints: ^1.0.0
   test: ^1.16.0
diff --git a/test/bench.dart b/test/bench.dart
index 7466431..8428481 100644
--- a/test/bench.dart
+++ b/test/bench.dart
@@ -5,10 +5,9 @@
 import 'dart:convert';
 import 'dart:typed_data';
 
+import 'package:package_config/src/errors.dart';
 import 'package:package_config/src/package_config_json.dart';
 
-void throwError(Object error) => throw error;
-
 void bench(final int size, final bool doPrint) {
   var sb = StringBuffer();
   sb.writeln('{');
@@ -32,20 +31,21 @@
   sb.writeln('}');
   var stopwatch = Stopwatch()..start();
   var config = parsePackageConfigBytes(
-      // ignore: unnecessary_cast
-      utf8.encode(sb.toString()) as Uint8List,
-      Uri.parse('file:///tmp/.dart_tool/file.dart'),
-      throwError);
-  final int read = stopwatch.elapsedMilliseconds;
+    // ignore: unnecessary_cast
+    utf8.encode(sb.toString()) as Uint8List,
+    Uri.parse('file:///tmp/.dart_tool/file.dart'),
+    throwError,
+  );
+  final read = stopwatch.elapsedMilliseconds;
 
   stopwatch.reset();
   for (var i = 0; i < size; i++) {
     if (config.packageOf(Uri.parse('file:///p_$i/lib/src/foo.dart'))!.name !=
         'p_$i') {
-      throw "Unexpected result!";
+      throw StateError('Unexpected result!');
     }
   }
-  final int lookup = stopwatch.elapsedMilliseconds;
+  final lookup = stopwatch.elapsedMilliseconds;
 
   if (doPrint) {
     print('Read file with $size packages in $read ms, '
@@ -55,12 +55,12 @@
 
 void main(List<String> args) {
   if (args.length != 1 && args.length != 2) {
-    throw "Expects arguments: <size> <warmup iterations>?";
+    throw ArgumentError('Expects arguments: <size> <warmup iterations>?');
   }
   final size = int.parse(args[0]);
   if (args.length > 1) {
     final warmups = int.parse(args[1]);
-    print("Performing $warmups warmup iterations.");
+    print('Performing $warmups warmup iterations.');
     for (var i = 0; i < warmups; i++) {
       bench(10, false);
     }
diff --git a/test/discovery_test.dart b/test/discovery_test.dart
index 17b6aa0..3eb0ea1 100644
--- a/test/discovery_test.dart
+++ b/test/discovery_test.dart
@@ -6,8 +6,9 @@
 library package_config.discovery_test;
 
 import 'dart:io';
-import 'package:test/test.dart';
+
 import 'package:package_config/package_config.dart';
+import 'package:test/test.dart';
 
 import 'src/util.dart';
 import 'src/util_io.dart';
@@ -207,7 +208,7 @@
       '.packages': packagesFile,
       'script.dart': 'main(){}'
     }, (Directory directory) async {
-      var config = (await findPackageConfig(directory, minVersion: 2));
+      var config = await findPackageConfig(directory, minVersion: 2);
       expect(config, null);
     });
 
diff --git a/test/discovery_uri_test.dart b/test/discovery_uri_test.dart
index 6183ce3..c8fbcb8 100644
--- a/test/discovery_uri_test.dart
+++ b/test/discovery_uri_test.dart
@@ -5,8 +5,8 @@
 @TestOn('vm')
 library package_config.discovery_test;
 
-import 'package:test/test.dart';
 import 'package:package_config/package_config.dart';
+import 'package:test/test.dart';
 
 import 'src/util.dart';
 
@@ -151,8 +151,8 @@
       '.packages': packagesFile,
       'script.dart': 'main(){}'
     }, (directory, loader) async {
-      var config = (await findPackageConfigUri(directory,
-          minVersion: 2, loader: loader));
+      var config =
+          await findPackageConfigUri(directory, minVersion: 2, loader: loader);
       expect(config, null);
     });
 
diff --git a/test/parse_test.dart b/test/parse_test.dart
index 94269e2..ad4c749 100644
--- a/test/parse_test.dart
+++ b/test/parse_test.dart
@@ -5,15 +5,14 @@
 import 'dart:convert';
 import 'dart:typed_data';
 
+import 'package:package_config/package_config_types.dart';
+import 'package:package_config/src/errors.dart';
+import 'package:package_config/src/package_config_json.dart';
+import 'package:package_config/src/packages_file.dart' as packages;
 import 'package:test/test.dart';
 
-import 'package:package_config/package_config_types.dart';
-import 'package:package_config/src/packages_file.dart' as packages;
-import 'package:package_config/src/package_config_json.dart';
 import 'src/util.dart';
 
-void throwError(Object error) => throw error;
-
 void main() {
   group('.packages', () {
     test('valid', () {
@@ -318,8 +317,12 @@
         test(name, () {
           dynamic exception;
           try {
-            parsePackageConfigBytes(utf8.encode(source) as Uint8List,
-                Uri.parse('file:///tmp/.dart_tool/file.dart'), throwError);
+            parsePackageConfigBytes(
+              // ignore: unnecessary_cast
+              utf8.encode(source) as Uint8List,
+              Uri.parse('file:///tmp/.dart_tool/file.dart'),
+              throwError,
+            );
           } catch (e) {
             exception = e;
           }
@@ -440,8 +443,9 @@
           'package root of foo is inside the root of bar');
 
       // This shouldn't be allowed, but for internal reasons it is.
-      test("package inside package root", () {
+      test('package inside package root', () {
         var config = parsePackageConfigBytes(
+            // ignore: unnecessary_cast
             utf8.encode(
               '{$cfg,"packages":['
               '{"name":"foo","rootUri":"/foo/","packageUri":"lib/"},'
diff --git a/test/src/util_io.dart b/test/src/util_io.dart
index 109dff1..e032556 100644
--- a/test/src/util_io.dart
+++ b/test/src/util_io.dart
@@ -4,8 +4,8 @@
 
 import 'dart:io';
 
-import 'package:test/test.dart';
 import 'package:package_config/src/util_io.dart';
+import 'package:test/test.dart';
 
 /// Creates a directory structure from [description] and runs [fileTest].
 ///