tests for about page (#35290)

diff --git a/packages/flutter/lib/src/foundation/licenses.dart b/packages/flutter/lib/src/foundation/licenses.dart
index cf44f8b..0844b62 100644
--- a/packages/flutter/lib/src/foundation/licenses.dart
+++ b/packages/flutter/lib/src/foundation/licenses.dart
@@ -4,6 +4,8 @@
 
 import 'dart:async';
 
+import 'package:meta/meta.dart' show visibleForTesting;
+
 /// Signature for callbacks passed to [LicenseRegistry.addLicense].
 typedef LicenseEntryCollector = Stream<LicenseEntry> Function();
 
@@ -306,4 +308,11 @@
     for (LicenseEntryCollector collector in _collectors)
       yield* collector();
   }
+
+  /// Resets the internal state of [LicenseRegistry]. Intended for use in
+  /// testing.
+  @visibleForTesting
+  static void reset() {
+    _collectors = null;
+  }
 }
diff --git a/packages/flutter/test/material/about_test.dart b/packages/flutter/test/material/about_test.dart
index 172d092..3d30da0 100644
--- a/packages/flutter/test/material/about_test.dart
+++ b/packages/flutter/test/material/about_test.dart
@@ -9,6 +9,10 @@
 import 'package:flutter_test/flutter_test.dart';
 
 void main() {
+  tearDown(() {
+    LicenseRegistry.reset();
+  });
+
   testWidgets('AboutListTile control test', (WidgetTester tester) async {
     await tester.pumpWidget(
       MaterialApp(
@@ -131,6 +135,72 @@
 
     await tester.pumpAndSettle();
 
-    expect(tester.getTopLeft(find.text('DEF')), const Offset(8.0 + safeareaPadding, 527.0));
+    expect(tester.getTopLeft(find.text('DEF')), const Offset(8.0 + safeareaPadding, 287.0));
   }, skip: isBrowser);
+
+  testWidgets('LicensePage returns early if unmounted', (WidgetTester tester) async {
+    final Completer<LicenseEntry> licenseCompleter = Completer<LicenseEntry>();
+    LicenseRegistry.addLicense(() {
+      return Stream<LicenseEntry>.fromFuture(licenseCompleter.future);
+    });
+
+    await tester.pumpWidget(
+      const MaterialApp(
+        home: LicensePage(),
+      ),
+    );
+    await tester.pump();
+
+    await tester.pumpWidget(
+      const MaterialApp(
+        home: Placeholder(),
+      ),
+    );
+
+    await tester.pumpAndSettle();
+    final FakeLicenseEntry licenseEntry = FakeLicenseEntry();
+    licenseCompleter.complete(licenseEntry);
+    expect(licenseEntry.paragraphsCalled, false);
+  }, skip: isBrowser);
+
+  testWidgets('LicensePage returns late if unmounted', (WidgetTester tester) async {
+    final Completer<LicenseEntry> licenseCompleter = Completer<LicenseEntry>();
+    LicenseRegistry.addLicense(() {
+      return Stream<LicenseEntry>.fromFuture(licenseCompleter.future);
+    });
+
+    await tester.pumpWidget(
+      const MaterialApp(
+        home: LicensePage(),
+      ),
+    );
+    await tester.pump();
+    final FakeLicenseEntry licenseEntry = FakeLicenseEntry();
+    licenseCompleter.complete(licenseEntry);
+
+    await tester.pumpWidget(
+      const MaterialApp(
+        home: Placeholder(),
+      ),
+    );
+
+    await tester.pumpAndSettle();
+    expect(licenseEntry.paragraphsCalled, true);
+  }, skip: isBrowser);
+}
+
+class FakeLicenseEntry extends LicenseEntry {
+  FakeLicenseEntry();
+
+  bool get paragraphsCalled => _paragraphsCalled;
+  bool _paragraphsCalled = false;
+
+  @override
+  Iterable<String> packages = <String>[];
+
+  @override
+  Iterable<LicenseParagraph> get paragraphs {
+    _paragraphsCalled = true;
+    return <LicenseParagraph>[];
+  }
 }