fix a MaterialApp NNBD issue (#81529)

This commit is contained in:
xubaolin 2021-05-07 22:04:03 +08:00 committed by GitHub
parent 9cc8d78ec7
commit 562b6f76b3
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 16 additions and 2 deletions

View File

@ -815,7 +815,7 @@ class _MaterialAppState extends State<MaterialApp> {
return widget.builder!(context, child); return widget.builder!(context, child);
}, },
) )
: child!, : child ?? const SizedBox.shrink(),
), ),
); );
} }

View File

@ -1170,7 +1170,7 @@ class _WidgetsAppState extends State<WidgetsApp> with WidgetsBindingObserver {
assert(!_usesRouter); assert(!_usesRouter);
_defaultRouteInformationProvider?.dispose(); _defaultRouteInformationProvider?.dispose();
_defaultRouteInformationProvider = null; _defaultRouteInformationProvider = null;
if (oldWidget == null || widget.navigatorKey != oldWidget.navigatorKey) { if (_navigator == null || widget.navigatorKey != oldWidget!.navigatorKey) {
_navigator = widget.navigatorKey ?? GlobalObjectKey<NavigatorState>(this); _navigator = widget.navigatorKey ?? GlobalObjectKey<NavigatorState>(this);
} }
assert(_navigator != null); assert(_navigator != null);

View File

@ -64,6 +64,20 @@ class ElevationColor {
} }
void main() { void main() {
// Regression test for https://github.com/flutter/flutter/issues/81504
testWidgets('MaterialApp.home nullable and update test', (WidgetTester tester) async {
// _WidgetsAppState._usesNavigator == true
await tester.pumpWidget(const MaterialApp(home: SizedBox.shrink()));
// _WidgetsAppState._usesNavigator == false
await tester.pumpWidget(const MaterialApp()); // Do not crash!
// _WidgetsAppState._usesNavigator == true
await tester.pumpWidget(const MaterialApp(home: SizedBox.shrink())); // Do not crash!
expect(tester.takeException(), null);
});
testWidgets('default Material debugFillProperties', (WidgetTester tester) async { testWidgets('default Material debugFillProperties', (WidgetTester tester) async {
final DiagnosticPropertiesBuilder builder = DiagnosticPropertiesBuilder(); final DiagnosticPropertiesBuilder builder = DiagnosticPropertiesBuilder();
const Material().debugFillProperties(builder); const Material().debugFillProperties(builder);