diff --git a/lib/src/entrypoint.dart b/lib/src/entrypoint.dart
index 1de6570..3f2be96 100644
--- a/lib/src/entrypoint.dart
+++ b/lib/src/entrypoint.dart
@@ -282,7 +282,7 @@
     // an up-to-date package-config.
     await ensureUpToDate(workspaceRoot.dir, cache: cache);
     final packages = {
-      for (var packageEntry in packageConfig.nonInjectedPackages)
+      for (var packageEntry in packageConfig.packages)
         packageEntry.name: Package.load(
           packageEntry.resolvedRootDir(packageConfigPath),
           expectedName: packageEntry.name,
@@ -952,7 +952,7 @@
 
       final packagePathsMapping = <String, String>{};
 
-      final packagesToCheck = packageConfig.nonInjectedPackages;
+      final packagesToCheck = packageConfig.packages;
       for (final pkg in packagesToCheck) {
         // Pub always makes a packageUri of lib/
         if (pkg.packageUri == null || pkg.packageUri.toString() != 'lib/') {
@@ -982,7 +982,7 @@
 
       // Check if language version specified in the `package_config.json` is
       // correct. This is important for path dependencies as these can mutate.
-      for (final pkg in packageConfig.nonInjectedPackages) {
+      for (final pkg in packageConfig.packages) {
         if (pkg.name == root.name) continue;
         final id = lockFile.packages[pkg.name];
         if (id == null) {
diff --git a/lib/src/package_config.dart b/lib/src/package_config.dart
index c5d330b..ffffe59 100644
--- a/lib/src/package_config.dart
+++ b/lib/src/package_config.dart
@@ -144,22 +144,8 @@
     'generator': generator,
     'generatorVersion': generatorVersion?.toString(),
   }..addAll(additionalProperties);
-
-  // We allow the package called 'flutter_gen' to be injected into
-  // package_config.
-  //
-  // This is somewhat a hack. But it allows flutter to generate code in a
-  // package as it likes.
-  //
-  // See https://github.com/flutter/flutter/issues/73870 .
-  Iterable<PackageConfigEntry> get nonInjectedPackages =>
-      packages.where((package) => !_isInjectedFlutterGenPackage(package));
 }
 
-bool _isInjectedFlutterGenPackage(PackageConfigEntry package) =>
-    package.name == 'flutter_gen' &&
-    package.rootUri.toString() == 'flutter_gen';
-
 class PackageConfigEntry {
   /// Package name.
   String name;
diff --git a/test/embedding/embedding_test.dart b/test/embedding/embedding_test.dart
index 83176d8..772cd5a 100644
--- a/test/embedding/embedding_test.dart
+++ b/test/embedding/embedding_test.dart
@@ -99,30 +99,6 @@
     File(snapshot).parent.deleteSync(recursive: true);
   });
 
-  test('Can depend on package:flutter_gen', () async {
-    // Regression test for https://github.com/dart-lang/pub/issues/3314.
-    final server = await servePackages();
-    server.serve(
-      'flutter_gen',
-      '1.0.0',
-      contents: [
-        d.dir('bin', [d.file('flutter_gen.dart', 'main() {print("hi");}')]),
-      ],
-    );
-
-    await d.appDir(dependencies: {'flutter_gen': '^1.0.0'}).create();
-    await pubGet();
-    final buffer = StringBuffer();
-
-    await runEmbeddingToBuffer(
-      ['run', 'flutter_gen'],
-      buffer,
-      workingDirectory: d.path(appPath),
-      environment: getPubTestEnvironment(),
-    );
-    expect(buffer.toString(), contains('hi'));
-  });
-
   testWithGolden('run works, though hidden', (ctx) async {
     await servePackages();
     await d.dir(appPath, [
diff --git a/test/embedding/ensure_pubspec_resolved.dart b/test/embedding/ensure_pubspec_resolved.dart
index a6160f1..ebc6599 100644
--- a/test/embedding/ensure_pubspec_resolved.dart
+++ b/test/embedding/ensure_pubspec_resolved.dart
@@ -7,7 +7,6 @@
 // embedding_test.dart
 
 import 'dart:async';
-import 'dart:convert';
 import 'dart:io';
 
 import 'package:path/path.dart' as p;
@@ -37,45 +36,6 @@
       await pubGet();
     });
 
-    test(
-      'does not require a pub get '
-      'if a `flutter_gen` package is injected into package_config.json',
-      () async {
-        await d.dir('bar', [
-          d.pubspec({'name': 'bar'}),
-        ]).create();
-        await d.dir(appPath, [
-          d.appPubspec(
-            dependencies: {
-              'bar': {'path': '../bar'},
-            },
-          ),
-        ]).create();
-
-        await pubGet();
-
-        final packageConfig = p.join(
-          d.sandbox,
-          'myapp',
-          '.dart_tool',
-          'package_config.json',
-        );
-        final contents =
-            json.decode(File(packageConfig).readAsStringSync()) as Map;
-        (contents['packages'] as List).add({
-          'name': 'flutter_gen',
-          'rootUri': 'flutter_gen',
-          'languageVersion': '2.8',
-        });
-        writeTextFile(packageConfig, json.encode(contents));
-
-        await runPub(
-          args: ['run', 'bin/script.dart'],
-          output: endsWith('hello!'),
-        );
-      },
-    );
-
     group('Does an implicit pub get if', () {
       test("there's no lockfile", () async {
         File(p.join(d.sandbox, 'myapp/pubspec.lock')).deleteSync();
