Publish check ignores prerelease sdk (#3560)

diff --git a/script/tool/lib/src/publish_check_command.dart b/script/tool/lib/src/publish_check_command.dart
index 8d6f6bb..af00995 100644
--- a/script/tool/lib/src/publish_check_command.dart
+++ b/script/tool/lib/src/publish_check_command.dart
@@ -3,6 +3,7 @@
 // found in the LICENSE file.
 
 import 'dart:async';
+import 'dart:io' as io;
 
 import 'package:colorize/colorize.dart';
 import 'package:file/file.dart';
@@ -63,6 +64,44 @@
     }
   }
 
+  Future<bool> hasValidPublishCheckRun(Directory package) async {
+    final io.Process process = await io.Process.start(
+      'flutter',
+      <String>['pub', 'publish', '--', '--dry-run'],
+      workingDirectory: package.path,
+    );
+
+    final StringBuffer outputBuffer = StringBuffer();
+
+    final Completer<void> stdOutCompleter = Completer<void>();
+    process.stdout.listen(
+      (List<int> event) {
+        io.stdout.add(event);
+        outputBuffer.write(String.fromCharCodes(event));
+      },
+      onDone: () => stdOutCompleter.complete(),
+    );
+
+    final Completer<void> stdInCompleter = Completer<void>();
+    process.stderr.listen(
+      (List<int> event) {
+        io.stderr.add(event);
+        outputBuffer.write(String.fromCharCodes(event));
+      },
+      onDone: () => stdInCompleter.complete(),
+    );
+
+    if (await process.exitCode == 0) return true;
+
+    await stdOutCompleter.future;
+    await stdInCompleter.future;
+
+    final String output = outputBuffer.toString();
+    return output.contains('Package has 1 warning.') &&
+        output.contains(
+            'Packages with an SDK constraint on a pre-release of the Dart SDK should themselves be published as a pre-release version.');
+  }
+
   Future<bool> passesPublishCheck(Directory package) async {
     final String packageName = package.basename;
     print('Checking that $packageName can be published.');
@@ -75,13 +114,7 @@
       return true;
     }
 
-    final int exitCode = await processRunner.runAndStream(
-      'flutter',
-      <String>['pub', 'publish', '--', '--dry-run'],
-      workingDir: package,
-    );
-
-    if (exitCode == 0) {
+    if (await hasValidPublishCheckRun(package)) {
       print("Package $packageName is able to be published.");
       return true;
     } else {