fix: assertion of missing MaterialLocalizations when using CupertinoApp
Showing
2 changed files
with
29 additions
and
10 deletions
@@ -32,18 +32,23 @@ class _ModalBottomSheet<T> extends StatefulWidget { | @@ -32,18 +32,23 @@ class _ModalBottomSheet<T> extends StatefulWidget { | ||
32 | } | 32 | } |
33 | 33 | ||
34 | class _ModalBottomSheetState<T> extends State<_ModalBottomSheet<T>> { | 34 | class _ModalBottomSheetState<T> extends State<_ModalBottomSheet<T>> { |
35 | - String _getRouteLabel(MaterialLocalizations localizations) { | 35 | + String _getRouteLabel() { |
36 | + if (Theme.of(context, shadowThemeOnly: true) == null) { | ||
37 | + return ''; | ||
38 | + } else { | ||
36 | final platform = Theme.of(context).platform; | 39 | final platform = Theme.of(context).platform; |
37 | switch (platform) { | 40 | switch (platform) { |
38 | case TargetPlatform.iOS: | 41 | case TargetPlatform.iOS: |
39 | return ''; | 42 | return ''; |
40 | case TargetPlatform.android: | 43 | case TargetPlatform.android: |
41 | case TargetPlatform.fuchsia: | 44 | case TargetPlatform.fuchsia: |
42 | - return localizations.dialogLabel; | 45 | + assert(debugCheckHasMaterialLocalizations(context)); |
46 | + return MaterialLocalizations.of(context).dialogLabel; | ||
43 | break; | 47 | break; |
44 | } | 48 | } |
45 | return null; | 49 | return null; |
46 | } | 50 | } |
51 | + } | ||
47 | 52 | ||
48 | @override | 53 | @override |
49 | void initState() { | 54 | void initState() { |
@@ -64,9 +69,6 @@ class _ModalBottomSheetState<T> extends State<_ModalBottomSheet<T>> { | @@ -64,9 +69,6 @@ class _ModalBottomSheetState<T> extends State<_ModalBottomSheet<T>> { | ||
64 | @override | 69 | @override |
65 | Widget build(BuildContext context) { | 70 | Widget build(BuildContext context) { |
66 | assert(debugCheckHasMediaQuery(context)); | 71 | assert(debugCheckHasMediaQuery(context)); |
67 | - assert(debugCheckHasMaterialLocalizations(context)); | ||
68 | - final localizations = MaterialLocalizations.of(context); | ||
69 | - final routeLabel = _getRouteLabel(localizations); | ||
70 | 72 | ||
71 | return AnimatedBuilder( | 73 | return AnimatedBuilder( |
72 | animation: widget.route._animationController, | 74 | animation: widget.route._animationController, |
@@ -76,7 +78,7 @@ class _ModalBottomSheetState<T> extends State<_ModalBottomSheet<T>> { | @@ -76,7 +78,7 @@ class _ModalBottomSheetState<T> extends State<_ModalBottomSheet<T>> { | ||
76 | return Semantics( | 78 | return Semantics( |
77 | scopesRoute: true, | 79 | scopesRoute: true, |
78 | namesRoute: true, | 80 | namesRoute: true, |
79 | - label: routeLabel, | 81 | + label: _getRouteLabel(), |
80 | explicitChildNodes: true, | 82 | explicitChildNodes: true, |
81 | child: ModalBottomSheet( | 83 | child: ModalBottomSheet( |
82 | expanded: widget.route.expanded, | 84 | expanded: widget.route.expanded, |
@@ -4,10 +4,15 @@ | @@ -4,10 +4,15 @@ | ||
4 | 4 | ||
5 | import 'dart:async'; | 5 | import 'dart:async'; |
6 | 6 | ||
7 | -import 'package:flutter/cupertino.dart'; | 7 | +import 'package:flutter/cupertino.dart' show CupertinoTheme; |
8 | import 'package:flutter/foundation.dart'; | 8 | import 'package:flutter/foundation.dart'; |
9 | import 'package:flutter/gestures.dart'; | 9 | import 'package:flutter/gestures.dart'; |
10 | -import 'package:flutter/material.dart'; | 10 | +import 'package:flutter/material.dart' |
11 | + show | ||
12 | + Colors, | ||
13 | + Theme, | ||
14 | + MaterialLocalizations, | ||
15 | + debugCheckHasMaterialLocalizations; | ||
11 | import 'package:flutter/services.dart'; | 16 | import 'package:flutter/services.dart'; |
12 | import 'package:flutter/widgets.dart'; | 17 | import 'package:flutter/widgets.dart'; |
13 | 18 | ||
@@ -78,7 +83,13 @@ Future<T> showCupertinoModalBottomSheet<T>({ | @@ -78,7 +83,13 @@ Future<T> showCupertinoModalBottomSheet<T>({ | ||
78 | assert(useRootNavigator != null); | 83 | assert(useRootNavigator != null); |
79 | assert(enableDrag != null); | 84 | assert(enableDrag != null); |
80 | assert(debugCheckHasMediaQuery(context)); | 85 | assert(debugCheckHasMediaQuery(context)); |
86 | + final isCupertinoApp = Theme.of(context, shadowThemeOnly: true) == null; | ||
87 | + String barrierLabel = ''; | ||
88 | + if (!isCupertinoApp) { | ||
81 | assert(debugCheckHasMaterialLocalizations(context)); | 89 | assert(debugCheckHasMaterialLocalizations(context)); |
90 | + barrierLabel = MaterialLocalizations.of(context).modalBarrierDismissLabel; | ||
91 | + } | ||
92 | + | ||
82 | final result = await Navigator.of(context, rootNavigator: useRootNavigator) | 93 | final result = await Navigator.of(context, rootNavigator: useRootNavigator) |
83 | .push(CupertinoModalBottomSheetRoute<T>( | 94 | .push(CupertinoModalBottomSheetRoute<T>( |
84 | builder: builder, | 95 | builder: builder, |
@@ -88,7 +99,7 @@ Future<T> showCupertinoModalBottomSheet<T>({ | @@ -88,7 +99,7 @@ Future<T> showCupertinoModalBottomSheet<T>({ | ||
88 | ), | 99 | ), |
89 | secondAnimationController: secondAnimation, | 100 | secondAnimationController: secondAnimation, |
90 | expanded: expand, | 101 | expanded: expand, |
91 | - barrierLabel: MaterialLocalizations.of(context).modalBarrierDismissLabel, | 102 | + barrierLabel: barrierLabel, |
92 | elevation: elevation, | 103 | elevation: elevation, |
93 | bounce: bounce, | 104 | bounce: bounce, |
94 | shape: shape, | 105 | shape: shape, |
@@ -264,7 +275,13 @@ class CupertinoScaffold extends StatefulWidget { | @@ -264,7 +275,13 @@ class CupertinoScaffold extends StatefulWidget { | ||
264 | assert(useRootNavigator != null); | 275 | assert(useRootNavigator != null); |
265 | assert(enableDrag != null); | 276 | assert(enableDrag != null); |
266 | assert(debugCheckHasMediaQuery(context)); | 277 | assert(debugCheckHasMediaQuery(context)); |
278 | + assert(debugCheckHasMediaQuery(context)); | ||
279 | + final isCupertinoApp = Theme.of(context, shadowThemeOnly: true) == null; | ||
280 | + String barrierLabel = ''; | ||
281 | + if (!isCupertinoApp) { | ||
267 | assert(debugCheckHasMaterialLocalizations(context)); | 282 | assert(debugCheckHasMaterialLocalizations(context)); |
283 | + barrierLabel = MaterialLocalizations.of(context).modalBarrierDismissLabel; | ||
284 | + } | ||
268 | final result = await Navigator.of(context, rootNavigator: useRootNavigator) | 285 | final result = await Navigator.of(context, rootNavigator: useRootNavigator) |
269 | .push(CupertinoModalBottomSheetRoute<T>( | 286 | .push(CupertinoModalBottomSheetRoute<T>( |
270 | builder: builder, | 287 | builder: builder, |
@@ -274,7 +291,7 @@ class CupertinoScaffold extends StatefulWidget { | @@ -274,7 +291,7 @@ class CupertinoScaffold extends StatefulWidget { | ||
274 | backgroundColor: backgroundColor, | 291 | backgroundColor: backgroundColor, |
275 | ), | 292 | ), |
276 | expanded: expand, | 293 | expanded: expand, |
277 | - barrierLabel: MaterialLocalizations.of(context).modalBarrierDismissLabel, | 294 | + barrierLabel: barrierLabel, |
278 | bounce: bounce, | 295 | bounce: bounce, |
279 | isDismissible: isDismissible ?? expand == false ? true : false, | 296 | isDismissible: isDismissible ?? expand == false ? true : false, |
280 | modalBarrierColor: barrierColor ?? Colors.black12, | 297 | modalBarrierColor: barrierColor ?? Colors.black12, |
-
Please register or login to post a comment