Unverified Commit 7f7a8778 authored by harperl-lgtm's avatar harperl-lgtm Committed by GitHub

Implemented Scrim Focus for BottomSheet (#116743)

* Implemented Scrim Focus for BottomSheet so that assistive technology users can focus and tap on the scrim to close the BottomSheet, which they could not do before the change . The Scrim Focus's size changes to avoid overlapping the BottomSheet.
parent 50a23d96
......@@ -163,6 +163,16 @@ abstract class MaterialLocalizations {
/// Label indicating that a given date is the current date.
String get currentDateLabel;
/// Label for the scrim rendered underneath the content of a modal route.
String get scrimLabel;
/// Label for a BottomSheet.
String get bottomSheetLabel;
/// Hint text announced when tapping on the scrim underneath the content of
/// a modal route.
String scrimOnTapHint(String modalRouteContentName);
/// The format used to lay out the time picker.
///
/// The documentation for [TimeOfDayFormat] enum values provides details on
......@@ -1024,6 +1034,15 @@ class DefaultMaterialLocalizations implements MaterialLocalizations {
@override
String get currentDateLabel => 'Today';
@override
String get scrimLabel => 'Scrim';
@override
String get bottomSheetLabel => 'Bottom Sheet';
@override
String scrimOnTapHint(String modalRouteContentName) => 'Close $modalRouteContentName';
@override
String aboutListTileTitle(String applicationName) => 'About $applicationName';
......
......@@ -14,6 +14,102 @@ import 'gesture_detector.dart';
import 'navigator.dart';
import 'transitions.dart';
/// A widget that modifies the size of the [SemanticsNode.rect] created by its
/// child widget.
///
/// It clips the focus in potentially four directions based on the
/// specified [EdgeInsets].
///
/// The size of the accessibility focus is adjusted based on value changes
/// inside the given [ValueNotifier].
///
/// See also:
///
/// * [ModalBarrier], which utilizes this widget to adjust the barrier focus
/// size based on the size of the content layer rendered on top of it.
class _SemanticsClipper extends SingleChildRenderObjectWidget{
/// creates a [SemanticsClipper] that updates the size of the
/// [SemanticsNode.rect] of its child based on the value inside the provided
/// [ValueNotifier], or a default value of [EdgeInsets.zero].
const _SemanticsClipper({
super.child,
required this.clipDetailsNotifier,
});
/// The [ValueNotifier] whose value determines how the child's
/// [SemanticsNode.rect] should be clipped in four directions.
final ValueNotifier<EdgeInsets> clipDetailsNotifier;
@override
_RenderSemanticsClipper createRenderObject(BuildContext context) {
return _RenderSemanticsClipper(clipDetailsNotifier: clipDetailsNotifier,);
}
@override
void updateRenderObject(BuildContext context, _RenderSemanticsClipper renderObject) {
renderObject.clipDetailsNotifier = clipDetailsNotifier;
}
}
/// Updates the [SemanticsNode.rect] of its child based on the value inside
/// provided [ValueNotifier].
class _RenderSemanticsClipper extends RenderProxyBox {
/// Creats a [RenderProxyBox] that Updates the [SemanticsNode.rect] of its child
/// based on the value inside provided [ValueNotifier].
_RenderSemanticsClipper({
required ValueNotifier<EdgeInsets> clipDetailsNotifier,
RenderBox? child,
}) : _clipDetailsNotifier = clipDetailsNotifier,
super(child);
ValueNotifier<EdgeInsets> _clipDetailsNotifier;
/// The getter and setter retrieves / updates the [ValueNotifier] associated
/// with this clipper.
ValueNotifier<EdgeInsets> get clipDetailsNotifier => _clipDetailsNotifier;
set clipDetailsNotifier (ValueNotifier<EdgeInsets> newNotifier) {
if (_clipDetailsNotifier == newNotifier) {
return;
}
if(attached) {
_clipDetailsNotifier.removeListener(markNeedsSemanticsUpdate);
}
_clipDetailsNotifier = newNotifier;
_clipDetailsNotifier.addListener(markNeedsSemanticsUpdate);
markNeedsSemanticsUpdate();
}
@override
Rect get semanticBounds {
final EdgeInsets clipDetails = _clipDetailsNotifier == null ? EdgeInsets.zero :_clipDetailsNotifier.value;
final Rect originalRect = super.semanticBounds;
final Rect clippedRect = Rect.fromLTRB(
originalRect.left + clipDetails.left,
originalRect.top + clipDetails.top,
originalRect.right - clipDetails.right,
originalRect.bottom - clipDetails.bottom,
);
return clippedRect;
}
@override
void attach(PipelineOwner owner) {
super.attach(owner);
clipDetailsNotifier.addListener(markNeedsSemanticsUpdate);
}
@override
void detach() {
clipDetailsNotifier.removeListener(markNeedsSemanticsUpdate);
super.detach();
}
@override
void describeSemanticsConfiguration(SemanticsConfiguration config) {
super.describeSemanticsConfiguration(config);
config.isSemanticBoundary = true;
}
}
/// A widget that prevents the user from interacting with widgets behind itself.
///
/// The modal barrier is the scrim that is rendered behind each route, which
......@@ -37,6 +133,8 @@ class ModalBarrier extends StatelessWidget {
this.onDismiss,
this.semanticsLabel,
this.barrierSemanticsDismissible = true,
this.clipDetailsNotifier,
this.semanticsOnTapHint,
});
/// If non-null, fill the barrier with this color.
......@@ -91,17 +189,31 @@ class ModalBarrier extends StatelessWidget {
/// [ModalBarrier] built by [ModalRoute] pages.
final String? semanticsLabel;
/// {@template flutter.widgets.ModalBarrier.clipDetailsNotifier}
/// Contains a value of type [EdgeInsets] that specifies how the
/// [SemanticsNode.rect] of the widget should be clipped.
///
/// See also:
///
/// * [_SemanticsClipper], which utilizes the value inside to update the
/// [SemanticsNode.rect] for its child.
/// {@endtemplate}
final ValueNotifier<EdgeInsets>? clipDetailsNotifier;
/// {@macro flutter.material.ModalBottomSheetRoute.barrierOnTapHint}
final String? semanticsOnTapHint;
@override
Widget build(BuildContext context) {
assert(!dismissible || semanticsLabel == null || debugCheckHasDirectionality(context));
final bool platformSupportsDismissingBarrier;
switch (defaultTargetPlatform) {
case TargetPlatform.android:
case TargetPlatform.fuchsia:
case TargetPlatform.linux:
case TargetPlatform.windows:
platformSupportsDismissingBarrier = false;
break;
case TargetPlatform.android:
case TargetPlatform.iOS:
case TargetPlatform.macOS:
platformSupportsDismissingBarrier = true;
......@@ -123,16 +235,11 @@ class ModalBarrier extends StatelessWidget {
}
}
return BlockSemantics(
child: ExcludeSemantics(
// On Android, the back button is used to dismiss a modal. On iOS, some
// modal barriers are not dismissible in accessibility mode.
excluding: !semanticsDismissible || !modalBarrierSemanticsDismissible,
child: _ModalBarrierGestureDetector(
onDismiss: handleDismiss,
child: Semantics(
Widget barrier = Semantics(
onTapHint: semanticsOnTapHint,
onTap: semanticsDismissible && semanticsLabel != null ? handleDismiss : null,
onDismiss: semanticsDismissible && semanticsLabel != null ? handleDismiss : null,
label: semanticsDismissible ? semanticsLabel : null,
onDismiss: semanticsDismissible ? handleDismiss : null,
textDirection: semanticsDismissible && semanticsLabel != null ? Directionality.of(context) : null,
child: MouseRegion(
cursor: SystemMouseCursors.basic,
......@@ -143,7 +250,27 @@ class ModalBarrier extends StatelessWidget {
),
),
),
),
);
// Developers can set [dismissible: true] and [barrierSemanticsDismissible: true]
// to allow assistive technology users to dismiss a modal BottomSheet by
// tapping on the Scrim focus.
// On iOS, some modal barriers are not dismissible in accessibility mode.
final bool excluding = !semanticsDismissible || !modalBarrierSemanticsDismissible;
if (!excluding && clipDetailsNotifier != null) {
barrier = _SemanticsClipper(
clipDetailsNotifier: clipDetailsNotifier!,
child: barrier,
);
}
return BlockSemantics(
child: ExcludeSemantics(
excluding: excluding,
child: _ModalBarrierGestureDetector(
onDismiss: handleDismiss,
child: barrier,
),
),
);
......@@ -175,6 +302,8 @@ class AnimatedModalBarrier extends AnimatedWidget {
this.semanticsLabel,
this.barrierSemanticsDismissible,
this.onDismiss,
this.clipDetailsNotifier,
this.semanticsOnTapHint,
}) : super(listenable: color);
/// If non-null, fill the barrier with this color.
......@@ -214,6 +343,19 @@ class AnimatedModalBarrier extends AnimatedWidget {
/// {@macro flutter.widgets.ModalBarrier.onDismiss}
final VoidCallback? onDismiss;
/// {@macro flutter.widgets.ModalBarrier.clipDetailsNotifier}
final ValueNotifier<EdgeInsets>? clipDetailsNotifier;
/// This hint text instructs users what they are able to do when they tap on
/// the [ModalBarrier]
///
/// E.g. If the hint text is 'close bottom sheet", it will be announced as
/// "Double tap to close bottom sheet".
///
/// If this value is null, the default onTapHint will be applied, resulting
/// in the announcement of 'Double tap to activate'.
final String? semanticsOnTapHint;
@override
Widget build(BuildContext context) {
return ModalBarrier(
......@@ -222,6 +364,8 @@ class AnimatedModalBarrier extends AnimatedWidget {
semanticsLabel: semanticsLabel,
barrierSemanticsDismissible: barrierSemanticsDismissible,
onDismiss: onDismiss,
clipDetailsNotifier: clipDetailsNotifier,
semanticsOnTapHint: semanticsOnTapHint,
);
}
}
......@@ -266,17 +410,6 @@ class _AnyTapGestureRecognizer extends BaseTapGestureRecognizer {
String get debugDescription => 'any tap';
}
class _ModalBarrierSemanticsDelegate extends SemanticsGestureDelegate {
const _ModalBarrierSemanticsDelegate({this.onDismiss});
final VoidCallback? onDismiss;
@override
void assignSemantics(RenderSemanticsGestureHandler renderObject) {
renderObject.onTap = onDismiss;
}
}
class _AnyTapGestureRecognizerFactory extends GestureRecognizerFactory<_AnyTapGestureRecognizer> {
const _AnyTapGestureRecognizerFactory({this.onAnyTapUp});
......@@ -317,7 +450,6 @@ class _ModalBarrierGestureDetector extends StatelessWidget {
return RawGestureDetector(
gestures: gestures,
behavior: HitTestBehavior.opaque,
semantics: _ModalBarrierSemanticsDelegate(onDismiss: onDismiss),
child: child,
);
}
......
......@@ -1664,6 +1664,37 @@ abstract class ModalRoute<T> extends TransitionRoute<T> with LocalHistoryRoute<T
// one of the builders
late OverlayEntry _modalBarrier;
Widget _buildModalBarrier(BuildContext context) {
Widget barrier = buildModalBarrier();
if (filter != null) {
barrier = BackdropFilter(
filter: filter!,
child: barrier,
);
}
barrier = IgnorePointer(
ignoring: animation!.status == AnimationStatus.reverse || // changedInternalState is called when animation.status updates
animation!.status == AnimationStatus.dismissed, // dismissed is possible when doing a manual pop gesture
child: barrier,
);
if (semanticsDismissible && barrierDismissible) {
// To be sorted after the _modalScope.
barrier = Semantics(
sortKey: const OrdinalSortKey(1.0),
child: barrier,
);
}
return barrier;
}
/// Build the barrier for this [ModalRoute], subclasses can override
/// this method to create their own barrier with customized features such as
/// color or accessibility focus size.
///
/// See also:
/// * [ModalBarrier], which is typically used to build a barrier.
/// * [ModalBottomSheetRoute], which overrides this method to build a
/// customized barrier.
Widget buildModalBarrier() {
Widget barrier;
if (barrierColor != null && barrierColor!.alpha != 0 && !offstage) { // changedInternalState is called if barrierColor or offstage updates
assert(barrierColor != barrierColor!.withOpacity(0.0));
......@@ -1686,24 +1717,7 @@ abstract class ModalRoute<T> extends TransitionRoute<T> with LocalHistoryRoute<T
barrierSemanticsDismissible: semanticsDismissible,
);
}
if (filter != null) {
barrier = BackdropFilter(
filter: filter!,
child: barrier,
);
}
barrier = IgnorePointer(
ignoring: animation!.status == AnimationStatus.reverse || // changedInternalState is called when animation.status updates
animation!.status == AnimationStatus.dismissed, // dismissed is possible when doing a manual pop gesture
child: barrier,
);
if (semanticsDismissible && barrierDismissible) {
// To be sorted after the _modalScope.
barrier = Semantics(
sortKey: const OrdinalSortKey(1.0),
child: barrier,
);
}
return barrier;
}
......
......@@ -785,7 +785,15 @@ void main() {
),
],
),
TestSemantics(),
TestSemantics(
children: <TestSemantics>[
TestSemantics(
actions: <SemanticsAction>[SemanticsAction.tap, SemanticsAction.dismiss],
label: 'Scrim',
textDirection: TextDirection.ltr,
),
],
),
],
),
],
......@@ -929,7 +937,15 @@ void main() {
),
],
),
TestSemantics(),
TestSemantics(
children: <TestSemantics>[
TestSemantics(
actions: <SemanticsAction>[SemanticsAction.tap, SemanticsAction.dismiss],
label: 'Scrim',
textDirection: TextDirection.ltr,
),
],
),
],
),
],
......
......@@ -1327,6 +1327,9 @@ void main() {
expect(semantics, hasSemantics(TestSemantics.root(
children: <TestSemantics>[
TestSemantics.rootChild(
actions: <SemanticsAction>[SemanticsAction.tap, SemanticsAction.dismiss],
label: 'Dismiss',
textDirection: TextDirection.ltr,
children: <TestSemantics>[
TestSemantics(
flags: <SemanticsFlag>[
......
......@@ -123,6 +123,10 @@ void main() {
expect(localizations.keyboardKeyShift, isNotNull);
expect(localizations.keyboardKeySpace, isNotNull);
expect(localizations.currentDateLabel, isNotNull);
expect(localizations.scrimLabel, isNotNull);
expect(localizations.bottomSheetLabel, isNotNull);
expect(localizations.scrimOnTapHint('FOO'), contains('FOO'));
expect(localizations.aboutListTileTitle('FOO'), isNotNull);
expect(localizations.aboutListTileTitle('FOO'), contains('FOO'));
......
......@@ -1200,7 +1200,11 @@ void main() {
),
],
),
TestSemantics(),
TestSemantics(
actions: <SemanticsAction>[SemanticsAction.tap, SemanticsAction.dismiss],
label: 'Dismiss',
textDirection: TextDirection.ltr,
),
],
),
],
......@@ -1284,7 +1288,11 @@ void main() {
),
],
),
TestSemantics(),
TestSemantics(
actions: <SemanticsAction>[SemanticsAction.tap, SemanticsAction.dismiss],
label: 'Dismiss',
textDirection: TextDirection.ltr,
),
],
),
],
......@@ -1403,7 +1411,11 @@ void main() {
),
],
),
TestSemantics(),
TestSemantics(
actions: <SemanticsAction>[SemanticsAction.tap, SemanticsAction.dismiss],
label: 'Dismiss',
textDirection: TextDirection.ltr,
),
],
),
],
......
......@@ -436,7 +436,7 @@ void main() {
semantics.dispose();
});
testWidgets('Dismissible ModalBarrier includes button in semantic tree on iOS', (WidgetTester tester) async {
testWidgets('Dismissible ModalBarrier includes button in semantic tree on iOS, macOS and android', (WidgetTester tester) async {
final SemanticsTester semantics = SemanticsTester(tester);
await tester.pumpWidget(const Directionality(
textDirection: TextDirection.ltr,
......@@ -448,6 +448,7 @@ void main() {
final TestSemantics expectedSemantics = TestSemantics.root(
children: <TestSemantics>[
TestSemantics.rootChild(
id: 1,
rect: TestSemantics.fullScreen,
actions: <SemanticsAction>[SemanticsAction.tap, SemanticsAction.dismiss],
label: 'Dismiss',
......@@ -458,18 +459,7 @@ void main() {
expect(semantics, hasSemantics(expectedSemantics, ignoreId: true));
semantics.dispose();
}, variant: const TargetPlatformVariant(<TargetPlatform>{ TargetPlatform.iOS, TargetPlatform.macOS}));
testWidgets(
'Dismissible ModalBarrier is hidden on Android (back button is used to dismiss)', (WidgetTester tester) async {
final SemanticsTester semantics = SemanticsTester(tester);
await tester.pumpWidget(const ModalBarrier());
final TestSemantics expectedSemantics = TestSemantics.root();
expect(semantics, hasSemantics(expectedSemantics));
semantics.dispose();
});
}, variant: const TargetPlatformVariant(<TargetPlatform>{ TargetPlatform.iOS, TargetPlatform.macOS, TargetPlatform.android}));
});
group('AnimatedModalBarrier', () {
testWidgets('prevents interactions with widgets behind it', (WidgetTester tester) async {
......@@ -863,7 +853,7 @@ void main() {
semantics.dispose();
});
testWidgets('Dismissible AnimatedModalBarrier includes button in semantic tree on iOS', (WidgetTester tester) async {
testWidgets('Dismissible AnimatedModalBarrier includes button in semantic tree on iOS, macOS and android', (WidgetTester tester) async {
final SemanticsTester semantics = SemanticsTester(tester);
await tester.pumpWidget(Directionality(
textDirection: TextDirection.ltr,
......@@ -886,18 +876,37 @@ void main() {
expect(semantics, hasSemantics(expectedSemantics, ignoreId: true));
semantics.dispose();
}, variant: const TargetPlatformVariant(<TargetPlatform>{ TargetPlatform.iOS, TargetPlatform.macOS}));
}, variant: const TargetPlatformVariant(<TargetPlatform>{ TargetPlatform.iOS, TargetPlatform.macOS, TargetPlatform.android}));
});
testWidgets(
'Dismissible AnimatedModalBarrier is hidden on Android (back button is used to dismiss)', (WidgetTester tester) async {
group('SemanticsClipper', () {
testWidgets('SemanticsClipper correctly clips Semantics.rect in four directions', (WidgetTester tester) async {
final SemanticsTester semantics = SemanticsTester(tester);
await tester.pumpWidget(AnimatedModalBarrier(color: colorAnimation));
final ValueNotifier<EdgeInsets> notifier = ValueNotifier<EdgeInsets>(const EdgeInsets.fromLTRB(10, 20, 30, 40));
const Rect fullScreen = TestSemantics.fullScreen;
await tester.pumpWidget(Directionality(
textDirection: TextDirection.ltr,
child: ModalBarrier(
semanticsLabel: 'Dismiss',
clipDetailsNotifier: notifier,
),
));
final TestSemantics expectedSemantics = TestSemantics.root();
expect(semantics, hasSemantics(expectedSemantics));
final TestSemantics expectedSemantics = TestSemantics.root(
children: <TestSemantics>[
TestSemantics.rootChild(
rect: Rect.fromLTRB(fullScreen.left + 10, fullScreen.top + 20.0, fullScreen.right - 30, fullScreen.bottom - 40),
actions: <SemanticsAction>[SemanticsAction.tap, SemanticsAction.dismiss],
label: 'Dismiss',
textDirection: TextDirection.ltr,
),
],
);
expect(semantics, hasSemantics(expectedSemantics, ignoreId: true));
semantics.dispose();
});
}, variant: const TargetPlatformVariant(<TargetPlatform>{ TargetPlatform.iOS, TargetPlatform.macOS, TargetPlatform.android}));
});
testWidgets('uses default mouse cursor', (WidgetTester tester) async {
......
......@@ -130,5 +130,8 @@
"keyboardKeyMetaWindows": "Win",
"menuBarMenuLabel": "Kieslysbalkkieslys",
"currentDateLabel": "Date of today",
"scrimLabel": "Scrim",
"bottomSheetLabel": "Bottom Sheet",
"scrimOnTapHint": "Close $modalRouteName",
"keyboardKeyShift": "Shift"
}
......@@ -130,5 +130,8 @@
"keyboardKeyMetaWindows": "Win",
"menuBarMenuLabel": "የምናሌ አሞሌ ምናሌ",
"currentDateLabel": "Date of today",
"scrimLabel": "Scrim",
"bottomSheetLabel": "Bottom Sheet",
"scrimOnTapHint": "Close $modalRouteName",
"keyboardKeyShift": "Shift"
}
......@@ -141,5 +141,8 @@
"keyboardKeyMetaWindows": "Win",
"menuBarMenuLabel": "قائمة شريط القوائم",
"currentDateLabel": "Date of today",
"scrimLabel": "Scrim",
"bottomSheetLabel": "Bottom Sheet",
"scrimOnTapHint": "Close $modalRouteName",
"keyboardKeyShift": "Shift"
}
......@@ -130,5 +130,8 @@
"keyboardKeyMetaWindows": "Win",
"menuBarMenuLabel": "মেনু বাৰ মেনু",
"currentDateLabel": "Date of today",
"scrimLabel": "Scrim",
"bottomSheetLabel": "Bottom Sheet",
"scrimOnTapHint": "Close $modalRouteName",
"keyboardKeyShift": "Shift"
}
......@@ -130,5 +130,8 @@
"keyboardKeyMetaWindows": "Win",
"menuBarMenuLabel": "Menyu paneli menyusu",
"currentDateLabel": "Date of today",
"scrimLabel": "Scrim",
"bottomSheetLabel": "Bottom Sheet",
"scrimOnTapHint": "Close $modalRouteName",
"keyboardKeyShift": "Shift"
}
......@@ -136,5 +136,8 @@
"keyboardKeyMetaWindows": "Win",
"menuBarMenuLabel": "Меню \"Панэль меню\"",
"currentDateLabel": "Date of today",
"scrimLabel": "Scrim",
"bottomSheetLabel": "Bottom Sheet",
"scrimOnTapHint": "Close $modalRouteName",
"keyboardKeyShift": "Shift"
}
......@@ -131,5 +131,8 @@
"keyboardKeyMetaWindows": "Win",
"menuBarMenuLabel": "Меню на лентата с менюта",
"currentDateLabel": "Date of today",
"scrimLabel": "Scrim",
"bottomSheetLabel": "Bottom Sheet",
"scrimOnTapHint": "Close $modalRouteName",
"keyboardKeyShift": "Shift"
}
......@@ -130,5 +130,8 @@
"keyboardKeyMetaWindows": "Win",
"menuBarMenuLabel": "মেনু বার মেনু",
"currentDateLabel": "Date of today",
"scrimLabel": "Scrim",
"bottomSheetLabel": "Bottom Sheet",
"scrimOnTapHint": "Close $modalRouteName",
"keyboardKeyShift": "Shift"
}
......@@ -134,5 +134,8 @@
"keyboardKeyMetaWindows": "Win",
"menuBarMenuLabel": "Meni trake menija",
"currentDateLabel": "Date of today",
"scrimLabel": "Scrim",
"bottomSheetLabel": "Bottom Sheet",
"scrimOnTapHint": "Close $modalRouteName",
"keyboardKeyShift": "Shift"
}
......@@ -131,5 +131,8 @@
"keyboardKeyMetaWindows": "Windows",
"menuBarMenuLabel": "Menú de la barra de menú",
"currentDateLabel": "Date of today",
"scrimLabel": "Scrim",
"bottomSheetLabel": "Bottom Sheet",
"scrimOnTapHint": "Close $modalRouteName",
"keyboardKeyShift": "Shift"
}
......@@ -137,5 +137,8 @@
"keyboardKeyMetaWindows": "Win",
"menuBarMenuLabel": "Nabídka na liště s nabídkou",
"currentDateLabel": "Date of today",
"scrimLabel": "Scrim",
"bottomSheetLabel": "Bottom Sheet",
"scrimOnTapHint": "Close $modalRouteName",
"keyboardKeyShift": "Shift"
}
......@@ -131,5 +131,8 @@
"keyboardKeyMetaWindows": "Win",
"menuBarMenuLabel": "Menuen for menulinjen",
"currentDateLabel": "Date of today",
"scrimLabel": "Scrim",
"bottomSheetLabel": "Bottom Sheet",
"scrimOnTapHint": "Close $modalRouteName",
"keyboardKeyShift": "Shift"
}
......@@ -132,5 +132,8 @@
"keyboardKeyMetaWindows": "Win",
"menuBarMenuLabel": "Menü in der Menüleiste",
"currentDateLabel": "Date of today",
"scrimLabel": "Scrim",
"bottomSheetLabel": "Bottom Sheet",
"scrimOnTapHint": "Close $modalRouteName",
"keyboardKeyShift": "Shift"
}
......@@ -131,5 +131,8 @@
"keyboardKeyMetaWindows": "Win",
"menuBarMenuLabel": "Μενού γραμμής μενού",
"currentDateLabel": "Date of today",
"scrimLabel": "Scrim",
"bottomSheetLabel": "Bottom Sheet",
"scrimOnTapHint": "Close $modalRouteName",
"keyboardKeyShift": "Shift"
}
......@@ -71,6 +71,22 @@
"description": "The tooltip for the button that shows a popup menu."
},
"scrimLabel": "Scrim",
"@scrimLabel": {
"description": "The label for the scrim rendered underneath the content of a modal route."
},
"bottomSheetLabel": "Bottom Sheet",
"@bottomSheetLabel": {
"description": "The label for a BottomSheet."
},
"scrimOnTapHint": "Close $modalRouteContentName",
"@scrimOnTapHint": {
"description": "The onTapHint for the scrim rendered underneath the content of a modal route which users can tap to dismiss the content",
"parameters": "modalRouteContentName"
},
"aboutListTileTitle": "About $applicationName",
"@aboutListTileTitle": {
"description": "The default title for the drawer item that shows an about page for the application. The value of $applicationName is the name of the application, like GMail or Chrome.",
......
......@@ -132,5 +132,8 @@
"keyboardKeyMetaWindows": "Win",
"menuBarMenuLabel": "Menú de la barra de menú",
"currentDateLabel": "Date of today",
"scrimLabel": "Scrim",
"bottomSheetLabel": "Bottom Sheet",
"scrimOnTapHint": "Close $modalRouteName",
"keyboardKeyShift": "Shift"
}
......@@ -131,5 +131,8 @@
"keyboardKeyMetaWindows": "Win",
"menuBarMenuLabel": "Menüüriba menüü",
"currentDateLabel": "Date of today",
"scrimLabel": "Scrim",
"bottomSheetLabel": "Bottom Sheet",
"scrimOnTapHint": "Close $modalRouteName",
"keyboardKeyShift": "Shift"
}
......@@ -130,5 +130,8 @@
"keyboardKeyMetaWindows": "Win",
"menuBarMenuLabel": "Menu-barraren menua",
"currentDateLabel": "Date of today",
"scrimLabel": "Scrim",
"bottomSheetLabel": "Bottom Sheet",
"scrimOnTapHint": "Close $modalRouteName",
"keyboardKeyShift": "Shift"
}
......@@ -131,5 +131,8 @@
"keyboardKeyMetaWindows": "Win",
"menuBarMenuLabel": "منوی نوار منو",
"currentDateLabel": "Date of today",
"scrimLabel": "Scrim",
"bottomSheetLabel": "Bottom Sheet",
"scrimOnTapHint": "Close $modalRouteName",
"keyboardKeyShift": "Shift"
}
......@@ -131,5 +131,8 @@
"keyboardKeyMetaWindows": "Win",
"menuBarMenuLabel": "Valikkopalkki",
"currentDateLabel": "Date of today",
"scrimLabel": "Scrim",
"bottomSheetLabel": "Bottom Sheet",
"scrimOnTapHint": "Close $modalRouteName",
"keyboardKeyShift": "Shift"
}
......@@ -131,5 +131,8 @@
"keyboardKeyMetaWindows": "Win",
"menuBarMenuLabel": "Menu sa menu bar",
"currentDateLabel": "Date of today",
"scrimLabel": "Scrim",
"bottomSheetLabel": "Bottom Sheet",
"scrimOnTapHint": "Close $modalRouteName",
"keyboardKeyShift": "Shift"
}
......@@ -132,5 +132,8 @@
"keyboardKeyMetaWindows": "Win",
"menuBarMenuLabel": "Menu de la barre de menu",
"currentDateLabel": "Date of today",
"scrimLabel": "Scrim",
"bottomSheetLabel": "Bottom Sheet",
"scrimOnTapHint": "Close $modalRouteName",
"keyboardKeyShift": "Shift"
}
......@@ -132,5 +132,8 @@
"keyboardKeyMetaWindows": "Win",
"menuBarMenuLabel": "Menú da barra de menú",
"currentDateLabel": "Date of today",
"scrimLabel": "Scrim",
"bottomSheetLabel": "Bottom Sheet",
"scrimOnTapHint": "Close $modalRouteName",
"keyboardKeyShift": "Shift"
}
......@@ -131,5 +131,8 @@
"keyboardKeyMetaWindows": "Win",
"menuBarMenuLabel": "Menü in der Menüleiste",
"currentDateLabel": "Date of today",
"scrimLabel": "Scrim",
"bottomSheetLabel": "Bottom Sheet",
"scrimOnTapHint": "Close $modalRouteName",
"keyboardKeyShift": "Shift"
}
......@@ -130,5 +130,8 @@
"keyboardKeyMetaWindows": "Win",
"menuBarMenuLabel": "મેનૂ બાર મેનૂ",
"currentDateLabel": "Date of today",
"scrimLabel": "Scrim",
"bottomSheetLabel": "Bottom Sheet",
"scrimOnTapHint": "Close $modalRouteName",
"keyboardKeyShift": "Shift"
}
......@@ -137,5 +137,8 @@
"keyboardKeyMetaWindows": "Win",
"menuBarMenuLabel": "תפריט בסרגל התפריטים",
"currentDateLabel": "Date of today",
"scrimLabel": "Scrim",
"bottomSheetLabel": "Bottom Sheet",
"scrimOnTapHint": "Close $modalRouteName",
"keyboardKeyShift": "Shift"
}
......@@ -131,5 +131,8 @@
"keyboardKeyMetaWindows": "Win",
"menuBarMenuLabel": "मेन्यू बार का मेन्यू",
"currentDateLabel": "Date of today",
"scrimLabel": "Scrim",
"bottomSheetLabel": "Bottom Sheet",
"scrimOnTapHint": "Close $modalRouteName",
"keyboardKeyShift": "Shift"
}
......@@ -134,5 +134,8 @@
"keyboardKeyMetaWindows": "Win",
"menuBarMenuLabel": "Izbornik trake izbornika",
"currentDateLabel": "Date of today",
"scrimLabel": "Scrim",
"bottomSheetLabel": "Bottom Sheet",
"scrimOnTapHint": "Close $modalRouteName",
"keyboardKeyShift": "Shift"
}
......@@ -131,5 +131,8 @@
"keyboardKeyMetaWindows": "Win",
"menuBarMenuLabel": "Menüsor menüje",
"currentDateLabel": "Date of today",
"scrimLabel": "Scrim",
"bottomSheetLabel": "Bottom Sheet",
"scrimOnTapHint": "Close $modalRouteName",
"keyboardKeyShift": "Shift"
}
......@@ -136,5 +136,8 @@
"keyboardKeyMetaWindows": "Win",
"menuBarMenuLabel": "Ընտրացանկի գոտու ընտրացանկ",
"currentDateLabel": "Date of today",
"scrimLabel": "Scrim",
"bottomSheetLabel": "Bottom Sheet",
"scrimOnTapHint": "Close $modalRouteName",
"keyboardKeyShift": "Shift"
}
......@@ -131,5 +131,8 @@
"keyboardKeyMetaWindows": "Win",
"menuBarMenuLabel": "Menu panel menu",
"currentDateLabel": "Date of today",
"scrimLabel": "Scrim",
"bottomSheetLabel": "Bottom Sheet",
"scrimOnTapHint": "Close $modalRouteName",
"keyboardKeyShift": "Shift"
}
......@@ -130,5 +130,8 @@
"keyboardKeyMetaWindows": "Win",
"menuBarMenuLabel": "Valmyndarstika",
"currentDateLabel": "Date of today",
"scrimLabel": "Scrim",
"bottomSheetLabel": "Bottom Sheet",
"scrimOnTapHint": "Close $modalRouteName",
"keyboardKeyShift": "Shift"
}
......@@ -131,5 +131,8 @@
"keyboardKeyMetaWindows": "Win",
"menuBarMenuLabel": "Menu barra dei menu",
"currentDateLabel": "Date of today",
"scrimLabel": "Scrim",
"bottomSheetLabel": "Bottom Sheet",
"scrimOnTapHint": "Close $modalRouteName",
"keyboardKeyShift": "Shift"
}
......@@ -131,5 +131,8 @@
"keyboardKeyMetaWindows": "Win",
"menuBarMenuLabel": "メニューバーのメニュー",
"currentDateLabel": "Date of today",
"scrimLabel": "Scrim",
"bottomSheetLabel": "Bottom Sheet",
"scrimOnTapHint": "Close $modalRouteName",
"keyboardKeyShift": "Shift"
}
......@@ -130,5 +130,8 @@
"keyboardKeyMetaWindows": "Win",
"menuBarMenuLabel": "მენიუს ზოლის მენიუ",
"currentDateLabel": "Date of today",
"scrimLabel": "Scrim",
"bottomSheetLabel": "Bottom Sheet",
"scrimOnTapHint": "Close $modalRouteName",
"keyboardKeyShift": "Shift"
}
......@@ -132,5 +132,8 @@
"keyboardKeyMetaWindows": "Win",
"menuBarMenuLabel": "Мәзір жолағының мәзірі",
"currentDateLabel": "Date of today",
"scrimLabel": "Scrim",
"bottomSheetLabel": "Bottom Sheet",
"scrimOnTapHint": "Close $modalRouteName",
"keyboardKeyShift": "Shift"
}
......@@ -131,5 +131,8 @@
"keyboardKeyMetaWindows": "Win",
"menuBarMenuLabel": "ម៉ឺនុយរបារម៉ឺនុយ",
"currentDateLabel": "Date of today",
"scrimLabel": "Scrim",
"bottomSheetLabel": "Bottom Sheet",
"scrimOnTapHint": "Close $modalRouteName",
"keyboardKeyShift": "Shift"
}
......@@ -130,5 +130,8 @@
"keyboardKeyMetaWindows": "\u0057\u0069\u006e",
"menuBarMenuLabel": "\u0cae\u0cc6\u0ca8\u0cc1\u0020\u0cac\u0cbe\u0cb0\u0ccd\u200c\u0020\u0cae\u0cc6\u0ca8\u0cc1",
"currentDateLabel": "\u0044\u0061\u0074\u0065\u0020\u006f\u0066\u0020\u0074\u006f\u0064\u0061\u0079",
"scrimLabel": "\u0053\u0063\u0072\u0069\u006d",
"bottomSheetLabel": "\u0042\u006f\u0074\u0074\u006f\u006d\u0020\u0053\u0068\u0065\u0065\u0074",
"scrimOnTapHint": "\u0043\u006c\u006f\u0073\u0065\u0020\u0024\u006d\u006f\u0064\u0061\u006c\u0052\u006f\u0075\u0074\u0065\u004e\u0061\u006d\u0065",
"keyboardKeyShift": "\u0053\u0068\u0069\u0066\u0074"
}
......@@ -131,5 +131,8 @@
"keyboardKeyMetaWindows": "Win",
"menuBarMenuLabel": "메뉴 바 메뉴",
"currentDateLabel": "Date of today",
"scrimLabel": "Scrim",
"bottomSheetLabel": "Bottom Sheet",
"scrimOnTapHint": "Close $modalRouteName",
"keyboardKeyShift": "Shift"
}
......@@ -130,5 +130,8 @@
"keyboardKeyMetaWindows": "Win",
"menuBarMenuLabel": "Меню тилкеси менюсу",
"currentDateLabel": "Date of today",
"scrimLabel": "Scrim",
"bottomSheetLabel": "Bottom Sheet",
"scrimOnTapHint": "Close $modalRouteName",
"keyboardKeyShift": "Shift"
}
......@@ -130,5 +130,8 @@
"keyboardKeyMetaWindows": "Win",
"menuBarMenuLabel": "ເມນູແຖບເມນູ",
"currentDateLabel": "Date of today",
"scrimLabel": "Scrim",
"bottomSheetLabel": "Bottom Sheet",
"scrimOnTapHint": "Close $modalRouteName",
"keyboardKeyShift": "Shift"
}
......@@ -137,5 +137,8 @@
"keyboardKeyMetaWindows": "Win",
"menuBarMenuLabel": "Meniu juostos meniu",
"currentDateLabel": "Date of today",
"scrimLabel": "Scrim",
"bottomSheetLabel": "Bottom Sheet",
"scrimOnTapHint": "Close $modalRouteName",
"keyboardKeyShift": "Shift"
}
......@@ -132,5 +132,8 @@
"keyboardKeyMetaWindows": "Windows",
"menuBarMenuLabel": "Izvēļņu joslas izvēlne",
"currentDateLabel": "Date of today",
"scrimLabel": "Scrim",
"bottomSheetLabel": "Bottom Sheet",
"scrimOnTapHint": "Close $modalRouteName",
"keyboardKeyShift": "Shift"
}
......@@ -130,5 +130,8 @@
"keyboardKeyMetaWindows": "Win",
"menuBarMenuLabel": "Мени на лентата со мени",
"currentDateLabel": "Date of today",
"scrimLabel": "Scrim",
"bottomSheetLabel": "Bottom Sheet",
"scrimOnTapHint": "Close $modalRouteName",
"keyboardKeyShift": "Shift"
}
......@@ -130,5 +130,8 @@
"keyboardKeyMetaWindows": "Win",
"menuBarMenuLabel": "മെനു ബാർ മെനു",
"currentDateLabel": "Date of today",
"scrimLabel": "Scrim",
"bottomSheetLabel": "Bottom Sheet",
"scrimOnTapHint": "Close $modalRouteName",
"keyboardKeyShift": "Shift"
}
......@@ -132,5 +132,8 @@
"keyboardKeyMetaWindows": "Win",
"menuBarMenuLabel": "Цэсний талбарын цэс",
"currentDateLabel": "Date of today",
"scrimLabel": "Scrim",
"bottomSheetLabel": "Bottom Sheet",
"scrimOnTapHint": "Close $modalRouteName",
"keyboardKeyShift": "Shift"
}
......@@ -132,5 +132,8 @@
"keyboardKeyMetaWindows": "Win",
"menuBarMenuLabel": "मेनू बार मेनू",
"currentDateLabel": "Date of today",
"scrimLabel": "Scrim",
"bottomSheetLabel": "Bottom Sheet",
"scrimOnTapHint": "Close $modalRouteName",
"keyboardKeyShift": "Shift"
}
......@@ -132,5 +132,8 @@
"keyboardKeyMetaWindows": "Win",
"menuBarMenuLabel": "Menu bar menu",
"currentDateLabel": "Date of today",
"scrimLabel": "Scrim",
"bottomSheetLabel": "Bottom Sheet",
"scrimOnTapHint": "Close $modalRouteName",
"keyboardKeyShift": "Shift"
}
......@@ -130,5 +130,8 @@
"keyboardKeyMetaWindows": "Win",
"menuBarMenuLabel": "မီနူးဘား မီနူး",
"currentDateLabel": "Date of today",
"scrimLabel": "Scrim",
"bottomSheetLabel": "Bottom Sheet",
"scrimOnTapHint": "Close $modalRouteName",
"keyboardKeyShift": "Shift"
}
......@@ -129,5 +129,8 @@
"keyboardKeyMetaWindows": "Win",
"menuBarMenuLabel": "Meny med menylinje",
"currentDateLabel": "Date of today",
"scrimLabel": "Scrim",
"bottomSheetLabel": "Bottom Sheet",
"scrimOnTapHint": "Close $modalRouteName",
"keyboardKeyShift": "Shift"
}
......@@ -130,5 +130,8 @@
"keyboardKeyMetaWindows": "Win",
"menuBarMenuLabel": "\"मेनु बार\" मेनु",
"currentDateLabel": "Date of today",
"scrimLabel": "Scrim",
"bottomSheetLabel": "Bottom Sheet",
"scrimOnTapHint": "Close $modalRouteName",
"keyboardKeyShift": "Shift"
}
......@@ -131,5 +131,8 @@
"keyboardKeyMetaWindows": "Win",
"menuBarMenuLabel": "Menu van menubalk",
"currentDateLabel": "Date of today",
"scrimLabel": "Scrim",
"bottomSheetLabel": "Bottom Sheet",
"scrimOnTapHint": "Close $modalRouteName",
"keyboardKeyShift": "Shift"
}
......@@ -129,5 +129,8 @@
"keyboardKeyMetaWindows": "Win",
"menuBarMenuLabel": "Meny med menylinje",
"currentDateLabel": "Date of today",
"scrimLabel": "Scrim",
"bottomSheetLabel": "Bottom Sheet",
"scrimOnTapHint": "Close $modalRouteName",
"keyboardKeyShift": "Shift"
}
......@@ -130,5 +130,8 @@
"keyboardKeyMetaWindows": "Win",
"menuBarMenuLabel": "ମେନୁ ବାର ମେନୁ",
"currentDateLabel": "Date of today",
"scrimLabel": "Scrim",
"bottomSheetLabel": "Bottom Sheet",
"scrimOnTapHint": "Close $modalRouteName",
"keyboardKeyShift": "Shift"
}
......@@ -130,5 +130,8 @@
"keyboardKeyMetaWindows": "Win",
"menuBarMenuLabel": "ਮੀਨੂ ਬਾਰ ਮੀਨੂ",
"currentDateLabel": "Date of today",
"scrimLabel": "Scrim",
"bottomSheetLabel": "Bottom Sheet",
"scrimOnTapHint": "Close $modalRouteName",
"keyboardKeyShift": "Shift"
}
......@@ -137,5 +137,8 @@
"keyboardKeyMetaWindows": "Win",
"menuBarMenuLabel": "Pasek menu",
"currentDateLabel": "Date of today",
"scrimLabel": "Scrim",
"bottomSheetLabel": "Bottom Sheet",
"scrimOnTapHint": "Close $modalRouteName",
"keyboardKeyShift": "Shift"
}
......@@ -132,5 +132,8 @@
"keyboardKeyMetaWindows": "Win",
"menuBarMenuLabel": "Menu bar menu",
"currentDateLabel": "Date of today",
"scrimLabel": "Scrim",
"bottomSheetLabel": "Bottom Sheet",
"scrimOnTapHint": "Close $modalRouteName",
"keyboardKeyShift": "Shift"
}
......@@ -133,5 +133,8 @@
"keyboardKeyMetaWindows": "Win",
"menuBarMenuLabel": "Menu da barra de menus",
"currentDateLabel": "Date of today",
"scrimLabel": "Scrim",
"bottomSheetLabel": "Bottom Sheet",
"scrimOnTapHint": "Close $modalRouteName",
"keyboardKeyShift": "Shift"
}
......@@ -135,5 +135,8 @@
"keyboardKeyMetaWindows": "Win",
"menuBarMenuLabel": "Bară de meniu",
"currentDateLabel": "Date of today",
"scrimLabel": "Scrim",
"bottomSheetLabel": "Bottom Sheet",
"scrimOnTapHint": "Close $modalRouteName",
"keyboardKeyShift": "Shift"
}
......@@ -138,5 +138,8 @@
"keyboardKeyMetaWindows": "Win",
"menuBarMenuLabel": "Строка меню",
"currentDateLabel": "Date of today",
"scrimLabel": "Scrim",
"bottomSheetLabel": "Bottom Sheet",
"scrimOnTapHint": "Close $modalRouteName",
"keyboardKeyShift": "Shift"
}
......@@ -130,5 +130,8 @@
"keyboardKeyMetaWindows": "Win",
"menuBarMenuLabel": "මෙනු තීරු මෙනුව",
"currentDateLabel": "Date of today",
"scrimLabel": "Scrim",
"bottomSheetLabel": "Bottom Sheet",
"scrimOnTapHint": "Close $modalRouteName",
"keyboardKeyShift": "Shift"
}
......@@ -137,5 +137,8 @@
"keyboardKeyMetaWindows": "Win",
"menuBarMenuLabel": "Ponuka panela s ponukami",
"currentDateLabel": "Date of today",
"scrimLabel": "Scrim",
"bottomSheetLabel": "Bottom Sheet",
"scrimOnTapHint": "Close $modalRouteName",
"keyboardKeyShift": "Shift"
}
......@@ -137,5 +137,8 @@
"keyboardKeyMetaWindows": "Win",
"menuBarMenuLabel": "Meni menijske vrstice",
"currentDateLabel": "Date of today",
"scrimLabel": "Scrim",
"bottomSheetLabel": "Bottom Sheet",
"scrimOnTapHint": "Close $modalRouteName",
"keyboardKeyShift": "Shift"
}
......@@ -130,5 +130,8 @@
"keyboardKeyMetaWindows": "Win",
"menuBarMenuLabel": "Menyja e shiritit të menysë",
"currentDateLabel": "Date of today",
"scrimLabel": "Scrim",
"bottomSheetLabel": "Bottom Sheet",
"scrimOnTapHint": "Close $modalRouteName",
"keyboardKeyShift": "Shift"
}
......@@ -134,5 +134,8 @@
"keyboardKeyMetaWindows": "Win",
"menuBarMenuLabel": "Мени трака менија",
"currentDateLabel": "Date of today",
"scrimLabel": "Scrim",
"bottomSheetLabel": "Bottom Sheet",
"scrimOnTapHint": "Close $modalRouteName",
"keyboardKeyShift": "Shift"
}
......@@ -131,5 +131,8 @@
"keyboardKeyMetaWindows": "Win",
"menuBarMenuLabel": "Menyrad",
"currentDateLabel": "Date of today",
"scrimLabel": "Scrim",
"bottomSheetLabel": "Bottom Sheet",
"scrimOnTapHint": "Close $modalRouteName",
"keyboardKeyShift": "Shift"
}
......@@ -132,5 +132,8 @@
"keyboardKeyMetaWindows": "Win",
"menuBarMenuLabel": "Menyu ya upau wa menyu",
"currentDateLabel": "Date of today",
"scrimLabel": "Scrim",
"bottomSheetLabel": "Bottom Sheet",
"scrimOnTapHint": "Close $modalRouteName",
"keyboardKeyShift": "Shift"
}
......@@ -132,5 +132,8 @@
"keyboardKeyMetaWindows": "Win",
"menuBarMenuLabel": "மெனு பட்டியின் மெனு",
"currentDateLabel": "Date of today",
"scrimLabel": "Scrim",
"bottomSheetLabel": "Bottom Sheet",
"scrimOnTapHint": "Close $modalRouteName",
"keyboardKeyShift": "Shift"
}
......@@ -130,5 +130,8 @@
"keyboardKeyMetaWindows": "Win",
"menuBarMenuLabel": "మెనూ బార్ మెనూ",
"currentDateLabel": "Date of today",
"scrimLabel": "Scrim",
"bottomSheetLabel": "Bottom Sheet",
"scrimOnTapHint": "Close $modalRouteName",
"keyboardKeyShift": "Shift"
}
......@@ -131,5 +131,8 @@
"keyboardKeyMetaWindows": "Win",
"menuBarMenuLabel": "เมนูในแถบเมนู",
"currentDateLabel": "Date of today",
"scrimLabel": "Scrim",
"bottomSheetLabel": "Bottom Sheet",
"scrimOnTapHint": "Close $modalRouteName",
"keyboardKeyShift": "Shift"
}
......@@ -131,5 +131,8 @@
"keyboardKeyMetaWindows": "Win",
"menuBarMenuLabel": "Menu sa menu bar",
"currentDateLabel": "Date of today",
"scrimLabel": "Scrim",
"bottomSheetLabel": "Bottom Sheet",
"scrimOnTapHint": "Close $modalRouteName",
"keyboardKeyShift": "Shift"
}
......@@ -131,5 +131,8 @@
"keyboardKeyMetaWindows": "Win",
"menuBarMenuLabel": "Menü çubuğu menüsü",
"currentDateLabel": "Date of today",
"scrimLabel": "Scrim",
"bottomSheetLabel": "Bottom Sheet",
"scrimOnTapHint": "Close $modalRouteName",
"keyboardKeyShift": "Shift"
}
......@@ -137,5 +137,8 @@
"keyboardKeyMetaWindows": "Win",
"menuBarMenuLabel": "Панель меню",
"currentDateLabel": "Date of today",
"scrimLabel": "Scrim",
"bottomSheetLabel": "Bottom Sheet",
"scrimOnTapHint": "Close $modalRouteName",
"keyboardKeyShift": "Shift"
}
......@@ -131,5 +131,8 @@
"keyboardKeyMetaWindows": "Win",
"menuBarMenuLabel": "مینو بار کا مینو",
"currentDateLabel": "Date of today",
"scrimLabel": "Scrim",
"bottomSheetLabel": "Bottom Sheet",
"scrimOnTapHint": "Close $modalRouteName",
"keyboardKeyShift": "Shift"
}
......@@ -130,5 +130,8 @@
"keyboardKeyMetaWindows": "Win",
"menuBarMenuLabel": "Menyu paneli",
"currentDateLabel": "Date of today",
"scrimLabel": "Scrim",
"bottomSheetLabel": "Bottom Sheet",
"scrimOnTapHint": "Close $modalRouteName",
"keyboardKeyShift": "Shift"
}
......@@ -131,5 +131,8 @@
"keyboardKeyMetaWindows": "Win",
"menuBarMenuLabel": "Trình đơn của thanh trình đơn",
"currentDateLabel": "Date of today",
"scrimLabel": "Scrim",
"bottomSheetLabel": "Bottom Sheet",
"scrimOnTapHint": "Close $modalRouteName",
"keyboardKeyShift": "Shift"
}
......@@ -131,5 +131,8 @@
"keyboardKeyMetaWindows": "Win",
"menuBarMenuLabel": "菜单栏的菜单",
"currentDateLabel": "Date of today",
"scrimLabel": "Scrim",
"bottomSheetLabel": "Bottom Sheet",
"scrimOnTapHint": "Close $modalRouteName",
"keyboardKeyShift": "Shift"
}
......@@ -130,5 +130,8 @@
"keyboardKeyMetaWindows": "Win",
"menuBarMenuLabel": "Imenyu yebha yemenyu",
"currentDateLabel": "Date of today",
"scrimLabel": "Scrim",
"bottomSheetLabel": "Bottom Sheet",
"scrimOnTapHint": "Close $modalRouteName",
"keyboardKeyShift": "Shift"
}
......@@ -260,6 +260,17 @@ abstract class GlobalMaterialLocalizations implements MaterialLocalizations {
return dateRangeEndDateSemanticLabelRaw.replaceFirst(r'$fullDate', formattedDate);
}
/// The raw version of [scrimOnTapHint], with `$modalRouteContentName` verbatim
/// in the string.
@protected
String get scrimOnTapHintRaw;
@override
String scrimOnTapHint(String modalRouteContentName) {
final String text = scrimOnTapHintRaw;
return text.replaceFirst(r'$modalRouteContentName', modalRouteContentName);
}
/// The raw version of [aboutListTileTitle], with `$applicationName` verbatim
/// in the string.
@protected
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment