From 4841a7ed6fb36774974d6cf2aafb7f791908ab8d Mon Sep 17 00:00:00 2001 From: Justin McCandless Date: Wed, 11 Mar 2020 13:36:10 -0700 Subject: [PATCH] Text Selection Overflow (Android) (#49391) Adds an overflow menu to the text selection menu on Android when the items overflow. --- .../src/material/material_localizations.dart | 6 + .../lib/src/material/text_selection.dart | 635 ++++++++++++++++-- packages/flutter/lib/src/rendering/box.dart | 2 +- .../test/material/localizations_test.dart | 1 + packages/flutter/test/material/text.dart | 47 ++ .../test/material/text_field_test.dart | 40 +- .../test/material/text_selection_test.dart | 443 +++++++++++- .../generated_material_localizations.dart | 231 +++++++ .../lib/src/l10n/material_af.arb | 3 +- .../lib/src/l10n/material_am.arb | 3 +- .../lib/src/l10n/material_ar.arb | 3 +- .../lib/src/l10n/material_as.arb | 3 +- .../lib/src/l10n/material_az.arb | 3 +- .../lib/src/l10n/material_be.arb | 3 +- .../lib/src/l10n/material_bg.arb | 3 +- .../lib/src/l10n/material_bn.arb | 3 +- .../lib/src/l10n/material_bs.arb | 3 +- .../lib/src/l10n/material_ca.arb | 3 +- .../lib/src/l10n/material_cs.arb | 3 +- .../lib/src/l10n/material_da.arb | 3 +- .../lib/src/l10n/material_de.arb | 3 +- .../lib/src/l10n/material_el.arb | 3 +- .../lib/src/l10n/material_en.arb | 5 + .../lib/src/l10n/material_es.arb | 3 +- .../lib/src/l10n/material_et.arb | 3 +- .../lib/src/l10n/material_eu.arb | 3 +- .../lib/src/l10n/material_fa.arb | 3 +- .../lib/src/l10n/material_fi.arb | 3 +- .../lib/src/l10n/material_fil.arb | 3 +- .../lib/src/l10n/material_fr.arb | 3 +- .../lib/src/l10n/material_gl.arb | 3 +- .../lib/src/l10n/material_gsw.arb | 3 +- .../lib/src/l10n/material_gu.arb | 3 +- .../lib/src/l10n/material_he.arb | 3 +- .../lib/src/l10n/material_hi.arb | 3 +- .../lib/src/l10n/material_hr.arb | 3 +- .../lib/src/l10n/material_hu.arb | 3 +- .../lib/src/l10n/material_hy.arb | 3 +- .../lib/src/l10n/material_id.arb | 3 +- .../lib/src/l10n/material_is.arb | 3 +- .../lib/src/l10n/material_it.arb | 3 +- .../lib/src/l10n/material_ja.arb | 3 +- .../lib/src/l10n/material_ka.arb | 3 +- .../lib/src/l10n/material_kk.arb | 3 +- .../lib/src/l10n/material_km.arb | 3 +- .../lib/src/l10n/material_kn.arb | 105 +-- .../lib/src/l10n/material_ko.arb | 3 +- .../lib/src/l10n/material_ky.arb | 3 +- .../lib/src/l10n/material_lo.arb | 3 +- .../lib/src/l10n/material_lt.arb | 3 +- .../lib/src/l10n/material_lv.arb | 3 +- .../lib/src/l10n/material_mk.arb | 3 +- .../lib/src/l10n/material_ml.arb | 3 +- .../lib/src/l10n/material_mn.arb | 3 +- .../lib/src/l10n/material_mr.arb | 3 +- .../lib/src/l10n/material_ms.arb | 3 +- .../lib/src/l10n/material_my.arb | 3 +- .../lib/src/l10n/material_nb.arb | 3 +- .../lib/src/l10n/material_ne.arb | 3 +- .../lib/src/l10n/material_nl.arb | 3 +- .../lib/src/l10n/material_or.arb | 3 +- .../lib/src/l10n/material_pa.arb | 3 +- .../lib/src/l10n/material_pl.arb | 3 +- .../lib/src/l10n/material_ps.arb | 3 +- .../lib/src/l10n/material_pt.arb | 3 +- .../lib/src/l10n/material_ro.arb | 3 +- .../lib/src/l10n/material_ru.arb | 3 +- .../lib/src/l10n/material_si.arb | 3 +- .../lib/src/l10n/material_sk.arb | 3 +- .../lib/src/l10n/material_sl.arb | 3 +- .../lib/src/l10n/material_sq.arb | 3 +- .../lib/src/l10n/material_sr.arb | 3 +- .../lib/src/l10n/material_sv.arb | 3 +- .../lib/src/l10n/material_sw.arb | 3 +- .../lib/src/l10n/material_ta.arb | 3 +- .../lib/src/l10n/material_te.arb | 3 +- .../lib/src/l10n/material_th.arb | 3 +- .../lib/src/l10n/material_tl.arb | 3 +- .../lib/src/l10n/material_tr.arb | 3 +- .../lib/src/l10n/material_uk.arb | 3 +- .../lib/src/l10n/material_ur.arb | 3 +- .../lib/src/l10n/material_uz.arb | 3 +- .../lib/src/l10n/material_vi.arb | 3 +- .../lib/src/l10n/material_zh.arb | 3 +- .../lib/src/l10n/material_zu.arb | 3 +- 85 files changed, 1507 insertions(+), 233 deletions(-) create mode 100644 packages/flutter/test/material/text.dart diff --git a/packages/flutter/lib/src/material/material_localizations.dart b/packages/flutter/lib/src/material/material_localizations.dart index bad3d05bc11..f15014eb794 100644 --- a/packages/flutter/lib/src/material/material_localizations.dart +++ b/packages/flutter/lib/src/material/material_localizations.dart @@ -71,6 +71,9 @@ abstract class MaterialLocalizations { /// The tooltip for the delete button on a [Chip]. String get deleteButtonTooltip; + /// The tooltip for the more button on an overflowing text selection menu. + String get moreButtonTooltip; + /// The tooltip for the [MonthPicker]'s "next month" button. String get nextMonthTooltip; @@ -561,6 +564,9 @@ class DefaultMaterialLocalizations implements MaterialLocalizations { @override String get deleteButtonTooltip => 'Delete'; + @override + String get moreButtonTooltip => 'More'; + @override String get nextMonthTooltip => 'Next month'; diff --git a/packages/flutter/lib/src/material/text_selection.dart b/packages/flutter/lib/src/material/text_selection.dart index f1893e18904..8ad2fd1a7bb 100644 --- a/packages/flutter/lib/src/material/text_selection.dart +++ b/packages/flutter/lib/src/material/text_selection.dart @@ -4,11 +4,14 @@ import 'dart:math' as math; -import 'package:flutter/widgets.dart'; import 'package:flutter/rendering.dart'; +import 'package:flutter/scheduler.dart'; +import 'package:flutter/widgets.dart'; import 'debug.dart'; import 'flat_button.dart'; +import 'icon_button.dart'; +import 'icons.dart'; import 'material.dart'; import 'material_localizations.dart'; import 'theme.dart'; @@ -20,17 +23,18 @@ const double _kHandleSize = 22.0; const double _kToolbarScreenPadding = 8.0; const double _kToolbarHeight = 44.0; // Padding when positioning toolbar below selection. -const double _kToolbarContentDistanceBelow = 16.0; +const double _kToolbarContentDistanceBelow = _kHandleSize - 2.0; const double _kToolbarContentDistance = 8.0; /// Manages a copy/paste text selection toolbar. -class _TextSelectionToolbar extends StatelessWidget { +class _TextSelectionToolbar extends StatefulWidget { const _TextSelectionToolbar({ Key key, this.handleCut, this.handleCopy, this.handlePaste, this.handleSelectAll, + this.isAbove, }) : super(key: key); final VoidCallback handleCut; @@ -38,14 +42,60 @@ class _TextSelectionToolbar extends StatelessWidget { final VoidCallback handlePaste; final VoidCallback handleSelectAll; + // When true, the toolbar fits above its anchor and will be positioned there. + final bool isAbove; + + @override + _TextSelectionToolbarState createState() => _TextSelectionToolbarState(); +} + +class _TextSelectionToolbarState extends State<_TextSelectionToolbar> with TickerProviderStateMixin { + // Whether or not the overflow menu is open. When it is closed, the menu + // items that don't overflow are shown. When it is open, only the overflowing + // menu items are shown. + bool _overflowOpen = false; + + // The key for _TextSelectionToolbarContainer. + UniqueKey _containerKey = UniqueKey(); + + FlatButton _getItem(VoidCallback onPressed, String label) { + assert(onPressed != null); + return FlatButton( + child: Text(label), + onPressed: onPressed, + ); + } + + @override + void didUpdateWidget(_TextSelectionToolbar oldWidget) { + if (((widget.handleCut == null) != (oldWidget.handleCut == null)) + || ((widget.handleCopy == null) != (oldWidget.handleCopy == null)) + || ((widget.handlePaste == null) != (oldWidget.handlePaste == null)) + || ((widget.handleSelectAll == null) != (oldWidget.handleSelectAll == null))) { + // Change _TextSelectionToolbarContainer's key when the menu changes in + // order to cause it to rebuild. This lets it recalculate its + // saved width for the new set of children, and it prevents AnimatedSize + // from animating the size change. + _containerKey = UniqueKey(); + // If the menu items change, make sure the overflow menu is closed. This + // prevents an empty overflow menu. + _overflowOpen = false; + } + super.didUpdateWidget(oldWidget); + } + @override Widget build(BuildContext context) { final MaterialLocalizations localizations = MaterialLocalizations.of(context); final List items = [ - if (handleCut != null) FlatButton(child: Text(localizations.cutButtonLabel), onPressed: handleCut), - if (handleCopy != null) FlatButton(child: Text(localizations.copyButtonLabel), onPressed: handleCopy), - if (handlePaste != null) FlatButton(child: Text(localizations.pasteButtonLabel), onPressed: handlePaste), - if (handleSelectAll != null) FlatButton(child: Text(localizations.selectAllButtonLabel), onPressed: handleSelectAll), + if (widget.handleCut != null) + _getItem(widget.handleCut, localizations.cutButtonLabel), + if (widget.handleCopy != null) + _getItem(widget.handleCopy, localizations.copyButtonLabel), + if (widget.handlePaste != null) + _getItem(widget.handlePaste, localizations.pasteButtonLabel), + if (widget.handleSelectAll != null) + _getItem(widget.handleSelectAll, localizations.selectAllButtonLabel), ]; // If there is no option available, build an empty widget. @@ -53,31 +103,481 @@ class _TextSelectionToolbar extends StatelessWidget { return Container(width: 0.0, height: 0.0); } - return Material( - elevation: 1.0, - child: Container( - height: _kToolbarHeight, - child: Row(mainAxisSize: MainAxisSize.min, children: items), + + return _TextSelectionToolbarContainer( + key: _containerKey, + overflowOpen: _overflowOpen, + child: AnimatedSize( + vsync: this, + // This duration was eyeballed on a Pixel 2 emulator running Android + // API 28. + duration: const Duration(milliseconds: 140), + child: Material( + elevation: 1.0, + child: _TextSelectionToolbarItems( + isAbove: widget.isAbove, + overflowOpen: _overflowOpen, + children: [ + // The navButton that shows and hides the overflow menu is the + // first child. + Material( + child: IconButton( + // TODO(justinmc): This should be an AnimatedIcon, but + // AnimatedIcons doesn't yet support arrow_back to more_vert. + // https://github.com/flutter/flutter/issues/51209 + icon: Icon(_overflowOpen ? Icons.arrow_back : Icons.more_vert), + onPressed: () { + setState(() { + _overflowOpen = !_overflowOpen; + }); + }, + tooltip: _overflowOpen + ? localizations.backButtonTooltip + : localizations.moreButtonTooltip, + ), + ), + ...items, + ], + ), + ), ), ); } } -/// Centers the toolbar around the given position, ensuring that it remains on +// When the overflow menu is open, it tries to align its right edge to the right +// edge of the closed menu. This widget handles this effect by measuring and +// maintaining the width of the closed menu and aligning the child to the right. +class _TextSelectionToolbarContainer extends SingleChildRenderObjectWidget { + const _TextSelectionToolbarContainer({ + Key key, + @required Widget child, + @required this.overflowOpen, + }) : assert(child != null), + assert(overflowOpen != null), + super(key: key, child: child); + + final bool overflowOpen; + + @override + _TextSelectionToolbarContainerRenderBox createRenderObject(BuildContext context) { + return _TextSelectionToolbarContainerRenderBox(overflowOpen: overflowOpen); + } + + @override + void updateRenderObject(BuildContext context, _TextSelectionToolbarContainerRenderBox renderObject) { + renderObject.overflowOpen = overflowOpen; + } +} + +class _TextSelectionToolbarContainerRenderBox extends RenderProxyBox { + _TextSelectionToolbarContainerRenderBox({ + @required bool overflowOpen, + }) : assert(overflowOpen != null), + _overflowOpen = overflowOpen, + super(); + + // The width of the menu when it was closed. This is used to achieve the + // behavior where the open menu aligns its right edge to the closed menu's + // right edge. + double _closedWidth; + + bool _overflowOpen; + bool get overflowOpen => _overflowOpen; + set overflowOpen(bool value) { + if (value == overflowOpen) { + return; + } + _overflowOpen = value; + markNeedsLayout(); + } + + @override + void performLayout() { + child.layout(constraints.loosen(), parentUsesSize: true); + + // Save the width when the menu is closed. If the menu changes, this width + // is invalid, so it's important that this RenderBox be recreated in that + // case. Currently, this is achieved by providing a new key to + // _TextSelectionToolbarContainer. + if (!overflowOpen && _closedWidth == null) { + _closedWidth = child.size.width; + } + + size = constraints.constrain(Size( + // If the open menu is wider than the closed menu, just use its own width + // and don't worry about aligning the right edges. + // _closedWidth is used even when the menu is closed to allow it to + // animate its size while keeping the same right alignment. + _closedWidth == null || child.size.width > _closedWidth ? child.size.width : _closedWidth, + child.size.height, + )); + + final _ToolbarParentData childParentData = child.parentData as _ToolbarParentData; + childParentData.offset = Offset( + size.width - child.size.width, + 0.0, + ); + } + + // Paint at the offset set in the parent data. + @override + void paint(PaintingContext context, Offset offset) { + final _ToolbarParentData childParentData = child.parentData as _ToolbarParentData; + context.paintChild(child, childParentData.offset + offset); + } + + // Include the parent data offset in the hit test. + @override + bool hitTestChildren(BoxHitTestResult result, { Offset position }) { + // The x, y parameters have the top left of the node's box as the origin. + final _ToolbarParentData childParentData = child.parentData as _ToolbarParentData; + return result.addWithPaintOffset( + offset: childParentData.offset, + position: position, + hitTest: (BoxHitTestResult result, Offset transformed) { + assert(transformed == position - childParentData.offset); + return child.hitTest(result, position: transformed); + }, + ); + } + + @override + void setupParentData(RenderBox child) { + if (child.parentData is! _ToolbarParentData) { + child.parentData = _ToolbarParentData(); + } + } + + @override + void applyPaintTransform(RenderObject child, Matrix4 transform) { + final _ToolbarParentData childParentData = child.parentData as _ToolbarParentData; + transform.translate(childParentData.offset.dx, childParentData.offset.dy); + super.applyPaintTransform(child, transform); + } +} + +// Renders the menu items in the correct positions in the menu and its overflow +// submenu based on calculating which item would first overflow. +class _TextSelectionToolbarItems extends MultiChildRenderObjectWidget { + _TextSelectionToolbarItems({ + Key key, + @required this.isAbove, + @required this.overflowOpen, + @required List children, + }) : assert(children != null), + assert(isAbove != null), + assert(overflowOpen != null), + super(key: key, children: children); + + final bool isAbove; + final bool overflowOpen; + + @override + _TextSelectionToolbarItemsRenderBox createRenderObject(BuildContext context) { + return _TextSelectionToolbarItemsRenderBox( + isAbove: isAbove, + overflowOpen: overflowOpen, + ); + } + + @override + void updateRenderObject(BuildContext context, _TextSelectionToolbarItemsRenderBox renderObject) { + renderObject + ..isAbove = isAbove + ..overflowOpen = overflowOpen; + } + + @override + _TextSelectionToolbarItemsElement createElement() => _TextSelectionToolbarItemsElement(this); +} + +class _ToolbarParentData extends ContainerBoxParentData { + /// Whether or not this child is painted. + /// + /// Children in the selection toolbar may be laid out for measurement purposes + /// but not painted. This allows these children to be identified. + bool shouldPaint; + + @override + String toString() => '${super.toString()}; shouldPaint=$shouldPaint'; +} + +class _TextSelectionToolbarItemsElement extends MultiChildRenderObjectElement { + _TextSelectionToolbarItemsElement( + MultiChildRenderObjectWidget widget, + ) : super(widget); + + static bool _shouldPaint(Element child) { + return (child.renderObject.parentData as _ToolbarParentData).shouldPaint; + } + + @override + void debugVisitOnstageChildren(ElementVisitor visitor) { + children.where(_shouldPaint).forEach(visitor); + } +} + +class _TextSelectionToolbarItemsRenderBox extends RenderBox with ContainerRenderObjectMixin { + _TextSelectionToolbarItemsRenderBox({ + @required bool isAbove, + @required bool overflowOpen, + }) : assert(overflowOpen != null), + assert(isAbove != null), + _isAbove = isAbove, + _overflowOpen = overflowOpen, + super(); + + // The index of the last item that doesn't overflow. + int _lastIndexThatFits = -1; + + bool _isAbove; + bool get isAbove => _isAbove; + set isAbove(bool value) { + if (value == isAbove) { + return; + } + _isAbove = value; + markNeedsLayout(); + } + + bool _overflowOpen; + bool get overflowOpen => _overflowOpen; + set overflowOpen(bool value) { + if (value == overflowOpen) { + return; + } + _overflowOpen = value; + markNeedsLayout(); + } + + // Layout the necessary children, and figure out where the children first + // overflow, if at all. + void _layoutChildren() { + // When overflow is not open, the toolbar is always a specific height. + final BoxConstraints sizedConstraints = _overflowOpen + ? constraints + : BoxConstraints.loose(Size( + constraints.maxWidth, + _kToolbarHeight, + )); + + int i = -1; + double width = 0.0; + visitChildren((RenderObject renderObjectChild) { + i++; + + // No need to layout children inside the overflow menu when it's closed. + // The opposite is not true. It is necessary to layout the children that + // don't overflow when the overflow menu is open in order to calculate + // _lastIndexThatFits. + if (_lastIndexThatFits != -1 && !overflowOpen) { + return; + } + + final RenderBox child = renderObjectChild as RenderBox; + child.layout(sizedConstraints.loosen(), parentUsesSize: true); + width += child.size.width; + + if (width > sizedConstraints.maxWidth && _lastIndexThatFits == -1) { + _lastIndexThatFits = i - 1; + } + }); + + // If the last child overflows, but only because of the width of the + // overflow button, then just show it and hide the overflow button. + final RenderBox navButton = firstChild; + if (_lastIndexThatFits != -1 + && _lastIndexThatFits == childCount - 2 + && width - navButton.size.width <= sizedConstraints.maxWidth) { + _lastIndexThatFits = -1; + } + } + + // Returns true when the child should be painted, false otherwise. + bool _shouldPaintChild(RenderObject renderObjectChild, int index) { + // Paint the navButton when there is overflow. + if (renderObjectChild == firstChild) { + return _lastIndexThatFits != -1; + } + + // If there is no overflow, all children besides the navButton are painted. + if (_lastIndexThatFits == -1) { + return true; + } + + // When there is overflow, paint if the child is in the part of the menu + // that is currently open. Overflowing children are painted when the + // overflow menu is open, and the children that fit are painted when the + // overflow menu is closed. + return (index > _lastIndexThatFits) == overflowOpen; + } + + // Decide which children will be pained and set their shouldPaint, and set the + // offset that painted children will be placed at. + void _placeChildren() { + int i = -1; + Size nextSize = const Size(0.0, 0.0); + double fitWidth = 0.0; + final RenderBox navButton = firstChild; + double overflowHeight = overflowOpen && !isAbove ? navButton.size.height : 0.0; + visitChildren((RenderObject renderObjectChild) { + i++; + + final RenderBox child = renderObjectChild as RenderBox; + final _ToolbarParentData childParentData = child.parentData as _ToolbarParentData; + + // Handle placing the navigation button after iterating all children. + if (renderObjectChild == navButton) { + return; + } + + // There is no need to place children that won't be painted. + if (!_shouldPaintChild(renderObjectChild, i)) { + childParentData.shouldPaint = false; + return; + } + childParentData.shouldPaint = true; + + if (!overflowOpen) { + childParentData.offset = Offset(fitWidth, 0.0); + fitWidth += child.size.width; + nextSize = Size( + fitWidth, + math.max(child.size.height, nextSize.height), + ); + } else { + childParentData.offset = Offset(0.0, overflowHeight); + overflowHeight += child.size.height; + nextSize = Size( + math.max(child.size.width, nextSize.width), + overflowHeight, + ); + } + }); + + // Place the navigation button if needed. + final _ToolbarParentData navButtonParentData = navButton.parentData as _ToolbarParentData; + if (_shouldPaintChild(firstChild, 0)) { + navButtonParentData.shouldPaint = true; + if (overflowOpen) { + navButtonParentData.offset = isAbove + ? Offset(0.0, overflowHeight) + : Offset.zero; + nextSize = Size( + nextSize.width, + isAbove ? nextSize.height + navButton.size.height : nextSize.height, + ); + } else { + navButtonParentData.offset = Offset(fitWidth, 0.0); + nextSize = Size(nextSize.width + navButton.size.width, nextSize.height); + } + } else { + navButtonParentData.shouldPaint = false; + } + + size = nextSize; + } + + @override + void performLayout() { + _lastIndexThatFits = -1; + if (firstChild == null) { + performResize(); + return; + } + + _layoutChildren(); + _placeChildren(); + } + + @override + void paint(PaintingContext context, Offset offset) { + visitChildren((RenderObject renderObjectChild) { + final RenderBox child = renderObjectChild as RenderBox; + final _ToolbarParentData childParentData = child.parentData as _ToolbarParentData; + if (!childParentData.shouldPaint) { + return; + } + + context.paintChild(child, childParentData.offset + offset); + }); + } + + @override + void setupParentData(RenderBox child) { + if (child.parentData is! _ToolbarParentData) { + child.parentData = _ToolbarParentData(); + } + } + + @override + bool hitTestChildren(BoxHitTestResult result, { Offset position }) { + // The x, y parameters have the top left of the node's box as the origin. + RenderBox child = lastChild; + while (child != null) { + final _ToolbarParentData childParentData = child.parentData as _ToolbarParentData; + + // Don't hit test children aren't shown. + if (!childParentData.shouldPaint) { + child = childParentData.previousSibling; + continue; + } + + final bool isHit = result.addWithPaintOffset( + offset: childParentData.offset, + position: position, + hitTest: (BoxHitTestResult result, Offset transformed) { + assert(transformed == position - childParentData.offset); + return child.hitTest(result, position: transformed); + }, + ); + if (isHit) + return true; + child = childParentData.previousSibling; + } + return false; + } +} + +/// Centers the toolbar around the given anchor, ensuring that it remains on /// screen. class _TextSelectionToolbarLayout extends SingleChildLayoutDelegate { - _TextSelectionToolbarLayout(this.screenSize, this.globalEditableRegion, this.position); + _TextSelectionToolbarLayout(this.anchor, this.upperBounds, this.fitsAbove); - /// The size of the screen at the time that the toolbar was last laid out. - final Size screenSize; + /// Anchor position of the toolbar in global coordinates. + final Offset anchor; - /// Size and position of the editing region at the time the toolbar was last - /// laid out, in global coordinates. - final Rect globalEditableRegion; + /// The upper-most valid y value for the anchor. + final double upperBounds; - /// Anchor position of the toolbar, relative to the top left of the - /// [globalEditableRegion]. - final Offset position; + /// Whether the closed toolbar fits above the anchor position. + /// + /// If the closed toolbar doesn't fit, then the menu is rendered below the + /// anchor position. It should never happen that the toolbar extends below the + /// padded bottom of the screen. + /// + /// If the closed toolbar does fit but it doesn't fit when the overflow menu + /// is open, then the toolbar is still rendered above the anchor position. It + /// then grows downward, overlapping the selection. + final bool fitsAbove; + + // Return the value that centers width as closely as possible to position + // while fitting inside of min and max. + static double _centerOn(double position, double width, double min, double max) { + // If it overflows on the left, put it as far left as possible. + if (position - width / 2.0 < min) { + return min; + } + + // If it overflows on the right, put it as far right as possible. + if (position + width / 2.0 > max) { + return max - width; + } + + // Otherwise it fits while perfectly centered. + return position - width / 2.0; + } @override BoxConstraints getConstraintsForChild(BoxConstraints constraints) { @@ -86,27 +586,22 @@ class _TextSelectionToolbarLayout extends SingleChildLayoutDelegate { @override Offset getPositionForChild(Size size, Size childSize) { - final Offset globalPosition = globalEditableRegion.topLeft + position; - - double x = globalPosition.dx - childSize.width / 2.0; - double y = globalPosition.dy - childSize.height; - - if (x < _kToolbarScreenPadding) - x = _kToolbarScreenPadding; - else if (x + childSize.width > screenSize.width - _kToolbarScreenPadding) - x = screenSize.width - childSize.width - _kToolbarScreenPadding; - - if (y < _kToolbarScreenPadding) - y = _kToolbarScreenPadding; - else if (y + childSize.height > screenSize.height - _kToolbarScreenPadding) - y = screenSize.height - childSize.height - _kToolbarScreenPadding; - - return Offset(x, y); + return Offset( + _centerOn( + anchor.dx, + childSize.width, + _kToolbarScreenPadding, + size.width - _kToolbarScreenPadding, + ), + fitsAbove + ? math.max(upperBounds, anchor.dy - childSize.height) + : anchor.dy, + ); } @override bool shouldRelayout(_TextSelectionToolbarLayout oldDelegate) { - return position != oldDelegate.position; + return anchor != oldDelegate.anchor; } } @@ -143,42 +638,52 @@ class _MaterialTextSelectionControls extends TextSelectionControls { BuildContext context, Rect globalEditableRegion, double textLineHeight, - Offset position, + Offset selectionMidpoint, List endpoints, TextSelectionDelegate delegate, ) { assert(debugCheckHasMediaQuery(context)); assert(debugCheckHasMaterialLocalizations(context)); - // The toolbar should appear below the TextField - // when there is not enough space above the TextField to show it. + // The toolbar should appear below the TextField when there is not enough + // space above the TextField to show it. final TextSelectionPoint startTextSelectionPoint = endpoints[0]; - final double toolbarHeightNeeded = MediaQuery.of(context).padding.top - + _kToolbarScreenPadding + final TextSelectionPoint endTextSelectionPoint = endpoints.length > 1 + ? endpoints[1] + : endpoints[0]; + const double closedToolbarHeightNeeded = _kToolbarScreenPadding + _kToolbarHeight + _kToolbarContentDistance; - final double availableHeight = globalEditableRegion.top + endpoints.first.point.dy - textLineHeight; - final bool fitsAbove = toolbarHeightNeeded <= availableHeight; - final double y = fitsAbove - ? startTextSelectionPoint.point.dy - _kToolbarContentDistance - textLineHeight - : startTextSelectionPoint.point.dy + _kToolbarHeight + _kToolbarContentDistanceBelow; - final Offset preciseMidpoint = Offset(position.dx, y); + final double paddingTop = MediaQuery.of(context).padding.top; + final double availableHeight = globalEditableRegion.top + + startTextSelectionPoint.point.dy + - textLineHeight + - paddingTop; + final bool fitsAbove = closedToolbarHeightNeeded <= availableHeight; + final Offset anchor = Offset( + globalEditableRegion.left + selectionMidpoint.dx, + fitsAbove + ? globalEditableRegion.top + startTextSelectionPoint.point.dy - textLineHeight - _kToolbarContentDistance + : globalEditableRegion.top + endTextSelectionPoint.point.dy + _kToolbarContentDistanceBelow, + ); - return ConstrainedBox( - constraints: BoxConstraints.tight(globalEditableRegion.size), - child: CustomSingleChildLayout( - delegate: _TextSelectionToolbarLayout( - MediaQuery.of(context).size, - globalEditableRegion, - preciseMidpoint, + return Stack( + children: [ + CustomSingleChildLayout( + delegate: _TextSelectionToolbarLayout( + anchor, + _kToolbarScreenPadding + paddingTop, + fitsAbove, + ), + child: _TextSelectionToolbar( + handleCut: canCut(delegate) ? () => handleCut(delegate) : null, + handleCopy: canCopy(delegate) ? () => handleCopy(delegate) : null, + handlePaste: canPaste(delegate) ? () => handlePaste(delegate) : null, + handleSelectAll: canSelectAll(delegate) ? () => handleSelectAll(delegate) : null, + isAbove: fitsAbove, + ), ), - child: _TextSelectionToolbar( - handleCut: canCut(delegate) ? () => handleCut(delegate) : null, - handleCopy: canCopy(delegate) ? () => handleCopy(delegate) : null, - handlePaste: canPaste(delegate) ? () => handlePaste(delegate) : null, - handleSelectAll: canSelectAll(delegate) ? () => handleSelectAll(delegate) : null, - ), - ), + ], ); } @@ -190,7 +695,7 @@ class _MaterialTextSelectionControls extends TextSelectionControls { height: _kHandleSize, child: CustomPaint( painter: _TextSelectionHandlePainter( - color: Theme.of(context).textSelectionHandleColor + color: Theme.of(context).textSelectionHandleColor, ), ), ); diff --git a/packages/flutter/lib/src/rendering/box.dart b/packages/flutter/lib/src/rendering/box.dart index 84d68bbebae..0416e4c9ae8 100644 --- a/packages/flutter/lib/src/rendering/box.dart +++ b/packages/flutter/lib/src/rendering/box.dart @@ -2483,7 +2483,7 @@ mixin RenderBoxContainerDefaultsMixin globalize(Iterable points, RenderBox box) { + return points.map((TextSelectionPoint point) { + return TextSelectionPoint( + box.localToGlobal(point.point), + point.direction, + ); + }).toList(); +} + +Offset textOffsetToPosition(WidgetTester tester, int offset) { + final RenderEditable renderEditable = findRenderEditable(tester); + final List endpoints = globalize( + renderEditable.getEndpointsForSelection( + TextSelection.collapsed(offset: offset), + ), + renderEditable, + ); + expect(endpoints.length, 1); + return endpoints[0].point + const Offset(0.0, -2.0); +} diff --git a/packages/flutter/test/material/text_field_test.dart b/packages/flutter/test/material/text_field_test.dart index dfdd77ac98a..157dd557f90 100644 --- a/packages/flutter/test/material/text_field_test.dart +++ b/packages/flutter/test/material/text_field_test.dart @@ -18,6 +18,7 @@ import 'package:flutter/gestures.dart' show DragStartBehavior, PointerDeviceKind import '../rendering/mock_canvas.dart'; import '../widgets/semantics_tester.dart'; import 'feedback_tester.dart'; +import 'text.dart' show findRenderEditable, globalize, textOffsetToPosition; class MockClipboard { Object _clipboardData = { @@ -141,45 +142,6 @@ void main() { kThreeLines + "\nFourth line won't display and ends at"; - // Returns the first RenderEditable. - RenderEditable findRenderEditable(WidgetTester tester) { - final RenderObject root = tester.renderObject(find.byType(EditableText)); - expect(root, isNotNull); - - RenderEditable renderEditable; - void recursiveFinder(RenderObject child) { - if (child is RenderEditable) { - renderEditable = child; - return; - } - child.visitChildren(recursiveFinder); - } - root.visitChildren(recursiveFinder); - expect(renderEditable, isNotNull); - return renderEditable; - } - - List globalize(Iterable points, RenderBox box) { - return points.map((TextSelectionPoint point) { - return TextSelectionPoint( - box.localToGlobal(point.point), - point.direction, - ); - }).toList(); - } - - Offset textOffsetToPosition(WidgetTester tester, int offset) { - final RenderEditable renderEditable = findRenderEditable(tester); - final List endpoints = globalize( - renderEditable.getEndpointsForSelection( - TextSelection.collapsed(offset: offset), - ), - renderEditable, - ); - expect(endpoints.length, 1); - return endpoints[0].point + const Offset(0.0, -2.0); - } - setUp(() { debugResetSemanticsIdCounter(); }); diff --git a/packages/flutter/test/material/text_selection_test.dart b/packages/flutter/test/material/text_selection_test.dart index 4799badac6d..964f522611f 100644 --- a/packages/flutter/test/material/text_selection_test.dart +++ b/packages/flutter/test/material/text_selection_test.dart @@ -3,8 +3,10 @@ // found in the LICENSE file. import 'package:flutter_test/flutter_test.dart'; -import 'package:flutter/widgets.dart'; import 'package:flutter/material.dart'; +import 'package:flutter/rendering.dart'; +import 'package:flutter/widgets.dart'; +import 'text.dart' show findRenderEditable, globalize, textOffsetToPosition; void main() { group('canSelectAll', () { @@ -63,6 +65,445 @@ void main() { }); }); + group('Text selection menu overflow (Android)', () { + testWidgets('All menu items show when they fit.', (WidgetTester tester) async { + final TextEditingController controller = TextEditingController(text: 'abc def ghi'); + await tester.pumpWidget(MaterialApp( + theme: ThemeData(platform: TargetPlatform.android), + home: Directionality( + textDirection: TextDirection.ltr, + child: MediaQuery( + data: const MediaQueryData(size: Size(800.0, 600.0)), + child: Center( + child: Material( + child: TextField( + controller: controller, + ), + ), + ), + ), + ), + )); + + // Initially, the menu isn't shown at all. + expect(find.text('CUT'), findsNothing); + expect(find.text('COPY'), findsNothing); + expect(find.text('PASTE'), findsNothing); + expect(find.text('SELECT ALL'), findsNothing); + expect(find.byType(IconButton), findsNothing); + + // Tap to place the cursor in the field, then tap the handle to show the + // selection menu. + await tester.tap(find.byType(TextField)); + await tester.pumpAndSettle(); + final RenderEditable renderEditable = findRenderEditable(tester); + final List endpoints = globalize( + renderEditable.getEndpointsForSelection(controller.selection), + renderEditable, + ); + expect(endpoints.length, 1); + final Offset handlePos = endpoints[0].point + const Offset(0.0, 1.0); + await tester.tapAt(handlePos, pointer: 7); + await tester.pump(); + expect(find.text('CUT'), findsNothing); + expect(find.text('COPY'), findsNothing); + expect(find.text('PASTE'), findsOneWidget); + expect(find.text('SELECT ALL'), findsOneWidget); + expect(find.byType(IconButton), findsNothing); + + // Long press to select a word and show the full selection menu. + final Offset textOffset = textOffsetToPosition(tester, 1); + await tester.longPressAt(textOffset); + await tester.pump(); + await tester.pump(); + + // The full menu is shown without the more button. + expect(find.text('CUT'), findsOneWidget); + expect(find.text('COPY'), findsOneWidget); + expect(find.text('PASTE'), findsOneWidget); + expect(find.text('SELECT ALL'), findsOneWidget); + expect(find.byType(IconButton), findsNothing); + }, skip: isBrowser, variant: const TargetPlatformVariant({ TargetPlatform.android })); + + testWidgets('When menu items don\'t fit, an overflow menu is used.', (WidgetTester tester) async { + // Set the screen size to more narrow, so that SELECT ALL can't fit. + tester.binding.window.physicalSizeTestValue = const Size(1000, 800); + addTearDown(tester.binding.window.clearPhysicalSizeTestValue); + + final TextEditingController controller = TextEditingController(text: 'abc def ghi'); + await tester.pumpWidget(MaterialApp( + theme: ThemeData(platform: TargetPlatform.android), + home: Directionality( + textDirection: TextDirection.ltr, + child: MediaQuery( + data: const MediaQueryData(size: Size(800.0, 600.0)), + child: Center( + child: Material( + child: TextField( + controller: controller, + ), + ), + ), + ), + ), + )); + + // Initially, the menu isn't shown at all. + expect(find.text('CUT'), findsNothing); + expect(find.text('COPY'), findsNothing); + expect(find.text('PASTE'), findsNothing); + expect(find.text('SELECT ALL'), findsNothing); + expect(find.byType(IconButton), findsNothing); + + // Long press to show the menu. + final Offset textOffset = textOffsetToPosition(tester, 1); + await tester.longPressAt(textOffset); + await tester.pumpAndSettle(); + + // The last button is missing, and a more button is shown. + expect(find.text('CUT'), findsOneWidget); + expect(find.text('COPY'), findsOneWidget); + expect(find.text('PASTE'), findsOneWidget); + expect(find.text('SELECT ALL'), findsNothing); + expect(find.byType(IconButton), findsOneWidget); + final Offset cutOffset = tester.getTopLeft(find.text('CUT')); + + // Tapping the button shows the overflow menu. + await tester.tap(find.byType(IconButton)); + await tester.pumpAndSettle(); + expect(find.text('CUT'), findsNothing); + expect(find.text('COPY'), findsNothing); + expect(find.text('PASTE'), findsNothing); + expect(find.text('SELECT ALL'), findsOneWidget); + expect(find.byType(IconButton), findsOneWidget); + + // The back button is at the bottom of the overflow menu. + final Offset selectAllOffset = tester.getTopLeft(find.text('SELECT ALL')); + final Offset moreOffset = tester.getTopLeft(find.byType(IconButton)); + expect(moreOffset.dy, greaterThan(selectAllOffset.dy)); + + // The overflow menu grows upward. + expect(selectAllOffset.dy, lessThan(cutOffset.dy)); + + // Tapping the back button shows the selection menu again. + expect(find.byType(IconButton), findsOneWidget); + await tester.tap(find.byType(IconButton)); + await tester.pumpAndSettle(); + expect(find.text('CUT'), findsOneWidget); + expect(find.text('COPY'), findsOneWidget); + expect(find.text('PASTE'), findsOneWidget); + expect(find.text('SELECT ALL'), findsNothing); + expect(find.byType(IconButton), findsOneWidget); + }, skip: isBrowser, variant: const TargetPlatformVariant({ TargetPlatform.android })); + + testWidgets('A smaller menu bumps more items to the overflow menu.', (WidgetTester tester) async { + // Set the screen size so narrow that only CUT and COPY can fit. + tester.binding.window.physicalSizeTestValue = const Size(800, 800); + addTearDown(tester.binding.window.clearPhysicalSizeTestValue); + + final TextEditingController controller = TextEditingController(text: 'abc def ghi'); + await tester.pumpWidget(MaterialApp( + theme: ThemeData(platform: TargetPlatform.android), + home: Directionality( + textDirection: TextDirection.ltr, + child: MediaQuery( + data: const MediaQueryData(size: Size(800.0, 600.0)), + child: Center( + child: Material( + child: TextField( + controller: controller, + ), + ), + ), + ), + ), + )); + + // Initially, the menu isn't shown at all. + expect(find.text('CUT'), findsNothing); + expect(find.text('COPY'), findsNothing); + expect(find.text('PASTE'), findsNothing); + expect(find.text('SELECT ALL'), findsNothing); + expect(find.byType(IconButton), findsNothing); + + // Long press to show the menu. + final Offset textOffset = textOffsetToPosition(tester, 1); + await tester.longPressAt(textOffset); + await tester.pump(); + + // The last two buttons are missing, and a more button is shown. + expect(find.text('CUT'), findsOneWidget); + expect(find.text('COPY'), findsOneWidget); + expect(find.text('PASTE'), findsNothing); + expect(find.text('SELECT ALL'), findsNothing); + expect(find.byType(IconButton), findsOneWidget); + + // Tapping the button shows the overflow menu, which contains both buttons + // missing from the main menu, and a back button. + await tester.tap(find.byType(IconButton)); + await tester.pumpAndSettle(); + expect(find.text('CUT'), findsNothing); + expect(find.text('COPY'), findsNothing); + expect(find.text('PASTE'), findsOneWidget); + expect(find.text('SELECT ALL'), findsOneWidget); + expect(find.byType(IconButton), findsOneWidget); + + // Tapping the back button shows the selection menu again. + await tester.tap(find.byType(IconButton)); + await tester.pumpAndSettle(); + expect(find.text('CUT'), findsOneWidget); + expect(find.text('COPY'), findsOneWidget); + expect(find.text('PASTE'), findsNothing); + expect(find.text('SELECT ALL'), findsNothing); + expect(find.byType(IconButton), findsOneWidget); + }, skip: isBrowser, variant: const TargetPlatformVariant({ TargetPlatform.android })); + + testWidgets('When the menu renders below the text, the overflow menu back button is at the top.', (WidgetTester tester) async { + // Set the screen size to more narrow, so that SELECT ALL can't fit. + tester.binding.window.physicalSizeTestValue = const Size(1000, 800); + addTearDown(tester.binding.window.clearPhysicalSizeTestValue); + + final TextEditingController controller = TextEditingController(text: 'abc def ghi'); + await tester.pumpWidget(MaterialApp( + theme: ThemeData(platform: TargetPlatform.android), + home: Directionality( + textDirection: TextDirection.ltr, + child: MediaQuery( + data: const MediaQueryData(size: Size(800.0, 600.0)), + child: Align( + alignment: Alignment.topLeft, + child: Material( + child: TextField( + controller: controller, + ), + ), + ), + ), + ), + )); + + // Initially, the menu isn't shown at all. + expect(find.text('CUT'), findsNothing); + expect(find.text('COPY'), findsNothing); + expect(find.text('PASTE'), findsNothing); + expect(find.text('SELECT ALL'), findsNothing); + expect(find.byType(IconButton), findsNothing); + + // Long press to show the menu. + final Offset textOffset = textOffsetToPosition(tester, 1); + await tester.longPressAt(textOffset); + await tester.pump(); + + // The last button is missing, and a more button is shown. + expect(find.text('CUT'), findsOneWidget); + expect(find.text('COPY'), findsOneWidget); + expect(find.text('PASTE'), findsOneWidget); + expect(find.text('SELECT ALL'), findsNothing); + expect(find.byType(IconButton), findsOneWidget); + final Offset cutOffset = tester.getTopLeft(find.text('CUT')); + + // Tapping the button shows the overflow menu. + await tester.tap(find.byType(IconButton)); + await tester.pumpAndSettle(); + expect(find.text('CUT'), findsNothing); + expect(find.text('COPY'), findsNothing); + expect(find.text('PASTE'), findsNothing); + expect(find.text('SELECT ALL'), findsOneWidget); + expect(find.byType(IconButton), findsOneWidget); + + // The back button is at the top of the overflow menu. + final Offset selectAllOffset = tester.getTopLeft(find.text('SELECT ALL')); + final Offset moreOffset = tester.getTopLeft(find.byType(IconButton)); + expect(moreOffset.dy, lessThan(selectAllOffset.dy)); + + // The overflow menu grows downward. + expect(selectAllOffset.dy, greaterThan(cutOffset.dy)); + + // Tapping the back button shows the selection menu again. + await tester.tap(find.byType(IconButton)); + await tester.pumpAndSettle(); + expect(find.text('CUT'), findsOneWidget); + expect(find.text('COPY'), findsOneWidget); + expect(find.text('PASTE'), findsOneWidget); + expect(find.text('SELECT ALL'), findsNothing); + expect(find.byType(IconButton), findsOneWidget); + }, skip: isBrowser, variant: const TargetPlatformVariant({ TargetPlatform.android })); + + testWidgets('When the menu items change, the menu is closed and _closedWidth reset.', (WidgetTester tester) async { + // Set the screen size to more narrow, so that SELECT ALL can't fit. + tester.binding.window.physicalSizeTestValue = const Size(1000, 800); + addTearDown(tester.binding.window.clearPhysicalSizeTestValue); + + final TextEditingController controller = TextEditingController(text: 'abc def ghi'); + await tester.pumpWidget(MaterialApp( + theme: ThemeData(platform: TargetPlatform.android), + home: Directionality( + textDirection: TextDirection.ltr, + child: MediaQuery( + data: const MediaQueryData(size: Size(800.0, 600.0)), + child: Align( + alignment: Alignment.topLeft, + child: Material( + child: TextField( + controller: controller, + ), + ), + ), + ), + ), + )); + + // Initially, the menu isn't shown at all. + expect(find.text('CUT'), findsNothing); + expect(find.text('COPY'), findsNothing); + expect(find.text('PASTE'), findsNothing); + expect(find.text('SELECT ALL'), findsNothing); + expect(find.byType(IconButton), findsNothing); + + // Tap to place the cursor and tap again to show the menu without a + // selection. + await tester.tapAt(textOffsetToPosition(tester, 0)); + await tester.pumpAndSettle(); + final RenderEditable renderEditable = findRenderEditable(tester); + final List endpoints = globalize( + renderEditable.getEndpointsForSelection(controller.selection), + renderEditable, + ); + expect(endpoints.length, 1); + final Offset handlePos = endpoints[0].point + const Offset(0.0, 1.0); + await tester.tapAt(handlePos, pointer: 7); + await tester.pumpAndSettle(); + expect(find.text('CUT'), findsNothing); + expect(find.text('COPY'), findsNothing); + expect(find.text('PASTE'), findsOneWidget); + expect(find.text('SELECT ALL'), findsOneWidget); + expect(find.byType(IconButton), findsNothing); + + // Tap SELECT ALL and measure the usual position of CUT, without + // _closedWidth having been used yet. + await tester.tap(find.text('SELECT ALL')); + await tester.pumpAndSettle(); + expect(find.text('CUT'), findsOneWidget); + expect(find.text('COPY'), findsOneWidget); + expect(find.text('PASTE'), findsOneWidget); + expect(find.text('SELECT ALL'), findsNothing); + expect(find.byType(IconButton), findsNothing); + final Offset cutOffset = tester.getTopLeft(find.text('CUT')); + + // Tap to clear the selection. + await tester.tapAt(textOffsetToPosition(tester, 0)); + await tester.pumpAndSettle(); + expect(find.text('CUT'), findsNothing); + expect(find.text('COPY'), findsNothing); + expect(find.text('PASTE'), findsNothing); + expect(find.text('SELECT ALL'), findsNothing); + expect(find.byType(IconButton), findsNothing); + + // Long press to show the menu. + await tester.longPressAt(textOffsetToPosition(tester, 1)); + await tester.pump(); + + // The last button is missing, and a more button is shown. + expect(find.text('CUT'), findsOneWidget); + expect(find.text('COPY'), findsOneWidget); + expect(find.text('PASTE'), findsOneWidget); + expect(find.text('SELECT ALL'), findsNothing); + expect(find.byType(IconButton), findsOneWidget); + + // Tapping the button shows the overflow menu. + await tester.tap(find.byType(IconButton)); + await tester.pumpAndSettle(); + expect(find.text('CUT'), findsNothing); + expect(find.text('COPY'), findsNothing); + expect(find.text('PASTE'), findsNothing); + expect(find.text('SELECT ALL'), findsOneWidget); + expect(find.byType(IconButton), findsOneWidget); + + // Tapping SELECT ALL changes the menu items so that there is no no longer + // any overflow. + await tester.tap(find.text('SELECT ALL')); + await tester.pumpAndSettle(); + expect(find.text('CUT'), findsOneWidget); + expect(find.text('COPY'), findsOneWidget); + expect(find.text('PASTE'), findsOneWidget); + expect(find.text('SELECT ALL'), findsNothing); + expect(find.byType(IconButton), findsNothing); + final Offset newCutOffset = tester.getTopLeft(find.text('CUT')); + expect(newCutOffset, equals(cutOffset)); + }, skip: isBrowser, variant: const TargetPlatformVariant({ TargetPlatform.android })); + }); + + group('menu position', () { + testWidgets('When renders below a block of text, menu appears below bottom endpoint', (WidgetTester tester) async { + final TextEditingController controller = TextEditingController(text: 'abc\ndef\nghi\njkl\nmno\npqr'); + await tester.pumpWidget(MaterialApp( + theme: ThemeData(platform: TargetPlatform.android), + home: Directionality( + textDirection: TextDirection.ltr, + child: MediaQuery( + data: const MediaQueryData(size: Size(800.0, 600.0)), + child: Align( + alignment: Alignment.topLeft, + child: Material( + child: TextField( + controller: controller, + ), + ), + ), + ), + ), + )); + + // Initially, the menu isn't shown at all. + expect(find.text('CUT'), findsNothing); + expect(find.text('COPY'), findsNothing); + expect(find.text('PASTE'), findsNothing); + expect(find.text('SELECT ALL'), findsNothing); + expect(find.byType(IconButton), findsNothing); + + // Tap to place the cursor in the field, then tap the handle to show the + // selection menu. + await tester.tap(find.byType(TextField)); + await tester.pumpAndSettle(); + RenderEditable renderEditable = findRenderEditable(tester); + List endpoints = globalize( + renderEditable.getEndpointsForSelection(controller.selection), + renderEditable, + ); + expect(endpoints.length, 1); + final Offset handlePos = endpoints[0].point + const Offset(0.0, 1.0); + await tester.tapAt(handlePos, pointer: 7); + await tester.pump(); + expect(find.text('CUT'), findsNothing); + expect(find.text('COPY'), findsNothing); + expect(find.text('PASTE'), findsOneWidget); + expect(find.text('SELECT ALL'), findsOneWidget); + expect(find.byType(IconButton), findsNothing); + + // Tap to select all. + await tester.tap(find.text('SELECT ALL')); + await tester.pumpAndSettle(); + + // Only CUT, COPY, and PASTE are shown. + expect(find.text('CUT'), findsOneWidget); + expect(find.text('COPY'), findsOneWidget); + expect(find.text('PASTE'), findsOneWidget); + expect(find.text('SELECT ALL'), findsNothing); + expect(find.byType(IconButton), findsNothing); + + // The menu appears below the bottom handle. + renderEditable = findRenderEditable(tester); + endpoints = globalize( + renderEditable.getEndpointsForSelection(controller.selection), + renderEditable, + ); + expect(endpoints.length, 2); + final Offset bottomHandlePos = endpoints[1].point; + final Offset cutOffset = tester.getTopLeft(find.text('CUT')); + expect(cutOffset.dy, greaterThan(bottomHandlePos.dy)); + }, skip: isBrowser, variant: const TargetPlatformVariant({ TargetPlatform.android })); + }); + group('material handles', () { testWidgets('draws transparent handle correctly', (WidgetTester tester) async { await tester.pumpWidget(RepaintBoundary( diff --git a/packages/flutter_localizations/lib/src/l10n/generated_material_localizations.dart b/packages/flutter_localizations/lib/src/l10n/generated_material_localizations.dart index 1c486ac8a78..6344031b3c2 100644 --- a/packages/flutter_localizations/lib/src/l10n/generated_material_localizations.dart +++ b/packages/flutter_localizations/lib/src/l10n/generated_material_localizations.dart @@ -98,6 +98,9 @@ class MaterialLocalizationAf extends GlobalMaterialLocalizations { @override String get modalBarrierDismissLabel => 'Maak toe'; + @override + String get moreButtonTooltip => 'TBD'; + @override String get nextMonthTooltip => 'Volgende maand'; @@ -302,6 +305,9 @@ class MaterialLocalizationAm extends GlobalMaterialLocalizations { @override String get modalBarrierDismissLabel => 'አሰናብት'; + @override + String get moreButtonTooltip => 'TBD'; + @override String get nextMonthTooltip => 'ቀጣይ ወር'; @@ -506,6 +512,9 @@ class MaterialLocalizationAr extends GlobalMaterialLocalizations { @override String get modalBarrierDismissLabel => 'رفض'; + @override + String get moreButtonTooltip => 'TBD'; + @override String get nextMonthTooltip => 'الشهر التالي'; @@ -710,6 +719,9 @@ class MaterialLocalizationAs extends GlobalMaterialLocalizations { @override String get modalBarrierDismissLabel => 'অগ্ৰাহ্য কৰক'; + @override + String get moreButtonTooltip => 'TBD'; + @override String get nextMonthTooltip => 'পৰৱৰ্তী মাহ'; @@ -914,6 +926,9 @@ class MaterialLocalizationAz extends GlobalMaterialLocalizations { @override String get modalBarrierDismissLabel => 'İmtina edin'; + @override + String get moreButtonTooltip => 'TBD'; + @override String get nextMonthTooltip => 'Növbəti ay'; @@ -1118,6 +1133,9 @@ class MaterialLocalizationBe extends GlobalMaterialLocalizations { @override String get modalBarrierDismissLabel => 'Адхіліць'; + @override + String get moreButtonTooltip => 'TBD'; + @override String get nextMonthTooltip => 'Наступны месяц'; @@ -1322,6 +1340,9 @@ class MaterialLocalizationBg extends GlobalMaterialLocalizations { @override String get modalBarrierDismissLabel => 'Отхвърляне'; + @override + String get moreButtonTooltip => 'TBD'; + @override String get nextMonthTooltip => 'Следващият месец'; @@ -1526,6 +1547,9 @@ class MaterialLocalizationBn extends GlobalMaterialLocalizations { @override String get modalBarrierDismissLabel => 'খারিজ করুন'; + @override + String get moreButtonTooltip => 'TBD'; + @override String get nextMonthTooltip => 'পরের মাস'; @@ -1730,6 +1754,9 @@ class MaterialLocalizationBs extends GlobalMaterialLocalizations { @override String get modalBarrierDismissLabel => 'Odbaci'; + @override + String get moreButtonTooltip => 'TBD'; + @override String get nextMonthTooltip => 'Sljedeći mjesec'; @@ -1934,6 +1961,9 @@ class MaterialLocalizationCa extends GlobalMaterialLocalizations { @override String get modalBarrierDismissLabel => 'Ignora'; + @override + String get moreButtonTooltip => 'TBD'; + @override String get nextMonthTooltip => 'Mes següent'; @@ -2138,6 +2168,9 @@ class MaterialLocalizationCs extends GlobalMaterialLocalizations { @override String get modalBarrierDismissLabel => 'Zavřít'; + @override + String get moreButtonTooltip => 'TBD'; + @override String get nextMonthTooltip => 'Další měsíc'; @@ -2342,6 +2375,9 @@ class MaterialLocalizationDa extends GlobalMaterialLocalizations { @override String get modalBarrierDismissLabel => 'Afvis'; + @override + String get moreButtonTooltip => 'TBD'; + @override String get nextMonthTooltip => 'Næste måned'; @@ -2546,6 +2582,9 @@ class MaterialLocalizationDe extends GlobalMaterialLocalizations { @override String get modalBarrierDismissLabel => 'Schließen'; + @override + String get moreButtonTooltip => 'TBD'; + @override String get nextMonthTooltip => 'Nächster Monat'; @@ -2780,6 +2819,9 @@ class MaterialLocalizationEl extends GlobalMaterialLocalizations { @override String get modalBarrierDismissLabel => 'Παράβλεψη'; + @override + String get moreButtonTooltip => 'TBD'; + @override String get nextMonthTooltip => 'Επόμενος μήνας'; @@ -2984,6 +3026,9 @@ class MaterialLocalizationEn extends GlobalMaterialLocalizations { @override String get modalBarrierDismissLabel => 'Dismiss'; + @override + String get moreButtonTooltip => 'More'; + @override String get nextMonthTooltip => 'Next month'; @@ -3533,6 +3578,9 @@ class MaterialLocalizationEs extends GlobalMaterialLocalizations { @override String get modalBarrierDismissLabel => 'Cerrar'; + @override + String get moreButtonTooltip => 'TBD'; + @override String get nextMonthTooltip => 'Mes siguiente'; @@ -5360,6 +5408,9 @@ class MaterialLocalizationEt extends GlobalMaterialLocalizations { @override String get modalBarrierDismissLabel => 'Loobu'; + @override + String get moreButtonTooltip => 'TBD'; + @override String get nextMonthTooltip => 'Järgmine kuu'; @@ -5564,6 +5615,9 @@ class MaterialLocalizationEu extends GlobalMaterialLocalizations { @override String get modalBarrierDismissLabel => 'Baztertu'; + @override + String get moreButtonTooltip => 'TBD'; + @override String get nextMonthTooltip => 'Hurrengo hilabetea'; @@ -5768,6 +5822,9 @@ class MaterialLocalizationFa extends GlobalMaterialLocalizations { @override String get modalBarrierDismissLabel => 'نپذیرفتن'; + @override + String get moreButtonTooltip => 'TBD'; + @override String get nextMonthTooltip => 'ماه بعد'; @@ -5972,6 +6029,9 @@ class MaterialLocalizationFi extends GlobalMaterialLocalizations { @override String get modalBarrierDismissLabel => 'Ohita'; + @override + String get moreButtonTooltip => 'TBD'; + @override String get nextMonthTooltip => 'Seuraava kuukausi'; @@ -6176,6 +6236,9 @@ class MaterialLocalizationFil extends GlobalMaterialLocalizations { @override String get modalBarrierDismissLabel => 'I-dismiss'; + @override + String get moreButtonTooltip => 'TBD'; + @override String get nextMonthTooltip => 'Susunod na buwan'; @@ -6380,6 +6443,9 @@ class MaterialLocalizationFr extends GlobalMaterialLocalizations { @override String get modalBarrierDismissLabel => 'Ignorer'; + @override + String get moreButtonTooltip => 'TBD'; + @override String get nextMonthTooltip => 'Mois suivant'; @@ -6638,6 +6704,9 @@ class MaterialLocalizationGl extends GlobalMaterialLocalizations { @override String get modalBarrierDismissLabel => 'Ignorar'; + @override + String get moreButtonTooltip => 'TBD'; + @override String get nextMonthTooltip => 'Mes seguinte'; @@ -6842,6 +6911,9 @@ class MaterialLocalizationGsw extends GlobalMaterialLocalizations { @override String get modalBarrierDismissLabel => 'Schließen'; + @override + String get moreButtonTooltip => 'TBD'; + @override String get nextMonthTooltip => 'Nächster Monat'; @@ -7046,6 +7118,9 @@ class MaterialLocalizationGu extends GlobalMaterialLocalizations { @override String get modalBarrierDismissLabel => 'છોડી દો'; + @override + String get moreButtonTooltip => 'TBD'; + @override String get nextMonthTooltip => 'આગલો મહિનો'; @@ -7250,6 +7325,9 @@ class MaterialLocalizationHe extends GlobalMaterialLocalizations { @override String get modalBarrierDismissLabel => 'סגירה'; + @override + String get moreButtonTooltip => 'TBD'; + @override String get nextMonthTooltip => 'החודש הבא'; @@ -7454,6 +7532,9 @@ class MaterialLocalizationHi extends GlobalMaterialLocalizations { @override String get modalBarrierDismissLabel => 'खारिज करें'; + @override + String get moreButtonTooltip => 'TBD'; + @override String get nextMonthTooltip => 'अगला महीना'; @@ -7658,6 +7739,9 @@ class MaterialLocalizationHr extends GlobalMaterialLocalizations { @override String get modalBarrierDismissLabel => 'Odbaci'; + @override + String get moreButtonTooltip => 'TBD'; + @override String get nextMonthTooltip => 'Sljedeći mjesec'; @@ -7862,6 +7946,9 @@ class MaterialLocalizationHu extends GlobalMaterialLocalizations { @override String get modalBarrierDismissLabel => 'Elvetés'; + @override + String get moreButtonTooltip => 'TBD'; + @override String get nextMonthTooltip => 'Következő hónap'; @@ -8066,6 +8153,9 @@ class MaterialLocalizationHy extends GlobalMaterialLocalizations { @override String get modalBarrierDismissLabel => 'Փակել'; + @override + String get moreButtonTooltip => 'TBD'; + @override String get nextMonthTooltip => 'Հաջորդ ամիս'; @@ -8270,6 +8360,9 @@ class MaterialLocalizationId extends GlobalMaterialLocalizations { @override String get modalBarrierDismissLabel => 'Tutup'; + @override + String get moreButtonTooltip => 'TBD'; + @override String get nextMonthTooltip => 'Bulan berikutnya'; @@ -8474,6 +8567,9 @@ class MaterialLocalizationIs extends GlobalMaterialLocalizations { @override String get modalBarrierDismissLabel => 'Hunsa'; + @override + String get moreButtonTooltip => 'TBD'; + @override String get nextMonthTooltip => 'Næsti mánuður'; @@ -8678,6 +8774,9 @@ class MaterialLocalizationIt extends GlobalMaterialLocalizations { @override String get modalBarrierDismissLabel => 'Ignora'; + @override + String get moreButtonTooltip => 'TBD'; + @override String get nextMonthTooltip => 'Mese successivo'; @@ -8882,6 +8981,9 @@ class MaterialLocalizationJa extends GlobalMaterialLocalizations { @override String get modalBarrierDismissLabel => '閉じる'; + @override + String get moreButtonTooltip => 'TBD'; + @override String get nextMonthTooltip => '来月'; @@ -9086,6 +9188,9 @@ class MaterialLocalizationKa extends GlobalMaterialLocalizations { @override String get modalBarrierDismissLabel => 'დახურვა'; + @override + String get moreButtonTooltip => 'TBD'; + @override String get nextMonthTooltip => 'შემდეგი თვე'; @@ -9290,6 +9395,9 @@ class MaterialLocalizationKk extends GlobalMaterialLocalizations { @override String get modalBarrierDismissLabel => 'Жабу'; + @override + String get moreButtonTooltip => 'TBD'; + @override String get nextMonthTooltip => 'Келесі ай'; @@ -9494,6 +9602,9 @@ class MaterialLocalizationKm extends GlobalMaterialLocalizations { @override String get modalBarrierDismissLabel => 'ច្រាន​ចោល'; + @override + String get moreButtonTooltip => 'TBD'; + @override String get nextMonthTooltip => 'ខែ​​ក្រោយ'; @@ -9698,6 +9809,9 @@ class MaterialLocalizationKn extends GlobalMaterialLocalizations { @override String get modalBarrierDismissLabel => '\u{cb5}\u{c9c}\u{cbe}\u{c97}\u{cca}\u{cb3}\u{cbf}\u{cb8}\u{cbf}'; + @override + String get moreButtonTooltip => 'TBD'; + @override String get nextMonthTooltip => '\u{cae}\u{cc1}\u{c82}\u{ca6}\u{cbf}\u{ca8}\u{20}\u{ca4}\u{cbf}\u{c82}\u{c97}\u{cb3}\u{cc1}'; @@ -9902,6 +10016,9 @@ class MaterialLocalizationKo extends GlobalMaterialLocalizations { @override String get modalBarrierDismissLabel => '닫기'; + @override + String get moreButtonTooltip => 'TBD'; + @override String get nextMonthTooltip => '다음 달'; @@ -10106,6 +10223,9 @@ class MaterialLocalizationKy extends GlobalMaterialLocalizations { @override String get modalBarrierDismissLabel => 'Жабуу'; + @override + String get moreButtonTooltip => 'TBD'; + @override String get nextMonthTooltip => 'Кийинки ай'; @@ -10310,6 +10430,9 @@ class MaterialLocalizationLo extends GlobalMaterialLocalizations { @override String get modalBarrierDismissLabel => 'ປິດໄວ້'; + @override + String get moreButtonTooltip => 'TBD'; + @override String get nextMonthTooltip => 'ເດືອນໜ້າ'; @@ -10514,6 +10637,9 @@ class MaterialLocalizationLt extends GlobalMaterialLocalizations { @override String get modalBarrierDismissLabel => 'Atsisakyti'; + @override + String get moreButtonTooltip => 'TBD'; + @override String get nextMonthTooltip => 'Kitas mėnuo'; @@ -10718,6 +10844,9 @@ class MaterialLocalizationLv extends GlobalMaterialLocalizations { @override String get modalBarrierDismissLabel => 'Nerādīt'; + @override + String get moreButtonTooltip => 'TBD'; + @override String get nextMonthTooltip => 'Nākamais mēnesis'; @@ -10922,6 +11051,9 @@ class MaterialLocalizationMk extends GlobalMaterialLocalizations { @override String get modalBarrierDismissLabel => 'Отфрли'; + @override + String get moreButtonTooltip => 'TBD'; + @override String get nextMonthTooltip => 'Следниот месец'; @@ -11126,6 +11258,9 @@ class MaterialLocalizationMl extends GlobalMaterialLocalizations { @override String get modalBarrierDismissLabel => 'നിരസിക്കുക'; + @override + String get moreButtonTooltip => 'TBD'; + @override String get nextMonthTooltip => 'അടുത്ത മാസം'; @@ -11330,6 +11465,9 @@ class MaterialLocalizationMn extends GlobalMaterialLocalizations { @override String get modalBarrierDismissLabel => 'Үл хэрэгсэх'; + @override + String get moreButtonTooltip => 'TBD'; + @override String get nextMonthTooltip => 'Дараах сар'; @@ -11534,6 +11672,9 @@ class MaterialLocalizationMr extends GlobalMaterialLocalizations { @override String get modalBarrierDismissLabel => 'डिसमिस करा'; + @override + String get moreButtonTooltip => 'TBD'; + @override String get nextMonthTooltip => 'पुढील महिना'; @@ -11738,6 +11879,9 @@ class MaterialLocalizationMs extends GlobalMaterialLocalizations { @override String get modalBarrierDismissLabel => 'Tolak'; + @override + String get moreButtonTooltip => 'TBD'; + @override String get nextMonthTooltip => 'Bulan depan'; @@ -11942,6 +12086,9 @@ class MaterialLocalizationMy extends GlobalMaterialLocalizations { @override String get modalBarrierDismissLabel => 'ပယ်ရန်'; + @override + String get moreButtonTooltip => 'TBD'; + @override String get nextMonthTooltip => 'နောက်လ'; @@ -12146,6 +12293,9 @@ class MaterialLocalizationNb extends GlobalMaterialLocalizations { @override String get modalBarrierDismissLabel => 'Avvis'; + @override + String get moreButtonTooltip => 'TBD'; + @override String get nextMonthTooltip => 'Neste måned'; @@ -12350,6 +12500,9 @@ class MaterialLocalizationNe extends GlobalMaterialLocalizations { @override String get modalBarrierDismissLabel => 'खारेज गर्नुहोस्'; + @override + String get moreButtonTooltip => 'TBD'; + @override String get nextMonthTooltip => 'अर्को महिना'; @@ -12554,6 +12707,9 @@ class MaterialLocalizationNl extends GlobalMaterialLocalizations { @override String get modalBarrierDismissLabel => 'Sluiten'; + @override + String get moreButtonTooltip => 'TBD'; + @override String get nextMonthTooltip => 'Volgende maand'; @@ -12758,6 +12914,9 @@ class MaterialLocalizationOr extends GlobalMaterialLocalizations { @override String get modalBarrierDismissLabel => 'ଖାରଜ କରନ୍ତୁ'; + @override + String get moreButtonTooltip => 'TBD'; + @override String get nextMonthTooltip => 'ପରବର୍ତ୍ତୀ ମାସ'; @@ -12962,6 +13121,9 @@ class MaterialLocalizationPa extends GlobalMaterialLocalizations { @override String get modalBarrierDismissLabel => 'ਖਾਰਜ ਕਰੋ'; + @override + String get moreButtonTooltip => 'TBD'; + @override String get nextMonthTooltip => 'ਅਗਲਾ ਮਹੀਨਾ'; @@ -13166,6 +13328,9 @@ class MaterialLocalizationPl extends GlobalMaterialLocalizations { @override String get modalBarrierDismissLabel => 'Zamknij'; + @override + String get moreButtonTooltip => 'TBD'; + @override String get nextMonthTooltip => 'Następny miesiąc'; @@ -13370,6 +13535,9 @@ class MaterialLocalizationPs extends GlobalMaterialLocalizations { @override String get modalBarrierDismissLabel => 'رد کړه'; + @override + String get moreButtonTooltip => 'TBD'; + @override String get nextMonthTooltip => 'بله میاشت'; @@ -13574,6 +13742,9 @@ class MaterialLocalizationPt extends GlobalMaterialLocalizations { @override String get modalBarrierDismissLabel => 'Dispensar'; + @override + String get moreButtonTooltip => 'TBD'; + @override String get nextMonthTooltip => 'Próximo mês'; @@ -13856,6 +14027,9 @@ class MaterialLocalizationRo extends GlobalMaterialLocalizations { @override String get modalBarrierDismissLabel => 'Închideți'; + @override + String get moreButtonTooltip => 'TBD'; + @override String get nextMonthTooltip => 'Luna viitoare'; @@ -14060,6 +14234,9 @@ class MaterialLocalizationRu extends GlobalMaterialLocalizations { @override String get modalBarrierDismissLabel => 'Закрыть'; + @override + String get moreButtonTooltip => 'TBD'; + @override String get nextMonthTooltip => 'Следующий месяц'; @@ -14264,6 +14441,9 @@ class MaterialLocalizationSi extends GlobalMaterialLocalizations { @override String get modalBarrierDismissLabel => 'ඉවත ලන්න'; + @override + String get moreButtonTooltip => 'TBD'; + @override String get nextMonthTooltip => 'ඊළඟ මාසය'; @@ -14468,6 +14648,9 @@ class MaterialLocalizationSk extends GlobalMaterialLocalizations { @override String get modalBarrierDismissLabel => 'Odmietnuť'; + @override + String get moreButtonTooltip => 'TBD'; + @override String get nextMonthTooltip => 'Budúci mesiac'; @@ -14672,6 +14855,9 @@ class MaterialLocalizationSl extends GlobalMaterialLocalizations { @override String get modalBarrierDismissLabel => 'Opusti'; + @override + String get moreButtonTooltip => 'TBD'; + @override String get nextMonthTooltip => 'Naslednji mesec'; @@ -14876,6 +15062,9 @@ class MaterialLocalizationSq extends GlobalMaterialLocalizations { @override String get modalBarrierDismissLabel => 'Hiq'; + @override + String get moreButtonTooltip => 'TBD'; + @override String get nextMonthTooltip => 'Muaji i ardhshëm'; @@ -15080,6 +15269,9 @@ class MaterialLocalizationSr extends GlobalMaterialLocalizations { @override String get modalBarrierDismissLabel => 'Одбаци'; + @override + String get moreButtonTooltip => 'TBD'; + @override String get nextMonthTooltip => 'Следећи месец'; @@ -15488,6 +15680,9 @@ class MaterialLocalizationSv extends GlobalMaterialLocalizations { @override String get modalBarrierDismissLabel => 'Stäng'; + @override + String get moreButtonTooltip => 'TBD'; + @override String get nextMonthTooltip => 'Nästa månad'; @@ -15692,6 +15887,9 @@ class MaterialLocalizationSw extends GlobalMaterialLocalizations { @override String get modalBarrierDismissLabel => 'Ondoa'; + @override + String get moreButtonTooltip => 'TBD'; + @override String get nextMonthTooltip => 'Mwezi ujao'; @@ -15896,6 +16094,9 @@ class MaterialLocalizationTa extends GlobalMaterialLocalizations { @override String get modalBarrierDismissLabel => 'நிராகரிக்கும்'; + @override + String get moreButtonTooltip => 'TBD'; + @override String get nextMonthTooltip => 'அடுத்த மாதம்'; @@ -16100,6 +16301,9 @@ class MaterialLocalizationTe extends GlobalMaterialLocalizations { @override String get modalBarrierDismissLabel => 'విస్మరించు'; + @override + String get moreButtonTooltip => 'TBD'; + @override String get nextMonthTooltip => 'తర్వాత నెల'; @@ -16304,6 +16508,9 @@ class MaterialLocalizationTh extends GlobalMaterialLocalizations { @override String get modalBarrierDismissLabel => 'ปิด'; + @override + String get moreButtonTooltip => 'TBD'; + @override String get nextMonthTooltip => 'เดือนหน้า'; @@ -16508,6 +16715,9 @@ class MaterialLocalizationTl extends GlobalMaterialLocalizations { @override String get modalBarrierDismissLabel => 'I-dismiss'; + @override + String get moreButtonTooltip => 'TBD'; + @override String get nextMonthTooltip => 'Susunod na buwan'; @@ -16712,6 +16922,9 @@ class MaterialLocalizationTr extends GlobalMaterialLocalizations { @override String get modalBarrierDismissLabel => 'Kapat'; + @override + String get moreButtonTooltip => 'TBD'; + @override String get nextMonthTooltip => 'Gelecek ay'; @@ -16916,6 +17129,9 @@ class MaterialLocalizationUk extends GlobalMaterialLocalizations { @override String get modalBarrierDismissLabel => 'Закрити'; + @override + String get moreButtonTooltip => 'TBD'; + @override String get nextMonthTooltip => 'Наступний місяць'; @@ -17120,6 +17336,9 @@ class MaterialLocalizationUr extends GlobalMaterialLocalizations { @override String get modalBarrierDismissLabel => 'برخاست کریں'; + @override + String get moreButtonTooltip => 'TBD'; + @override String get nextMonthTooltip => 'اگلا مہینہ'; @@ -17324,6 +17543,9 @@ class MaterialLocalizationUz extends GlobalMaterialLocalizations { @override String get modalBarrierDismissLabel => 'Yopish'; + @override + String get moreButtonTooltip => 'TBD'; + @override String get nextMonthTooltip => 'Keyingi oy'; @@ -17528,6 +17750,9 @@ class MaterialLocalizationVi extends GlobalMaterialLocalizations { @override String get modalBarrierDismissLabel => 'Bỏ qua'; + @override + String get moreButtonTooltip => 'TBD'; + @override String get nextMonthTooltip => 'Tháng sau'; @@ -17732,6 +17957,9 @@ class MaterialLocalizationZh extends GlobalMaterialLocalizations { @override String get modalBarrierDismissLabel => '关闭'; + @override + String get moreButtonTooltip => 'TBD'; + @override String get nextMonthTooltip => '下个月'; @@ -18209,6 +18437,9 @@ class MaterialLocalizationZu extends GlobalMaterialLocalizations { @override String get modalBarrierDismissLabel => 'Cashisa'; + @override + String get moreButtonTooltip => 'TBD'; + @override String get nextMonthTooltip => 'Inyanga ezayo'; diff --git a/packages/flutter_localizations/lib/src/l10n/material_af.arb b/packages/flutter_localizations/lib/src/l10n/material_af.arb index 85367da31ac..8390dcc686c 100644 --- a/packages/flutter_localizations/lib/src/l10n/material_af.arb +++ b/packages/flutter_localizations/lib/src/l10n/material_af.arb @@ -50,5 +50,6 @@ "collapsedIconTapHint": "Vou uit", "remainingTextFieldCharacterCountOne": "1 karakter oor", "remainingTextFieldCharacterCountOther": "$remainingCount karakters oor", - "refreshIndicatorSemanticLabel": "Herlaai" + "refreshIndicatorSemanticLabel": "Herlaai", + "moreButtonTooltip": "TBD" } diff --git a/packages/flutter_localizations/lib/src/l10n/material_am.arb b/packages/flutter_localizations/lib/src/l10n/material_am.arb index ace6f2a888d..a99e6fea7a0 100644 --- a/packages/flutter_localizations/lib/src/l10n/material_am.arb +++ b/packages/flutter_localizations/lib/src/l10n/material_am.arb @@ -50,5 +50,6 @@ "collapsedIconTapHint": "ዘርጋ", "remainingTextFieldCharacterCountOne": "1 ቁምፊ ይቀራል", "remainingTextFieldCharacterCountOther": "$remainingCount ቁምፊዎች ይቀራሉ", - "refreshIndicatorSemanticLabel": "አድስ" + "refreshIndicatorSemanticLabel": "አድስ", + "moreButtonTooltip": "TBD" } diff --git a/packages/flutter_localizations/lib/src/l10n/material_ar.arb b/packages/flutter_localizations/lib/src/l10n/material_ar.arb index 0062c25759e..9d679aa041c 100644 --- a/packages/flutter_localizations/lib/src/l10n/material_ar.arb +++ b/packages/flutter_localizations/lib/src/l10n/material_ar.arb @@ -58,5 +58,6 @@ "remainingTextFieldCharacterCountZero": "لا أحرف متبقية", "remainingTextFieldCharacterCountOne": "حرف واحد متبقٍ", "remainingTextFieldCharacterCountOther": "$remainingCount حرف متبقٍ", - "refreshIndicatorSemanticLabel": "إعادة تحميل" + "refreshIndicatorSemanticLabel": "إعادة تحميل", + "moreButtonTooltip": "TBD" } diff --git a/packages/flutter_localizations/lib/src/l10n/material_as.arb b/packages/flutter_localizations/lib/src/l10n/material_as.arb index bfaeb9bae71..9ed02265f6c 100644 --- a/packages/flutter_localizations/lib/src/l10n/material_as.arb +++ b/packages/flutter_localizations/lib/src/l10n/material_as.arb @@ -50,5 +50,6 @@ "collapsedIconTapHint": "বিস্তাৰ কৰক", "remainingTextFieldCharacterCountOne": "১টা বর্ণ বাকী আছে", "remainingTextFieldCharacterCountOther": "$remainingCountটা বর্ণ বাকী আছে", - "refreshIndicatorSemanticLabel": "ৰিফ্ৰেশ্ব কৰক" + "refreshIndicatorSemanticLabel": "ৰিফ্ৰেশ্ব কৰক", + "moreButtonTooltip": "TBD" } diff --git a/packages/flutter_localizations/lib/src/l10n/material_az.arb b/packages/flutter_localizations/lib/src/l10n/material_az.arb index bae6af2219b..6449b4be35f 100644 --- a/packages/flutter_localizations/lib/src/l10n/material_az.arb +++ b/packages/flutter_localizations/lib/src/l10n/material_az.arb @@ -50,5 +50,6 @@ "collapsedIconTapHint": "Genişləndirin", "remainingTextFieldCharacterCountOne": "1 simvol qalır", "remainingTextFieldCharacterCountOther": "$remainingCount simvol qalır", - "refreshIndicatorSemanticLabel": "Yeniləyin" + "refreshIndicatorSemanticLabel": "Yeniləyin", + "moreButtonTooltip": "TBD" } diff --git a/packages/flutter_localizations/lib/src/l10n/material_be.arb b/packages/flutter_localizations/lib/src/l10n/material_be.arb index a34a6c3a68f..c38f6f38975 100644 --- a/packages/flutter_localizations/lib/src/l10n/material_be.arb +++ b/packages/flutter_localizations/lib/src/l10n/material_be.arb @@ -54,5 +54,6 @@ "collapsedIconTapHint": "Разгарнуць", "remainingTextFieldCharacterCountOne": "Застаўся 1 сімвал", "remainingTextFieldCharacterCountOther": "Засталося $remainingCount сімвала", - "refreshIndicatorSemanticLabel": "Абнавіць" + "refreshIndicatorSemanticLabel": "Абнавіць", + "moreButtonTooltip": "TBD" } diff --git a/packages/flutter_localizations/lib/src/l10n/material_bg.arb b/packages/flutter_localizations/lib/src/l10n/material_bg.arb index cd6e683b8e2..f4774f89c54 100644 --- a/packages/flutter_localizations/lib/src/l10n/material_bg.arb +++ b/packages/flutter_localizations/lib/src/l10n/material_bg.arb @@ -51,5 +51,6 @@ "remainingTextFieldCharacterCountZero": "TBD", "remainingTextFieldCharacterCountOne": "Остава 1 знак", "remainingTextFieldCharacterCountOther": "Остават $remainingCount знака", - "refreshIndicatorSemanticLabel": "Опресняване" + "refreshIndicatorSemanticLabel": "Опресняване", + "moreButtonTooltip": "TBD" } diff --git a/packages/flutter_localizations/lib/src/l10n/material_bn.arb b/packages/flutter_localizations/lib/src/l10n/material_bn.arb index c8349fe5191..8055be3eb45 100644 --- a/packages/flutter_localizations/lib/src/l10n/material_bn.arb +++ b/packages/flutter_localizations/lib/src/l10n/material_bn.arb @@ -50,5 +50,6 @@ "collapsedIconTapHint": "বড় করুন", "remainingTextFieldCharacterCountOne": "আর ১টি অক্ষর লেখা যাবে", "remainingTextFieldCharacterCountOther": "আর $remainingCountটি অক্ষর লেখা যাবে", - "refreshIndicatorSemanticLabel": "রিফ্রেশ করুন" + "refreshIndicatorSemanticLabel": "রিফ্রেশ করুন", + "moreButtonTooltip": "TBD" } diff --git a/packages/flutter_localizations/lib/src/l10n/material_bs.arb b/packages/flutter_localizations/lib/src/l10n/material_bs.arb index 89979a70856..b2ff5d030bf 100644 --- a/packages/flutter_localizations/lib/src/l10n/material_bs.arb +++ b/packages/flutter_localizations/lib/src/l10n/material_bs.arb @@ -53,5 +53,6 @@ "remainingTextFieldCharacterCountZero": "TBD", "remainingTextFieldCharacterCountOne": "Još jedan znak", "remainingTextFieldCharacterCountOther": "Još $remainingCount znakova", - "refreshIndicatorSemanticLabel": "Osvježi" + "refreshIndicatorSemanticLabel": "Osvježi", + "moreButtonTooltip": "TBD" } diff --git a/packages/flutter_localizations/lib/src/l10n/material_ca.arb b/packages/flutter_localizations/lib/src/l10n/material_ca.arb index ad17f41bda9..5b515417e17 100644 --- a/packages/flutter_localizations/lib/src/l10n/material_ca.arb +++ b/packages/flutter_localizations/lib/src/l10n/material_ca.arb @@ -51,5 +51,6 @@ "remainingTextFieldCharacterCountZero": "TBD", "remainingTextFieldCharacterCountOne": "Queda 1 caràcter", "remainingTextFieldCharacterCountOther": "Queden $remainingCount caràcters", - "refreshIndicatorSemanticLabel": "Actualitza" + "refreshIndicatorSemanticLabel": "Actualitza", + "moreButtonTooltip": "TBD" } diff --git a/packages/flutter_localizations/lib/src/l10n/material_cs.arb b/packages/flutter_localizations/lib/src/l10n/material_cs.arb index 592292073f1..ac28cb444e8 100644 --- a/packages/flutter_localizations/lib/src/l10n/material_cs.arb +++ b/packages/flutter_localizations/lib/src/l10n/material_cs.arb @@ -55,5 +55,6 @@ "remainingTextFieldCharacterCountZero": "TBD", "remainingTextFieldCharacterCountOne": "Zbývá 1 znak", "remainingTextFieldCharacterCountOther": "Zbývá $remainingCount znaků", - "refreshIndicatorSemanticLabel": "Obnovit" + "refreshIndicatorSemanticLabel": "Obnovit", + "moreButtonTooltip": "TBD" } diff --git a/packages/flutter_localizations/lib/src/l10n/material_da.arb b/packages/flutter_localizations/lib/src/l10n/material_da.arb index c3caf779dfe..9efeec38c28 100644 --- a/packages/flutter_localizations/lib/src/l10n/material_da.arb +++ b/packages/flutter_localizations/lib/src/l10n/material_da.arb @@ -51,5 +51,6 @@ "remainingTextFieldCharacterCountZero": "TBD", "remainingTextFieldCharacterCountOne": "Ét tegn tilbage", "remainingTextFieldCharacterCountOther": "$remainingCount tegn tilbage", - "refreshIndicatorSemanticLabel": "Opdater" + "refreshIndicatorSemanticLabel": "Opdater", + "moreButtonTooltip": "TBD" } diff --git a/packages/flutter_localizations/lib/src/l10n/material_de.arb b/packages/flutter_localizations/lib/src/l10n/material_de.arb index b8eedd0a7fc..691cf6c229e 100644 --- a/packages/flutter_localizations/lib/src/l10n/material_de.arb +++ b/packages/flutter_localizations/lib/src/l10n/material_de.arb @@ -52,5 +52,6 @@ "remainingTextFieldCharacterCountZero": "TBD", "remainingTextFieldCharacterCountOne": "Noch 1 Zeichen", "remainingTextFieldCharacterCountOther": "Noch $remainingCount Zeichen", - "refreshIndicatorSemanticLabel": "Aktualisieren" + "refreshIndicatorSemanticLabel": "Aktualisieren", + "moreButtonTooltip": "TBD" } diff --git a/packages/flutter_localizations/lib/src/l10n/material_el.arb b/packages/flutter_localizations/lib/src/l10n/material_el.arb index 2a3b60751fc..68eec0d04e3 100644 --- a/packages/flutter_localizations/lib/src/l10n/material_el.arb +++ b/packages/flutter_localizations/lib/src/l10n/material_el.arb @@ -51,5 +51,6 @@ "remainingTextFieldCharacterCountZero": "TBD", "remainingTextFieldCharacterCountOne": "απομένει 1 χαρακτήρας", "remainingTextFieldCharacterCountOther": "απομένουν $remainingCount χαρακτήρες", - "refreshIndicatorSemanticLabel": "Ανανέωση" + "refreshIndicatorSemanticLabel": "Ανανέωση", + "moreButtonTooltip": "TBD" } diff --git a/packages/flutter_localizations/lib/src/l10n/material_en.arb b/packages/flutter_localizations/lib/src/l10n/material_en.arb index fc3402fcd5c..f51d17be94e 100644 --- a/packages/flutter_localizations/lib/src/l10n/material_en.arb +++ b/packages/flutter_localizations/lib/src/l10n/material_en.arb @@ -31,6 +31,11 @@ "description": "The tooltip for the delete button of chips." }, + "moreButtonTooltip": "More", + "@moreButtonTooltip": { + "description": "The tooltip for the more button in the text selection menu, which shows the overflowing menu items." + }, + "nextMonthTooltip": "Next month", "@nextMonthTooltip": { "description": "The tooltip for the month picker's 'next month' button." diff --git a/packages/flutter_localizations/lib/src/l10n/material_es.arb b/packages/flutter_localizations/lib/src/l10n/material_es.arb index 26ff12007cb..3387c995a85 100644 --- a/packages/flutter_localizations/lib/src/l10n/material_es.arb +++ b/packages/flutter_localizations/lib/src/l10n/material_es.arb @@ -52,5 +52,6 @@ "remainingTextFieldCharacterCountZero": "TBD", "remainingTextFieldCharacterCountOne": "Queda 1 carácter.", "remainingTextFieldCharacterCountOther": "Quedan $remainingCount caracteres", - "refreshIndicatorSemanticLabel": "Actualizar" + "refreshIndicatorSemanticLabel": "Actualizar", + "moreButtonTooltip": "TBD" } diff --git a/packages/flutter_localizations/lib/src/l10n/material_et.arb b/packages/flutter_localizations/lib/src/l10n/material_et.arb index f0ee7758763..f100bd1d9f5 100644 --- a/packages/flutter_localizations/lib/src/l10n/material_et.arb +++ b/packages/flutter_localizations/lib/src/l10n/material_et.arb @@ -51,5 +51,6 @@ "remainingTextFieldCharacterCountZero": "TBD", "remainingTextFieldCharacterCountOne": "Jäänud on 1 tähemärk", "remainingTextFieldCharacterCountOther": "Jäänud on $remainingCount tähemärki", - "refreshIndicatorSemanticLabel": "Värskendamine" + "refreshIndicatorSemanticLabel": "Värskendamine", + "moreButtonTooltip": "TBD" } diff --git a/packages/flutter_localizations/lib/src/l10n/material_eu.arb b/packages/flutter_localizations/lib/src/l10n/material_eu.arb index faa0c45c288..8d92a70a24b 100644 --- a/packages/flutter_localizations/lib/src/l10n/material_eu.arb +++ b/packages/flutter_localizations/lib/src/l10n/material_eu.arb @@ -50,5 +50,6 @@ "collapsedIconTapHint": "Zabaldu", "remainingTextFieldCharacterCountOne": "1 karaktere geratzen da", "remainingTextFieldCharacterCountOther": "$remainingCount karaktere geratzen dira", - "refreshIndicatorSemanticLabel": "Freskatu" + "refreshIndicatorSemanticLabel": "Freskatu", + "moreButtonTooltip": "TBD" } diff --git a/packages/flutter_localizations/lib/src/l10n/material_fa.arb b/packages/flutter_localizations/lib/src/l10n/material_fa.arb index f5f74153a43..76ff956cde8 100644 --- a/packages/flutter_localizations/lib/src/l10n/material_fa.arb +++ b/packages/flutter_localizations/lib/src/l10n/material_fa.arb @@ -51,5 +51,6 @@ "remainingTextFieldCharacterCountZero": "TBD", "remainingTextFieldCharacterCountOne": "۱ نویسه باقی مانده است", "remainingTextFieldCharacterCountOther": "$remainingCount نویسه باقی مانده است", - "refreshIndicatorSemanticLabel": "بازخوانی" + "refreshIndicatorSemanticLabel": "بازخوانی", + "moreButtonTooltip": "TBD" } diff --git a/packages/flutter_localizations/lib/src/l10n/material_fi.arb b/packages/flutter_localizations/lib/src/l10n/material_fi.arb index ae435d79961..24040fac7fd 100644 --- a/packages/flutter_localizations/lib/src/l10n/material_fi.arb +++ b/packages/flutter_localizations/lib/src/l10n/material_fi.arb @@ -51,5 +51,6 @@ "remainingTextFieldCharacterCountZero": "TBD", "remainingTextFieldCharacterCountOne": "1 merkki jäljellä", "remainingTextFieldCharacterCountOther": "$remainingCount merkkiä jäljellä", - "refreshIndicatorSemanticLabel": "Päivitys" + "refreshIndicatorSemanticLabel": "Päivitys", + "moreButtonTooltip": "TBD" } diff --git a/packages/flutter_localizations/lib/src/l10n/material_fil.arb b/packages/flutter_localizations/lib/src/l10n/material_fil.arb index d317f317269..a1060d7b04c 100644 --- a/packages/flutter_localizations/lib/src/l10n/material_fil.arb +++ b/packages/flutter_localizations/lib/src/l10n/material_fil.arb @@ -51,5 +51,6 @@ "remainingTextFieldCharacterCountZero": "TBD", "remainingTextFieldCharacterCountOne": "1 character ang natitira", "remainingTextFieldCharacterCountOther": "$remainingCount na character ang natitira", - "refreshIndicatorSemanticLabel": "Nagre-refresh" + "refreshIndicatorSemanticLabel": "Nagre-refresh", + "moreButtonTooltip": "TBD" } diff --git a/packages/flutter_localizations/lib/src/l10n/material_fr.arb b/packages/flutter_localizations/lib/src/l10n/material_fr.arb index 239cf421f03..e6d48be827e 100644 --- a/packages/flutter_localizations/lib/src/l10n/material_fr.arb +++ b/packages/flutter_localizations/lib/src/l10n/material_fr.arb @@ -52,5 +52,6 @@ "remainingTextFieldCharacterCountZero": "TBD", "remainingTextFieldCharacterCountOne": "1 caractère restant", "remainingTextFieldCharacterCountOther": "$remainingCount caractères restants", - "refreshIndicatorSemanticLabel": "Actualiser" + "refreshIndicatorSemanticLabel": "Actualiser", + "moreButtonTooltip": "TBD" } diff --git a/packages/flutter_localizations/lib/src/l10n/material_gl.arb b/packages/flutter_localizations/lib/src/l10n/material_gl.arb index 2a5220910ea..82438c3330e 100644 --- a/packages/flutter_localizations/lib/src/l10n/material_gl.arb +++ b/packages/flutter_localizations/lib/src/l10n/material_gl.arb @@ -52,5 +52,6 @@ "remainingTextFieldCharacterCountZero": "TBD", "remainingTextFieldCharacterCountOne": "1 carácter restante", "remainingTextFieldCharacterCountOther": "$remainingCount caracteres restantes", - "refreshIndicatorSemanticLabel": "Actualizar" + "refreshIndicatorSemanticLabel": "Actualizar", + "moreButtonTooltip": "TBD" } diff --git a/packages/flutter_localizations/lib/src/l10n/material_gsw.arb b/packages/flutter_localizations/lib/src/l10n/material_gsw.arb index 306f3b6596b..58d216633c2 100644 --- a/packages/flutter_localizations/lib/src/l10n/material_gsw.arb +++ b/packages/flutter_localizations/lib/src/l10n/material_gsw.arb @@ -51,5 +51,6 @@ "remainingTextFieldCharacterCountZero": "TBD", "remainingTextFieldCharacterCountOne": "Noch 1 Zeichen", "remainingTextFieldCharacterCountOther": "Noch $remainingCount Zeichen", - "refreshIndicatorSemanticLabel": "Aktualisieren" + "refreshIndicatorSemanticLabel": "Aktualisieren", + "moreButtonTooltip": "TBD" } diff --git a/packages/flutter_localizations/lib/src/l10n/material_gu.arb b/packages/flutter_localizations/lib/src/l10n/material_gu.arb index 666f8bfb95f..3302a3e4c05 100644 --- a/packages/flutter_localizations/lib/src/l10n/material_gu.arb +++ b/packages/flutter_localizations/lib/src/l10n/material_gu.arb @@ -50,5 +50,6 @@ "collapsedIconTapHint": "વિસ્તૃત કરો", "remainingTextFieldCharacterCountOne": "1 અક્ષર બાકી", "remainingTextFieldCharacterCountOther": "$remainingCount અક્ષર બાકી", - "refreshIndicatorSemanticLabel": "રિફ્રેશ કરો" + "refreshIndicatorSemanticLabel": "રિફ્રેશ કરો", + "moreButtonTooltip": "TBD" } diff --git a/packages/flutter_localizations/lib/src/l10n/material_he.arb b/packages/flutter_localizations/lib/src/l10n/material_he.arb index 2981ee6ce6a..f5af65179d1 100644 --- a/packages/flutter_localizations/lib/src/l10n/material_he.arb +++ b/packages/flutter_localizations/lib/src/l10n/material_he.arb @@ -55,5 +55,6 @@ "remainingTextFieldCharacterCountZero": "TBD", "remainingTextFieldCharacterCountOne": "נותר תו אחד", "remainingTextFieldCharacterCountOther": "נותרו $remainingCount תווים", - "refreshIndicatorSemanticLabel": "רענון" + "refreshIndicatorSemanticLabel": "רענון", + "moreButtonTooltip": "TBD" } diff --git a/packages/flutter_localizations/lib/src/l10n/material_hi.arb b/packages/flutter_localizations/lib/src/l10n/material_hi.arb index 2c7d67ae5e9..68726527ca9 100644 --- a/packages/flutter_localizations/lib/src/l10n/material_hi.arb +++ b/packages/flutter_localizations/lib/src/l10n/material_hi.arb @@ -51,5 +51,6 @@ "remainingTextFieldCharacterCountZero": "TBD", "remainingTextFieldCharacterCountOne": "एक वर्ण अाैर डाला जा सकता है", "remainingTextFieldCharacterCountOther": "$remainingCount वर्ण अाैर डाले जा सकते हैं", - "refreshIndicatorSemanticLabel": "रीफ़्रेश करें" + "refreshIndicatorSemanticLabel": "रीफ़्रेश करें", + "moreButtonTooltip": "TBD" } diff --git a/packages/flutter_localizations/lib/src/l10n/material_hr.arb b/packages/flutter_localizations/lib/src/l10n/material_hr.arb index 5180a92dbbf..b4a4ab01063 100644 --- a/packages/flutter_localizations/lib/src/l10n/material_hr.arb +++ b/packages/flutter_localizations/lib/src/l10n/material_hr.arb @@ -53,5 +53,6 @@ "remainingTextFieldCharacterCountZero": "TBD", "remainingTextFieldCharacterCountOne": "Preostao je 1 znak", "remainingTextFieldCharacterCountOther": "Preostalo je $remainingCount znakova", - "refreshIndicatorSemanticLabel": "Osvježi" + "refreshIndicatorSemanticLabel": "Osvježi", + "moreButtonTooltip": "TBD" } diff --git a/packages/flutter_localizations/lib/src/l10n/material_hu.arb b/packages/flutter_localizations/lib/src/l10n/material_hu.arb index 301dff5c94f..896d41e443a 100644 --- a/packages/flutter_localizations/lib/src/l10n/material_hu.arb +++ b/packages/flutter_localizations/lib/src/l10n/material_hu.arb @@ -51,5 +51,6 @@ "remainingTextFieldCharacterCountZero": "TBD", "remainingTextFieldCharacterCountOne": "1 karakter maradt", "remainingTextFieldCharacterCountOther": "$remainingCount karakter maradt", - "refreshIndicatorSemanticLabel": "Frissítés" + "refreshIndicatorSemanticLabel": "Frissítés", + "moreButtonTooltip": "TBD" } diff --git a/packages/flutter_localizations/lib/src/l10n/material_hy.arb b/packages/flutter_localizations/lib/src/l10n/material_hy.arb index dd3649d8cfd..8c47a27cd60 100644 --- a/packages/flutter_localizations/lib/src/l10n/material_hy.arb +++ b/packages/flutter_localizations/lib/src/l10n/material_hy.arb @@ -56,5 +56,6 @@ "remainingTextFieldCharacterCountZero": "Նիշի հնարավորություն չկա", "remainingTextFieldCharacterCountOne": "Մնացել է 1 նիշ", "remainingTextFieldCharacterCountOther": "Մնացել է $remainingCount նիշ", - "refreshIndicatorSemanticLabel": "Թարմացնել" + "refreshIndicatorSemanticLabel": "Թարմացնել", + "moreButtonTooltip": "TBD" } diff --git a/packages/flutter_localizations/lib/src/l10n/material_id.arb b/packages/flutter_localizations/lib/src/l10n/material_id.arb index 991490570a1..70f98c887a7 100644 --- a/packages/flutter_localizations/lib/src/l10n/material_id.arb +++ b/packages/flutter_localizations/lib/src/l10n/material_id.arb @@ -51,5 +51,6 @@ "remainingTextFieldCharacterCountZero": "TBD", "remainingTextFieldCharacterCountOne": "Sisa 1 karakter", "remainingTextFieldCharacterCountOther": "Sisa $remainingCount karakter", - "refreshIndicatorSemanticLabel": "Memuat ulang" + "refreshIndicatorSemanticLabel": "Memuat ulang", + "moreButtonTooltip": "TBD" } diff --git a/packages/flutter_localizations/lib/src/l10n/material_is.arb b/packages/flutter_localizations/lib/src/l10n/material_is.arb index b25a6bfaf6e..c0ef72fa67a 100644 --- a/packages/flutter_localizations/lib/src/l10n/material_is.arb +++ b/packages/flutter_localizations/lib/src/l10n/material_is.arb @@ -50,5 +50,6 @@ "collapsedIconTapHint": "Stækka", "remainingTextFieldCharacterCountOne": "1 stafur eftir", "remainingTextFieldCharacterCountOther": "$remainingCount stafir eftir", - "refreshIndicatorSemanticLabel": "Endurnýja" + "refreshIndicatorSemanticLabel": "Endurnýja", + "moreButtonTooltip": "TBD" } diff --git a/packages/flutter_localizations/lib/src/l10n/material_it.arb b/packages/flutter_localizations/lib/src/l10n/material_it.arb index f4865421e7f..ebd53524bcb 100644 --- a/packages/flutter_localizations/lib/src/l10n/material_it.arb +++ b/packages/flutter_localizations/lib/src/l10n/material_it.arb @@ -51,5 +51,6 @@ "remainingTextFieldCharacterCountZero": "TBD", "remainingTextFieldCharacterCountOne": "1 carattere rimanente", "remainingTextFieldCharacterCountOther": "$remainingCount caratteri rimanenti", - "refreshIndicatorSemanticLabel": "Aggiorna" + "refreshIndicatorSemanticLabel": "Aggiorna", + "moreButtonTooltip": "TBD" } diff --git a/packages/flutter_localizations/lib/src/l10n/material_ja.arb b/packages/flutter_localizations/lib/src/l10n/material_ja.arb index 915561f4b80..8852f154e30 100644 --- a/packages/flutter_localizations/lib/src/l10n/material_ja.arb +++ b/packages/flutter_localizations/lib/src/l10n/material_ja.arb @@ -51,5 +51,6 @@ "remainingTextFieldCharacterCountZero": "TBD", "remainingTextFieldCharacterCountOne": "残り 1 文字(半角相当)", "remainingTextFieldCharacterCountOther": "残り $remainingCount 文字(半角相当)", - "refreshIndicatorSemanticLabel": "更新" + "refreshIndicatorSemanticLabel": "更新", + "moreButtonTooltip": "TBD" } diff --git a/packages/flutter_localizations/lib/src/l10n/material_ka.arb b/packages/flutter_localizations/lib/src/l10n/material_ka.arb index 70673a06df6..cb3207cbf44 100644 --- a/packages/flutter_localizations/lib/src/l10n/material_ka.arb +++ b/packages/flutter_localizations/lib/src/l10n/material_ka.arb @@ -50,5 +50,6 @@ "collapsedIconTapHint": "გაშლა", "remainingTextFieldCharacterCountOne": "დარჩა 1 სიმბოლო", "remainingTextFieldCharacterCountOther": "დარჩა $remainingCount სიმბოლო", - "refreshIndicatorSemanticLabel": "განახლება" + "refreshIndicatorSemanticLabel": "განახლება", + "moreButtonTooltip": "TBD" } diff --git a/packages/flutter_localizations/lib/src/l10n/material_kk.arb b/packages/flutter_localizations/lib/src/l10n/material_kk.arb index 82ce1895827..25f10c87db8 100644 --- a/packages/flutter_localizations/lib/src/l10n/material_kk.arb +++ b/packages/flutter_localizations/lib/src/l10n/material_kk.arb @@ -52,5 +52,6 @@ "collapsedIconTapHint": "Жаю", "remainingTextFieldCharacterCountZero": "Таңбалар қалмады", "remainingTextFieldCharacterCountOther": "$remainingCount таңба қалды.", - "refreshIndicatorSemanticLabel": "Жаңарту" + "refreshIndicatorSemanticLabel": "Жаңарту", + "moreButtonTooltip": "TBD" } diff --git a/packages/flutter_localizations/lib/src/l10n/material_km.arb b/packages/flutter_localizations/lib/src/l10n/material_km.arb index a6a2cb6b10a..5e080abc382 100644 --- a/packages/flutter_localizations/lib/src/l10n/material_km.arb +++ b/packages/flutter_localizations/lib/src/l10n/material_km.arb @@ -51,5 +51,6 @@ "remainingTextFieldCharacterCountZero": "TBD", "remainingTextFieldCharacterCountOne": "នៅសល់​ 1 តួ​ទៀត", "remainingTextFieldCharacterCountOther": "នៅសល់ $remainingCount តួ​ទៀត", - "refreshIndicatorSemanticLabel": "ផ្ទុកឡើងវិញ" + "refreshIndicatorSemanticLabel": "ផ្ទុកឡើងវិញ", + "moreButtonTooltip": "TBD" } diff --git a/packages/flutter_localizations/lib/src/l10n/material_kn.arb b/packages/flutter_localizations/lib/src/l10n/material_kn.arb index 6241f0dc91f..598202b5f90 100644 --- a/packages/flutter_localizations/lib/src/l10n/material_kn.arb +++ b/packages/flutter_localizations/lib/src/l10n/material_kn.arb @@ -1,54 +1,55 @@ { - "scriptCategory": "\u0074\u0061\u006c\u006c", - "timeOfDayFormat": "\u0048\u003a\u006d\u006d", - "openAppDrawerTooltip": "\u0ca8\u0ccd\u0caf\u0cbe\u0cb5\u0cbf\u0c97\u0cc7\u0cb6\u0ca8\u0ccd\u200c\u0020\u0cae\u0cc6\u0ca8\u0cc1\u0020\u0ca4\u0cc6\u0cb0\u0cc6\u0caf\u0cbf\u0cb0\u0cbf", - "backButtonTooltip": "\u0cb9\u0cbf\u0c82\u0ca4\u0cbf\u0cb0\u0cc1\u0c97\u0cbf", - "closeButtonTooltip": "\u0cae\u0cc1\u0c9a\u0ccd\u0c9a\u0cbf\u0cb0\u0cbf", - "deleteButtonTooltip": "\u0c85\u0cb3\u0cbf\u0cb8\u0cbf", - "nextMonthTooltip": "\u0cae\u0cc1\u0c82\u0ca6\u0cbf\u0ca8\u0020\u0ca4\u0cbf\u0c82\u0c97\u0cb3\u0cc1", - "previousMonthTooltip": "\u0cb9\u0cbf\u0c82\u0ca6\u0cbf\u0ca8\u0020\u0ca4\u0cbf\u0c82\u0c97\u0cb3\u0cc1", - "nextPageTooltip": "\u0cae\u0cc1\u0c82\u0ca6\u0cbf\u0ca8\u0020\u0caa\u0cc1\u0c9f", - "previousPageTooltip": "\u0cb9\u0cbf\u0c82\u0ca6\u0cbf\u0ca8\u0020\u0caa\u0cc1\u0c9f", - "showMenuTooltip": "\u0cae\u0cc6\u0ca8\u0cc1\u0020\u0ca4\u0ccb\u0cb0\u0cbf\u0cb8\u0cbf", - "aboutListTileTitle": "\u0024\u0061\u0070\u0070\u006c\u0069\u0063\u0061\u0074\u0069\u006f\u006e\u004e\u0061\u006d\u0065\u0020\u0cac\u0c97\u0ccd\u0c97\u0cc6", - "licensesPageTitle": "\u0caa\u0cb0\u0cb5\u0cbe\u0ca8\u0c97\u0cbf\u0c97\u0cb3\u0cc1", - "pageRowsInfoTitle": "\u0024\u0072\u006f\u0077\u0043\u006f\u0075\u006e\u0074\u0020\u0cb0\u0cb2\u0ccd\u0cb2\u0cbf\u0020\u0024\u0066\u0069\u0072\u0073\u0074\u0052\u006f\u0077\u2013\u0024\u006c\u0061\u0073\u0074\u0052\u006f\u0077", - "pageRowsInfoTitleApproximate": "\u0024\u0072\u006f\u0077\u0043\u006f\u0075\u006e\u0074\u0020\u0cb0\u0cb2\u0ccd\u0cb2\u0cbf\u0020\u0024\u0066\u0069\u0072\u0073\u0074\u0052\u006f\u0077\u2013\u0024\u006c\u0061\u0073\u0074\u0052\u006f\u0077", - "rowsPerPageTitle": "\u0caa\u0ccd\u0cb0\u0ca4\u0cbf\u0020\u0caa\u0cc1\u0c9f\u0c95\u0ccd\u0c95\u0cc6\u0020\u0cb8\u0cbe\u0cb2\u0cc1\u0c97\u0cb3\u0cc1\u003a", - "tabLabel": "\u0024\u0074\u0061\u0062\u0043\u006f\u0075\u006e\u0074\u0020\u0cb0\u0cb2\u0ccd\u0cb2\u0cbf\u0ca8\u0020\u0024\u0074\u0061\u0062\u0049\u006e\u0064\u0065\u0078\u0020\u0c9f\u0ccd\u0caf\u0cbe\u0cac\u0ccd", - "selectedRowCountTitleOne": "\u0031\u0020\u0c90\u0c9f\u0c82\u0020\u0c86\u0caf\u0ccd\u0c95\u0cc6\u0020\u0cae\u0cbe\u0ca1\u0cb2\u0cbe\u0c97\u0cbf\u0ca6\u0cc6", - "selectedRowCountTitleOther": "\u0024\u0073\u0065\u006c\u0065\u0063\u0074\u0065\u0064\u0052\u006f\u0077\u0043\u006f\u0075\u006e\u0074\u0020\u0c90\u0c9f\u0c82\u0c97\u0cb3\u0ca8\u0ccd\u0ca8\u0cc1\u0020\u0c86\u0caf\u0ccd\u0c95\u0cc6\u0020\u0cae\u0cbe\u0ca1\u0cb2\u0cbe\u0c97\u0cbf\u0ca6\u0cc6", - "cancelButtonLabel": "\u0cb0\u0ca6\u0ccd\u0ca6\u0cc1\u0cae\u0cbe\u0ca1\u0cbf", - "closeButtonLabel": "\u0cae\u0cc1\u0c9a\u0ccd\u0c9a\u0cbf\u0cb0\u0cbf", - "continueButtonLabel": "\u0cae\u0cc1\u0c82\u0ca6\u0cc1\u0cb5\u0cb0\u0cbf\u0cb8\u0cbf", - "copyButtonLabel": "\u0ca8\u0c95\u0cb2\u0cbf\u0cb8\u0cbf", - "cutButtonLabel": "\u0c95\u0ca4\u0ccd\u0ca4\u0cb0\u0cbf\u0cb8\u0cbf", - "okButtonLabel": "\u0cb8\u0cb0\u0cbf", - "pasteButtonLabel": "\u0c85\u0c82\u0c9f\u0cbf\u0cb8\u0cbf", - "selectAllButtonLabel": "\u0c8e\u0cb2\u0ccd\u0cb2\u0cb5\u0ca8\u0ccd\u0ca8\u0cc2\u0020\u0c86\u0caf\u0ccd\u0c95\u0cc6\u0cae\u0cbe\u0ca1\u0cbf", - "viewLicensesButtonLabel": "\u0caa\u0cb0\u0cb5\u0cbe\u0ca8\u0c97\u0cbf\u0c97\u0cb3\u0ca8\u0ccd\u0ca8\u0cc1\u0020\u0cb5\u0cbf\u0cd5\u0c95\u0ccd\u0cb7\u0cbf\u0cb8\u0cbf", - "anteMeridiemAbbreviation": "\u0cac\u0cc6\u0cb3\u0cbf\u0c97\u0ccd\u0c97\u0cc6", - "postMeridiemAbbreviation": "\u0cb8\u0c82\u0c9c\u0cc6", - "timePickerHourModeAnnouncement": "\u0c97\u0c82\u0c9f\u0cc6\u0c97\u0cb3\u0ca8\u0ccd\u0ca8\u0cc1\u0020\u0c86\u0caf\u0ccd\u0c95\u0cc6\u0cae\u0cbe\u0ca1\u0cbf", - "timePickerMinuteModeAnnouncement": "\u0ca8\u0cbf\u0cae\u0cbf\u0cb7\u0c97\u0cb3\u0ca8\u0ccd\u0ca8\u0cc1\u0020\u0c86\u0caf\u0ccd\u0c95\u0cc6\u0cae\u0cbe\u0ca1\u0cbf", - "modalBarrierDismissLabel": "\u0cb5\u0c9c\u0cbe\u0c97\u0cca\u0cb3\u0cbf\u0cb8\u0cbf", - "signedInLabel": "\u0cb8\u0cc8\u0ca8\u0ccd\u0020\u0c87\u0ca8\u0ccd\u0020\u0cae\u0cbe\u0ca1\u0cb2\u0cbe\u0c97\u0cbf\u0ca6\u0cc6", - "hideAccountsLabel": "\u0c96\u0cbe\u0ca4\u0cc6\u0c97\u0cb3\u0ca8\u0ccd\u0ca8\u0cc1\u0020\u0cae\u0cb0\u0cc6\u0cae\u0cbe\u0ca1\u0cbf", - "showAccountsLabel": "\u0c96\u0cbe\u0ca4\u0cc6\u0c97\u0cb3\u0ca8\u0ccd\u0ca8\u0cc1\u0020\u0ca4\u0ccb\u0cb0\u0cbf\u0cb8\u0cbf", - "drawerLabel": "\u0ca8\u0ccd\u0caf\u0cbe\u0cb5\u0cbf\u0c97\u0cc7\u0cb6\u0ca8\u0ccd\u200c\u0020\u0cae\u0cc6\u0ca8\u0cc1", - "popupMenuLabel": "\u0caa\u0cbe\u0caa\u0ccd\u0c85\u0caa\u0ccd\u0020\u0cae\u0cc6\u0ca8\u0cc1", - "dialogLabel": "\u0ca1\u0cc8\u0cb2\u0cbe\u0c97\u0ccd", - "alertDialogLabel": "\u0c8e\u0c9a\u0ccd\u0c9a\u0cb0\u0cbf\u0c95\u0cc6", - "searchFieldLabel": "\u0cb9\u0cc1\u0ca1\u0cc1\u0c95\u0cbf", - "reorderItemToStart": "\u0caa\u0ccd\u0cb0\u0cbe\u0cb0\u0c82\u0cad\u0c95\u0ccd\u0c95\u0cc6\u0020\u0cb8\u0cb0\u0cbf\u0cb8\u0cbf", - "reorderItemToEnd": "\u0c95\u0cca\u0ca8\u0cc6\u0c97\u0cc6\u0020\u0cb8\u0cb0\u0cbf\u0cb8\u0cbf", - "reorderItemUp": "\u0cae\u0cc7\u0cb2\u0cc6\u0020\u0cb8\u0cb0\u0cbf\u0cb8\u0cbf", - "reorderItemDown": "\u0c95\u0cc6\u0cb3\u0c97\u0cc6\u0020\u0cb8\u0cb0\u0cbf\u0cb8\u0cbf", - "reorderItemLeft": "\u0c8e\u0ca1\u0c95\u0ccd\u0c95\u0cc6\u0020\u0cb8\u0cb0\u0cbf\u0cb8\u0cbf", - "reorderItemRight": "\u0cac\u0cb2\u0c95\u0ccd\u0c95\u0cc6\u0020\u0cb8\u0cb0\u0cbf\u0cb8\u0cbf", - "expandedIconTapHint": "\u0c95\u0cc1\u0c97\u0ccd\u0c97\u0cbf\u0cb8\u0cbf", - "collapsedIconTapHint": "\u0cb5\u0cbf\u0cb8\u0ccd\u0ca4\u0cb0\u0cbf\u0cb8\u0cbf", - "remainingTextFieldCharacterCountOne": "\u0031\u0020\u0c85\u0c95\u0ccd\u0cb7\u0cb0\u0020\u0c89\u0cb3\u0cbf\u0ca6\u0cbf\u0ca6\u0cc6", - "remainingTextFieldCharacterCountOther": "\u0024\u0072\u0065\u006d\u0061\u0069\u006e\u0069\u006e\u0067\u0043\u006f\u0075\u006e\u0074\u0020\u0c85\u0c95\u0ccd\u0cb7\u0cb0\u0c97\u0cb3\u0cc1\u0020\u0c89\u0cb3\u0cbf\u0ca6\u0cbf\u0cb5\u0cc6", - "refreshIndicatorSemanticLabel": "\u0cb0\u0cbf\u0cab\u0ccd\u0cb0\u0cc6\u0cb6\u0ccd\u0020\u0cae\u0cbe\u0ca1\u0cbf" + "scriptCategory": "tall", + "timeOfDayFormat": "H:mm", + "openAppDrawerTooltip": "ನ್ಯಾವಿಗೇಶನ್‌ ಮೆನು ತೆರೆಯಿರಿ", + "backButtonTooltip": "ಹಿಂತಿರುಗಿ", + "closeButtonTooltip": "ಮುಚ್ಚಿರಿ", + "deleteButtonTooltip": "ಅಳಿಸಿ", + "nextMonthTooltip": "ಮುಂದಿನ ತಿಂಗಳು", + "previousMonthTooltip": "ಹಿಂದಿನ ತಿಂಗಳು", + "nextPageTooltip": "ಮುಂದಿನ ಪುಟ", + "previousPageTooltip": "ಹಿಂದಿನ ಪುಟ", + "showMenuTooltip": "ಮೆನು ತೋರಿಸಿ", + "aboutListTileTitle": "$applicationName ಬಗ್ಗೆ", + "licensesPageTitle": "ಪರವಾನಗಿಗಳು", + "pageRowsInfoTitle": "$rowCount ರಲ್ಲಿ $firstRow–$lastRow", + "pageRowsInfoTitleApproximate": "$rowCount ರಲ್ಲಿ $firstRow–$lastRow", + "rowsPerPageTitle": "ಪ್ರತಿ ಪುಟಕ್ಕೆ ಸಾಲುಗಳು:", + "tabLabel": "$tabCount ರಲ್ಲಿನ $tabIndex ಟ್ಯಾಬ್", + "selectedRowCountTitleOne": "1 ಐಟಂ ಆಯ್ಕೆ ಮಾಡಲಾಗಿದೆ", + "selectedRowCountTitleOther": "$selectedRowCount ಐಟಂಗಳನ್ನು ಆಯ್ಕೆ ಮಾಡಲಾಗಿದೆ", + "cancelButtonLabel": "ರದ್ದುಮಾಡಿ", + "closeButtonLabel": "ಮುಚ್ಚಿರಿ", + "continueButtonLabel": "ಮುಂದುವರಿಸಿ", + "copyButtonLabel": "ನಕಲಿಸಿ", + "cutButtonLabel": "ಕತ್ತರಿಸಿ", + "okButtonLabel": "ಸರಿ", + "pasteButtonLabel": "ಅಂಟಿಸಿ", + "selectAllButtonLabel": "ಎಲ್ಲವನ್ನೂ ಆಯ್ಕೆಮಾಡಿ", + "viewLicensesButtonLabel": "ಪರವಾನಗಿಗಳನ್ನು ವೀಕ್ಷಿಸಿ", + "anteMeridiemAbbreviation": "ಬೆಳಿಗ್ಗೆ", + "postMeridiemAbbreviation": "ಸಂಜೆ", + "timePickerHourModeAnnouncement": "ಗಂಟೆಗಳನ್ನು ಆಯ್ಕೆಮಾಡಿ", + "timePickerMinuteModeAnnouncement": "ನಿಮಿಷಗಳನ್ನು ಆಯ್ಕೆಮಾಡಿ", + "modalBarrierDismissLabel": "ವಜಾಗೊಳಿಸಿ", + "signedInLabel": "ಸೈನ್ ಇನ್ ಮಾಡಲಾಗಿದೆ", + "hideAccountsLabel": "ಖಾತೆಗಳನ್ನು ಮರೆಮಾಡಿ", + "showAccountsLabel": "ಖಾತೆಗಳನ್ನು ತೋರಿಸಿ", + "drawerLabel": "ನ್ಯಾವಿಗೇಶನ್‌ ಮೆನು", + "popupMenuLabel": "ಪಾಪ್ಅಪ್ ಮೆನು", + "dialogLabel": "ಡೈಲಾಗ್", + "alertDialogLabel": "ಎಚ್ಚರಿಕೆ", + "searchFieldLabel": "ಹುಡುಕಿ", + "reorderItemToStart": "ಪ್ರಾರಂಭಕ್ಕೆ ಸರಿಸಿ", + "reorderItemToEnd": "ಕೊನೆಗೆ ಸರಿಸಿ", + "reorderItemUp": "ಮೇಲೆ ಸರಿಸಿ", + "reorderItemDown": "ಕೆಳಗೆ ಸರಿಸಿ", + "reorderItemLeft": "ಎಡಕ್ಕೆ ಸರಿಸಿ", + "reorderItemRight": "ಬಲಕ್ಕೆ ಸರಿಸಿ", + "expandedIconTapHint": "ಕುಗ್ಗಿಸಿ", + "collapsedIconTapHint": "ವಿಸ್ತರಿಸಿ", + "remainingTextFieldCharacterCountOne": "1 ಅಕ್ಷರ ಉಳಿದಿದೆ", + "remainingTextFieldCharacterCountOther": "$remainingCount ಅಕ್ಷರಗಳು ಉಳಿದಿವೆ", + "refreshIndicatorSemanticLabel": "ರಿಫ್ರೆಶ್ ಮಾಡಿ", + "moreButtonTooltip": "TBD" } diff --git a/packages/flutter_localizations/lib/src/l10n/material_ko.arb b/packages/flutter_localizations/lib/src/l10n/material_ko.arb index b424457eb0b..1cc0c5cacdf 100644 --- a/packages/flutter_localizations/lib/src/l10n/material_ko.arb +++ b/packages/flutter_localizations/lib/src/l10n/material_ko.arb @@ -51,5 +51,6 @@ "remainingTextFieldCharacterCountZero": "TBD", "remainingTextFieldCharacterCountOne": "1자 남음", "remainingTextFieldCharacterCountOther": "$remainingCount자 남음", - "refreshIndicatorSemanticLabel": "새로고침" + "refreshIndicatorSemanticLabel": "새로고침", + "moreButtonTooltip": "TBD" } diff --git a/packages/flutter_localizations/lib/src/l10n/material_ky.arb b/packages/flutter_localizations/lib/src/l10n/material_ky.arb index 97aee02926e..55fa590b2c2 100644 --- a/packages/flutter_localizations/lib/src/l10n/material_ky.arb +++ b/packages/flutter_localizations/lib/src/l10n/material_ky.arb @@ -50,5 +50,6 @@ "collapsedIconTapHint": "Жайып көрсөтүү", "remainingTextFieldCharacterCountOne": "1 белги калды", "remainingTextFieldCharacterCountOther": "$remainingCount белги калды", - "refreshIndicatorSemanticLabel": "Жаңыртуу" + "refreshIndicatorSemanticLabel": "Жаңыртуу", + "moreButtonTooltip": "TBD" } diff --git a/packages/flutter_localizations/lib/src/l10n/material_lo.arb b/packages/flutter_localizations/lib/src/l10n/material_lo.arb index 1c06c45f0e2..ad27d49638d 100644 --- a/packages/flutter_localizations/lib/src/l10n/material_lo.arb +++ b/packages/flutter_localizations/lib/src/l10n/material_lo.arb @@ -50,5 +50,6 @@ "collapsedIconTapHint": "ຂະຫຍາຍ", "remainingTextFieldCharacterCountOne": "ຍັງອີກ 1 ຕົວອັກສອນ", "remainingTextFieldCharacterCountOther": "ຍັງອີກ $remainingCount ຕົວອັກສອນ", - "refreshIndicatorSemanticLabel": "ໂຫຼດຄືນໃໝ່" + "refreshIndicatorSemanticLabel": "ໂຫຼດຄືນໃໝ່", + "moreButtonTooltip": "TBD" } diff --git a/packages/flutter_localizations/lib/src/l10n/material_lt.arb b/packages/flutter_localizations/lib/src/l10n/material_lt.arb index b1b946c83d7..22ef37e9d9f 100644 --- a/packages/flutter_localizations/lib/src/l10n/material_lt.arb +++ b/packages/flutter_localizations/lib/src/l10n/material_lt.arb @@ -55,5 +55,6 @@ "remainingTextFieldCharacterCountZero": "TBD", "remainingTextFieldCharacterCountOne": "Liko 1 simbolis", "remainingTextFieldCharacterCountOther": "Liko $remainingCount simbolių", - "refreshIndicatorSemanticLabel": "Atnaujinti" + "refreshIndicatorSemanticLabel": "Atnaujinti", + "moreButtonTooltip": "TBD" } diff --git a/packages/flutter_localizations/lib/src/l10n/material_lv.arb b/packages/flutter_localizations/lib/src/l10n/material_lv.arb index 0973c060552..3bfb25e1bf9 100644 --- a/packages/flutter_localizations/lib/src/l10n/material_lv.arb +++ b/packages/flutter_localizations/lib/src/l10n/material_lv.arb @@ -52,5 +52,6 @@ "remainingTextFieldCharacterCountZero": "Nav atlikusi neviena rakstzīme.", "remainingTextFieldCharacterCountOne": "Atlikusi 1 rakstzīme.", "remainingTextFieldCharacterCountOther": "Atlikušas $remainingCount rakstzīmes.", - "refreshIndicatorSemanticLabel": "Atsvaidzināt" + "refreshIndicatorSemanticLabel": "Atsvaidzināt", + "moreButtonTooltip": "TBD" } diff --git a/packages/flutter_localizations/lib/src/l10n/material_mk.arb b/packages/flutter_localizations/lib/src/l10n/material_mk.arb index c427e1d25e3..add1768a327 100644 --- a/packages/flutter_localizations/lib/src/l10n/material_mk.arb +++ b/packages/flutter_localizations/lib/src/l10n/material_mk.arb @@ -50,5 +50,6 @@ "collapsedIconTapHint": "Прошири", "remainingTextFieldCharacterCountOne": "Преостанува уште 1 знак", "remainingTextFieldCharacterCountOther": "Преостануваат уште $remainingCount знаци", - "refreshIndicatorSemanticLabel": "Освежи" + "refreshIndicatorSemanticLabel": "Освежи", + "moreButtonTooltip": "TBD" } diff --git a/packages/flutter_localizations/lib/src/l10n/material_ml.arb b/packages/flutter_localizations/lib/src/l10n/material_ml.arb index c70f6825821..54882ccb36a 100644 --- a/packages/flutter_localizations/lib/src/l10n/material_ml.arb +++ b/packages/flutter_localizations/lib/src/l10n/material_ml.arb @@ -50,5 +50,6 @@ "collapsedIconTapHint": "വികസിപ്പിക്കുക", "remainingTextFieldCharacterCountOne": "ഒരു പ്രതീകം ശേഷിക്കുന്നു", "remainingTextFieldCharacterCountOther": "$remainingCount പ്രതീകങ്ങൾ ശേഷിക്കുന്നു", - "refreshIndicatorSemanticLabel": "പുതുക്കിയെടുക്കുക" + "refreshIndicatorSemanticLabel": "പുതുക്കിയെടുക്കുക", + "moreButtonTooltip": "TBD" } diff --git a/packages/flutter_localizations/lib/src/l10n/material_mn.arb b/packages/flutter_localizations/lib/src/l10n/material_mn.arb index 1c8c4b99ee6..cb62f11602e 100644 --- a/packages/flutter_localizations/lib/src/l10n/material_mn.arb +++ b/packages/flutter_localizations/lib/src/l10n/material_mn.arb @@ -52,5 +52,6 @@ "remainingTextFieldCharacterCountZero": "No characters remaining", "remainingTextFieldCharacterCountOne": "1 тэмдэгт үлдсэн", "remainingTextFieldCharacterCountOther": "$remainingCount тэмдэгт үлдсэн", - "refreshIndicatorSemanticLabel": "Сэргээх" + "refreshIndicatorSemanticLabel": "Сэргээх", + "moreButtonTooltip": "TBD" } diff --git a/packages/flutter_localizations/lib/src/l10n/material_mr.arb b/packages/flutter_localizations/lib/src/l10n/material_mr.arb index c55faa0cdf9..5cd4c1f7fdc 100644 --- a/packages/flutter_localizations/lib/src/l10n/material_mr.arb +++ b/packages/flutter_localizations/lib/src/l10n/material_mr.arb @@ -52,5 +52,6 @@ "remainingTextFieldCharacterCountZero": "कोणतेही वर्ण शिल्लक नाहीत", "remainingTextFieldCharacterCountOne": "एक वर्ण शिल्लक", "remainingTextFieldCharacterCountOther": "$remainingCount वर्ण शिल्लक", - "refreshIndicatorSemanticLabel": "रिफ्रेश करा" + "refreshIndicatorSemanticLabel": "रिफ्रेश करा", + "moreButtonTooltip": "TBD" } diff --git a/packages/flutter_localizations/lib/src/l10n/material_ms.arb b/packages/flutter_localizations/lib/src/l10n/material_ms.arb index d8e8bf9f73f..3ed751c4250 100644 --- a/packages/flutter_localizations/lib/src/l10n/material_ms.arb +++ b/packages/flutter_localizations/lib/src/l10n/material_ms.arb @@ -52,5 +52,6 @@ "remainingTextFieldCharacterCountZero": "TBD", "remainingTextFieldCharacterCountOne": "1 aksara lagi", "remainingTextFieldCharacterCountOther": "$remainingCount aksara lagi", - "refreshIndicatorSemanticLabel": "Muat semula" + "refreshIndicatorSemanticLabel": "Muat semula", + "moreButtonTooltip": "TBD" } diff --git a/packages/flutter_localizations/lib/src/l10n/material_my.arb b/packages/flutter_localizations/lib/src/l10n/material_my.arb index b61db5f66fb..ad8287fbdeb 100644 --- a/packages/flutter_localizations/lib/src/l10n/material_my.arb +++ b/packages/flutter_localizations/lib/src/l10n/material_my.arb @@ -50,5 +50,6 @@ "collapsedIconTapHint": "ချဲ့ရန်", "remainingTextFieldCharacterCountOne": "အက္ခရာ ၁ လုံးကျန်သည်", "remainingTextFieldCharacterCountOther": "အက္ခရာ $remainingCount လုံးကျန်သည်", - "refreshIndicatorSemanticLabel": "ပြန်လည်စတင်ရန်" + "refreshIndicatorSemanticLabel": "ပြန်လည်စတင်ရန်", + "moreButtonTooltip": "TBD" } diff --git a/packages/flutter_localizations/lib/src/l10n/material_nb.arb b/packages/flutter_localizations/lib/src/l10n/material_nb.arb index 900f860539c..3a251cfe69a 100644 --- a/packages/flutter_localizations/lib/src/l10n/material_nb.arb +++ b/packages/flutter_localizations/lib/src/l10n/material_nb.arb @@ -51,5 +51,6 @@ "remainingTextFieldCharacterCountZero": "TBD", "remainingTextFieldCharacterCountOne": "1 tegn gjenstår", "remainingTextFieldCharacterCountOther": "$remainingCount tegn gjenstår", - "refreshIndicatorSemanticLabel": "Laster inn på nytt" + "refreshIndicatorSemanticLabel": "Laster inn på nytt", + "moreButtonTooltip": "TBD" } diff --git a/packages/flutter_localizations/lib/src/l10n/material_ne.arb b/packages/flutter_localizations/lib/src/l10n/material_ne.arb index c9f70b8e7dc..fc15da9e4c9 100644 --- a/packages/flutter_localizations/lib/src/l10n/material_ne.arb +++ b/packages/flutter_localizations/lib/src/l10n/material_ne.arb @@ -50,5 +50,6 @@ "collapsedIconTapHint": "विस्तार गर्नुहोस्", "remainingTextFieldCharacterCountOne": "१ वर्ण बाँकी", "remainingTextFieldCharacterCountOther": "$remainingCount वर्णहरू बाँकी", - "refreshIndicatorSemanticLabel": "पुनः ताजा गर्नुहोस्" + "refreshIndicatorSemanticLabel": "पुनः ताजा गर्नुहोस्", + "moreButtonTooltip": "TBD" } diff --git a/packages/flutter_localizations/lib/src/l10n/material_nl.arb b/packages/flutter_localizations/lib/src/l10n/material_nl.arb index 5492659dc61..6f945048964 100644 --- a/packages/flutter_localizations/lib/src/l10n/material_nl.arb +++ b/packages/flutter_localizations/lib/src/l10n/material_nl.arb @@ -51,5 +51,6 @@ "remainingTextFieldCharacterCountZero": "TBD", "remainingTextFieldCharacterCountOne": "1 teken resterend", "remainingTextFieldCharacterCountOther": "$remainingCount tekens resterend", - "refreshIndicatorSemanticLabel": "Vernieuwen" + "refreshIndicatorSemanticLabel": "Vernieuwen", + "moreButtonTooltip": "TBD" } diff --git a/packages/flutter_localizations/lib/src/l10n/material_or.arb b/packages/flutter_localizations/lib/src/l10n/material_or.arb index 91c2b345cfd..6b65d4c56e0 100644 --- a/packages/flutter_localizations/lib/src/l10n/material_or.arb +++ b/packages/flutter_localizations/lib/src/l10n/material_or.arb @@ -50,5 +50,6 @@ "collapsedIconTapHint": "ପ୍ରସାରିତ କରନ୍ତୁ", "remainingTextFieldCharacterCountOne": "1ଟି ଅକ୍ଷର ବାକି ଅଛି", "remainingTextFieldCharacterCountOther": "$remainingCountଟି ଅକ୍ଷର ବାକି ଅଛି", - "refreshIndicatorSemanticLabel": "ରିଫ୍ରେସ୍ କରନ୍ତୁ" + "refreshIndicatorSemanticLabel": "ରିଫ୍ରେସ୍ କରନ୍ତୁ", + "moreButtonTooltip": "TBD" } diff --git a/packages/flutter_localizations/lib/src/l10n/material_pa.arb b/packages/flutter_localizations/lib/src/l10n/material_pa.arb index a67082d6b21..e57acc91903 100644 --- a/packages/flutter_localizations/lib/src/l10n/material_pa.arb +++ b/packages/flutter_localizations/lib/src/l10n/material_pa.arb @@ -50,5 +50,6 @@ "collapsedIconTapHint": "ਵਿਸਤਾਰ ਕਰੋ", "remainingTextFieldCharacterCountOne": "1 ਅੱਖਰ-ਚਿੰਨ੍ਹ ਬਾਕੀ", "remainingTextFieldCharacterCountOther": "$remainingCount ਅੱਖਰ-ਚਿੰਨ੍ਹ ਬਾਕੀ", - "refreshIndicatorSemanticLabel": "ਰਿਫ੍ਰੈਸ਼ ਕਰੋ" + "refreshIndicatorSemanticLabel": "ਰਿਫ੍ਰੈਸ਼ ਕਰੋ", + "moreButtonTooltip": "TBD" } diff --git a/packages/flutter_localizations/lib/src/l10n/material_pl.arb b/packages/flutter_localizations/lib/src/l10n/material_pl.arb index be3613fd4ec..1ed89c336ad 100644 --- a/packages/flutter_localizations/lib/src/l10n/material_pl.arb +++ b/packages/flutter_localizations/lib/src/l10n/material_pl.arb @@ -55,5 +55,6 @@ "remainingTextFieldCharacterCountZero": "TBD", "remainingTextFieldCharacterCountOne": "Jeszcze 1 znak", "remainingTextFieldCharacterCountOther": "Pozostało $remainingCount znaków", - "refreshIndicatorSemanticLabel": "Odśwież" + "refreshIndicatorSemanticLabel": "Odśwież", + "moreButtonTooltip": "TBD" } diff --git a/packages/flutter_localizations/lib/src/l10n/material_ps.arb b/packages/flutter_localizations/lib/src/l10n/material_ps.arb index 2c318cd6e6a..6f456e991e2 100644 --- a/packages/flutter_localizations/lib/src/l10n/material_ps.arb +++ b/packages/flutter_localizations/lib/src/l10n/material_ps.arb @@ -50,5 +50,6 @@ "remainingTextFieldCharacterCountZero": "TBD", "remainingTextFieldCharacterCountOne": "TBD", "remainingTextFieldCharacterCountOther": "TBD", - "refreshIndicatorSemanticLabel": "TBD" + "refreshIndicatorSemanticLabel": "TBD", + "moreButtonTooltip": "TBD" } diff --git a/packages/flutter_localizations/lib/src/l10n/material_pt.arb b/packages/flutter_localizations/lib/src/l10n/material_pt.arb index a1d74b60924..6c36828cdb8 100644 --- a/packages/flutter_localizations/lib/src/l10n/material_pt.arb +++ b/packages/flutter_localizations/lib/src/l10n/material_pt.arb @@ -53,5 +53,6 @@ "remainingTextFieldCharacterCountZero": "TBD", "remainingTextFieldCharacterCountOne": "1 caractere restante", "remainingTextFieldCharacterCountOther": "$remainingCount caracteres restantes", - "refreshIndicatorSemanticLabel": "Atualizar" + "refreshIndicatorSemanticLabel": "Atualizar", + "moreButtonTooltip": "TBD" } diff --git a/packages/flutter_localizations/lib/src/l10n/material_ro.arb b/packages/flutter_localizations/lib/src/l10n/material_ro.arb index 5e29e55bd83..3c92171fb5c 100644 --- a/packages/flutter_localizations/lib/src/l10n/material_ro.arb +++ b/packages/flutter_localizations/lib/src/l10n/material_ro.arb @@ -54,5 +54,6 @@ "remainingTextFieldCharacterCountZero": "TBD", "remainingTextFieldCharacterCountOne": "un caracter rămas", "remainingTextFieldCharacterCountOther": "$remainingCount de caractere rămase", - "refreshIndicatorSemanticLabel": "Actualizați" + "refreshIndicatorSemanticLabel": "Actualizați", + "moreButtonTooltip": "TBD" } diff --git a/packages/flutter_localizations/lib/src/l10n/material_ru.arb b/packages/flutter_localizations/lib/src/l10n/material_ru.arb index 15a8cf6c87a..6db7e2779ac 100644 --- a/packages/flutter_localizations/lib/src/l10n/material_ru.arb +++ b/packages/flutter_localizations/lib/src/l10n/material_ru.arb @@ -56,5 +56,6 @@ "remainingTextFieldCharacterCountZero": "TBD", "remainingTextFieldCharacterCountOne": "Остался 1 символ", "remainingTextFieldCharacterCountOther": "Осталось $remainingCount символа", - "refreshIndicatorSemanticLabel": "Обновление" + "refreshIndicatorSemanticLabel": "Обновление", + "moreButtonTooltip": "TBD" } diff --git a/packages/flutter_localizations/lib/src/l10n/material_si.arb b/packages/flutter_localizations/lib/src/l10n/material_si.arb index f294e7098fa..5bd5488a1ca 100644 --- a/packages/flutter_localizations/lib/src/l10n/material_si.arb +++ b/packages/flutter_localizations/lib/src/l10n/material_si.arb @@ -50,5 +50,6 @@ "collapsedIconTapHint": "දිග හරින්න", "remainingTextFieldCharacterCountOne": "අනුලකුණු 1ක් ඉතිරිය", "remainingTextFieldCharacterCountOther": "අනුලකුණු $remainingCountක් ඉතිරිය", - "refreshIndicatorSemanticLabel": "නැවුම් කරන්න" + "refreshIndicatorSemanticLabel": "නැවුම් කරන්න", + "moreButtonTooltip": "TBD" } diff --git a/packages/flutter_localizations/lib/src/l10n/material_sk.arb b/packages/flutter_localizations/lib/src/l10n/material_sk.arb index d617a866b29..5f17b77e214 100644 --- a/packages/flutter_localizations/lib/src/l10n/material_sk.arb +++ b/packages/flutter_localizations/lib/src/l10n/material_sk.arb @@ -55,5 +55,6 @@ "remainingTextFieldCharacterCountZero": "TBD", "remainingTextFieldCharacterCountOne": "Zostáva 1 znak", "remainingTextFieldCharacterCountOther": "Zostáva $remainingCount znakov", - "refreshIndicatorSemanticLabel": "Obnoviť" + "refreshIndicatorSemanticLabel": "Obnoviť", + "moreButtonTooltip": "TBD" } diff --git a/packages/flutter_localizations/lib/src/l10n/material_sl.arb b/packages/flutter_localizations/lib/src/l10n/material_sl.arb index b15a6687780..d7f7687fb4c 100644 --- a/packages/flutter_localizations/lib/src/l10n/material_sl.arb +++ b/packages/flutter_localizations/lib/src/l10n/material_sl.arb @@ -55,5 +55,6 @@ "remainingTextFieldCharacterCountZero": "TBD", "remainingTextFieldCharacterCountOne": "Še 1 znak", "remainingTextFieldCharacterCountOther": "Še $remainingCount znakov", - "refreshIndicatorSemanticLabel": "Osveži" + "refreshIndicatorSemanticLabel": "Osveži", + "moreButtonTooltip": "TBD" } diff --git a/packages/flutter_localizations/lib/src/l10n/material_sq.arb b/packages/flutter_localizations/lib/src/l10n/material_sq.arb index c8990eac401..9236da64566 100644 --- a/packages/flutter_localizations/lib/src/l10n/material_sq.arb +++ b/packages/flutter_localizations/lib/src/l10n/material_sq.arb @@ -50,5 +50,6 @@ "collapsedIconTapHint": "Zgjero", "remainingTextFieldCharacterCountOne": "1 karakter i mbetur", "remainingTextFieldCharacterCountOther": "$remainingCount karaktere të mbetura", - "refreshIndicatorSemanticLabel": "Rifresko" + "refreshIndicatorSemanticLabel": "Rifresko", + "moreButtonTooltip": "TBD" } diff --git a/packages/flutter_localizations/lib/src/l10n/material_sr.arb b/packages/flutter_localizations/lib/src/l10n/material_sr.arb index db45fa6bfe3..686cf98e2df 100644 --- a/packages/flutter_localizations/lib/src/l10n/material_sr.arb +++ b/packages/flutter_localizations/lib/src/l10n/material_sr.arb @@ -53,5 +53,6 @@ "remainingTextFieldCharacterCountZero": "TBD", "remainingTextFieldCharacterCountOne": "Преостао је 1 знак", "remainingTextFieldCharacterCountOther": "Преостало је $remainingCount знакова", - "refreshIndicatorSemanticLabel": "Освежи" + "refreshIndicatorSemanticLabel": "Освежи", + "moreButtonTooltip": "TBD" } diff --git a/packages/flutter_localizations/lib/src/l10n/material_sv.arb b/packages/flutter_localizations/lib/src/l10n/material_sv.arb index 69a6eb4e1ab..5a02f2b7287 100644 --- a/packages/flutter_localizations/lib/src/l10n/material_sv.arb +++ b/packages/flutter_localizations/lib/src/l10n/material_sv.arb @@ -51,5 +51,6 @@ "remainingTextFieldCharacterCountZero": "TBD", "remainingTextFieldCharacterCountOne": "1 tecken kvar", "remainingTextFieldCharacterCountOther": "$remainingCount tecken kvar", - "refreshIndicatorSemanticLabel": "Uppdatera" + "refreshIndicatorSemanticLabel": "Uppdatera", + "moreButtonTooltip": "TBD" } diff --git a/packages/flutter_localizations/lib/src/l10n/material_sw.arb b/packages/flutter_localizations/lib/src/l10n/material_sw.arb index c50ee8fd8aa..ea141e25e12 100644 --- a/packages/flutter_localizations/lib/src/l10n/material_sw.arb +++ b/packages/flutter_localizations/lib/src/l10n/material_sw.arb @@ -52,5 +52,6 @@ "remainingTextFieldCharacterCountZero": "Hapana herufi zilizo baki", "remainingTextFieldCharacterCountOne": "Imesalia herufi 1", "remainingTextFieldCharacterCountOther": "Zimesalia herufi $remainingCount", - "refreshIndicatorSemanticLabel": "Onyesha upya" + "refreshIndicatorSemanticLabel": "Onyesha upya", + "moreButtonTooltip": "TBD" } diff --git a/packages/flutter_localizations/lib/src/l10n/material_ta.arb b/packages/flutter_localizations/lib/src/l10n/material_ta.arb index bacfa9a8dec..20d0ebe48e3 100644 --- a/packages/flutter_localizations/lib/src/l10n/material_ta.arb +++ b/packages/flutter_localizations/lib/src/l10n/material_ta.arb @@ -52,5 +52,6 @@ "remainingTextFieldCharacterCountZero": "எழுத்துக்கள் எதுவும் இல்லை", "remainingTextFieldCharacterCountOne": "1 எழுத்து மீதமுள்ளது", "remainingTextFieldCharacterCountOther": "$remainingCount எழுத்துகள் மீதமுள்ளன", - "refreshIndicatorSemanticLabel": "ரெஃப்ரெஷ் செய்யும்" + "refreshIndicatorSemanticLabel": "ரெஃப்ரெஷ் செய்யும்", + "moreButtonTooltip": "TBD" } diff --git a/packages/flutter_localizations/lib/src/l10n/material_te.arb b/packages/flutter_localizations/lib/src/l10n/material_te.arb index 007628fe39f..d76ddf98ded 100644 --- a/packages/flutter_localizations/lib/src/l10n/material_te.arb +++ b/packages/flutter_localizations/lib/src/l10n/material_te.arb @@ -50,5 +50,6 @@ "collapsedIconTapHint": "విస్తరించు", "remainingTextFieldCharacterCountOne": "1 అక్షరం మిగిలి ఉంది", "remainingTextFieldCharacterCountOther": "$remainingCount అక్షరాలు మిగిలి ఉన్నాయి", - "refreshIndicatorSemanticLabel": "రిఫ్రెష్ చేయి" + "refreshIndicatorSemanticLabel": "రిఫ్రెష్ చేయి", + "moreButtonTooltip": "TBD" } diff --git a/packages/flutter_localizations/lib/src/l10n/material_th.arb b/packages/flutter_localizations/lib/src/l10n/material_th.arb index 314cc88eff0..a0d7e0deed5 100644 --- a/packages/flutter_localizations/lib/src/l10n/material_th.arb +++ b/packages/flutter_localizations/lib/src/l10n/material_th.arb @@ -51,5 +51,6 @@ "remainingTextFieldCharacterCountZero": "TBD", "remainingTextFieldCharacterCountOne": "เหลือ 1 อักขระ", "remainingTextFieldCharacterCountOther": "เหลือ $remainingCount อักขระ", - "refreshIndicatorSemanticLabel": "รีเฟรช" + "refreshIndicatorSemanticLabel": "รีเฟรช", + "moreButtonTooltip": "TBD" } diff --git a/packages/flutter_localizations/lib/src/l10n/material_tl.arb b/packages/flutter_localizations/lib/src/l10n/material_tl.arb index d317f317269..a1060d7b04c 100644 --- a/packages/flutter_localizations/lib/src/l10n/material_tl.arb +++ b/packages/flutter_localizations/lib/src/l10n/material_tl.arb @@ -51,5 +51,6 @@ "remainingTextFieldCharacterCountZero": "TBD", "remainingTextFieldCharacterCountOne": "1 character ang natitira", "remainingTextFieldCharacterCountOther": "$remainingCount na character ang natitira", - "refreshIndicatorSemanticLabel": "Nagre-refresh" + "refreshIndicatorSemanticLabel": "Nagre-refresh", + "moreButtonTooltip": "TBD" } diff --git a/packages/flutter_localizations/lib/src/l10n/material_tr.arb b/packages/flutter_localizations/lib/src/l10n/material_tr.arb index 0d4e9333417..b834d200b85 100644 --- a/packages/flutter_localizations/lib/src/l10n/material_tr.arb +++ b/packages/flutter_localizations/lib/src/l10n/material_tr.arb @@ -51,5 +51,6 @@ "remainingTextFieldCharacterCountZero": "TBD", "remainingTextFieldCharacterCountOne": "1 karakter kaldı", "remainingTextFieldCharacterCountOther": "$remainingCount karakter kaldı", - "refreshIndicatorSemanticLabel": "Yenile" + "refreshIndicatorSemanticLabel": "Yenile", + "moreButtonTooltip": "TBD" } diff --git a/packages/flutter_localizations/lib/src/l10n/material_uk.arb b/packages/flutter_localizations/lib/src/l10n/material_uk.arb index 7ef72940dda..6ed3a986b73 100644 --- a/packages/flutter_localizations/lib/src/l10n/material_uk.arb +++ b/packages/flutter_localizations/lib/src/l10n/material_uk.arb @@ -55,5 +55,6 @@ "remainingTextFieldCharacterCountZero": "TBD", "remainingTextFieldCharacterCountOne": "Залишився 1 символ", "remainingTextFieldCharacterCountOther": "Залишилося $remainingCount символу", - "refreshIndicatorSemanticLabel": "Оновити" + "refreshIndicatorSemanticLabel": "Оновити", + "moreButtonTooltip": "TBD" } diff --git a/packages/flutter_localizations/lib/src/l10n/material_ur.arb b/packages/flutter_localizations/lib/src/l10n/material_ur.arb index a0f4297b526..14e2919484e 100644 --- a/packages/flutter_localizations/lib/src/l10n/material_ur.arb +++ b/packages/flutter_localizations/lib/src/l10n/material_ur.arb @@ -51,5 +51,6 @@ "remainingTextFieldCharacterCountZero": "TBD", "remainingTextFieldCharacterCountOne": "1 حرف باقی ہے", "remainingTextFieldCharacterCountOther": "$remainingCount حروف باقی ہیں", - "refreshIndicatorSemanticLabel": "ریفریش کریں" + "refreshIndicatorSemanticLabel": "ریفریش کریں", + "moreButtonTooltip": "TBD" } diff --git a/packages/flutter_localizations/lib/src/l10n/material_uz.arb b/packages/flutter_localizations/lib/src/l10n/material_uz.arb index 91e3972ac2f..b85aa60c75d 100644 --- a/packages/flutter_localizations/lib/src/l10n/material_uz.arb +++ b/packages/flutter_localizations/lib/src/l10n/material_uz.arb @@ -50,5 +50,6 @@ "collapsedIconTapHint": "Yoyish", "remainingTextFieldCharacterCountOne": "1 ta belgi qoldi", "remainingTextFieldCharacterCountOther": "$remainingCount ta belgi qoldi", - "refreshIndicatorSemanticLabel": "Yangilash" + "refreshIndicatorSemanticLabel": "Yangilash", + "moreButtonTooltip": "TBD" } diff --git a/packages/flutter_localizations/lib/src/l10n/material_vi.arb b/packages/flutter_localizations/lib/src/l10n/material_vi.arb index 8fef9776ebd..11222843ca5 100644 --- a/packages/flutter_localizations/lib/src/l10n/material_vi.arb +++ b/packages/flutter_localizations/lib/src/l10n/material_vi.arb @@ -51,5 +51,6 @@ "remainingTextFieldCharacterCountZero": "TBD", "remainingTextFieldCharacterCountOne": "Còn lại 1 ký tự", "remainingTextFieldCharacterCountOther": "Còn lại $remainingCount ký tự", - "refreshIndicatorSemanticLabel": "Làm mới" + "refreshIndicatorSemanticLabel": "Làm mới", + "moreButtonTooltip": "TBD" } diff --git a/packages/flutter_localizations/lib/src/l10n/material_zh.arb b/packages/flutter_localizations/lib/src/l10n/material_zh.arb index f3ddf893725..98ffdca64e5 100644 --- a/packages/flutter_localizations/lib/src/l10n/material_zh.arb +++ b/packages/flutter_localizations/lib/src/l10n/material_zh.arb @@ -51,5 +51,6 @@ "remainingTextFieldCharacterCountZero": "TBD", "remainingTextFieldCharacterCountOne": "还可输入 1 个字符", "remainingTextFieldCharacterCountOther": "还可输入 $remainingCount 个字符", - "refreshIndicatorSemanticLabel": "刷新" + "refreshIndicatorSemanticLabel": "刷新", + "moreButtonTooltip": "TBD" } diff --git a/packages/flutter_localizations/lib/src/l10n/material_zu.arb b/packages/flutter_localizations/lib/src/l10n/material_zu.arb index 36ab9ae53ae..d3a78a6e7b3 100644 --- a/packages/flutter_localizations/lib/src/l10n/material_zu.arb +++ b/packages/flutter_localizations/lib/src/l10n/material_zu.arb @@ -50,5 +50,6 @@ "collapsedIconTapHint": "Nweba", "remainingTextFieldCharacterCountOne": "1 uhlamvu olusele", "remainingTextFieldCharacterCountOther": "$remainingCount izinhlamvu ezisele", - "refreshIndicatorSemanticLabel": "Vuselela" + "refreshIndicatorSemanticLabel": "Vuselela", + "moreButtonTooltip": "TBD" }