Text Selection Overflow (Android) (#49391)
Adds an overflow menu to the text selection menu on Android when the items overflow.
diff --git a/packages/flutter/lib/src/material/material_localizations.dart b/packages/flutter/lib/src/material/material_localizations.dart
index bad3d05..f15014e 100644
--- a/packages/flutter/lib/src/material/material_localizations.dart
+++ b/packages/flutter/lib/src/material/material_localizations.dart
@@ -71,6 +71,9 @@
/// 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;
@@ -562,6 +565,9 @@
String get deleteButtonTooltip => 'Delete';
@override
+ String get moreButtonTooltip => 'More';
+
+ @override
String get nextMonthTooltip => 'Next month';
@override
diff --git a/packages/flutter/lib/src/material/text_selection.dart b/packages/flutter/lib/src/material/text_selection.dart
index f1893e1..8ad2fd1 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 _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 @@
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<Widget> items = <Widget>[
- 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 @@
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: <Widget>[
+ // 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<Widget> 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<RenderBox> {
+ /// 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<RenderBox, _ToolbarParentData> {
+ _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 @@
@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 @@
BuildContext context,
Rect globalEditableRegion,
double textLineHeight,
- Offset position,
+ Offset selectionMidpoint,
List<TextSelectionPoint> 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: <Widget>[
+ 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 @@
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 84d68bb..0416e4c 100644
--- a/packages/flutter/lib/src/rendering/box.dart
+++ b/packages/flutter/lib/src/rendering/box.dart
@@ -2483,7 +2483,7 @@
/// * [defaultPaint], which paints the children appropriate for this
/// hit-testing strategy.
bool defaultHitTestChildren(BoxHitTestResult result, { Offset position }) {
- // the x, y parameters have the top left of the node's box as the origin
+ // The x, y parameters have the top left of the node's box as the origin.
ChildType child = lastChild;
while (child != null) {
final ParentDataType childParentData = child.parentData as ParentDataType;
diff --git a/packages/flutter/test/material/localizations_test.dart b/packages/flutter/test/material/localizations_test.dart
index 6a2ab17..c27da0c 100644
--- a/packages/flutter/test/material/localizations_test.dart
+++ b/packages/flutter/test/material/localizations_test.dart
@@ -13,6 +13,7 @@
expect(localizations.backButtonTooltip, isNotNull);
expect(localizations.closeButtonTooltip, isNotNull);
expect(localizations.deleteButtonTooltip, isNotNull);
+ expect(localizations.moreButtonTooltip, isNotNull);
expect(localizations.nextMonthTooltip, isNotNull);
expect(localizations.previousMonthTooltip, isNotNull);
expect(localizations.nextPageTooltip, isNotNull);
diff --git a/packages/flutter/test/material/text.dart b/packages/flutter/test/material/text.dart
new file mode 100644
index 0000000..04cf7be
--- /dev/null
+++ b/packages/flutter/test/material/text.dart
@@ -0,0 +1,47 @@
+// Copyright 2014 The Flutter Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+import 'package:flutter_test/flutter_test.dart';
+import 'package:flutter/material.dart';
+import 'package:flutter/rendering.dart';
+import 'package:flutter/widgets.dart';
+
+// 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<TextSelectionPoint> globalize(Iterable<TextSelectionPoint> points, RenderBox box) {
+ return points.map<TextSelectionPoint>((TextSelectionPoint point) {
+ return TextSelectionPoint(
+ box.localToGlobal(point.point),
+ point.direction,
+ );
+ }).toList();
+}
+
+Offset textOffsetToPosition(WidgetTester tester, int offset) {
+ final RenderEditable renderEditable = findRenderEditable(tester);
+ final List<TextSelectionPoint> 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 dfdd77a..157dd55 100644
--- a/packages/flutter/test/material/text_field_test.dart
+++ b/packages/flutter/test/material/text_field_test.dart
@@ -18,6 +18,7 @@
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 = <String, dynamic>{
@@ -141,45 +142,6 @@
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<TextSelectionPoint> globalize(Iterable<TextSelectionPoint> points, RenderBox box) {
- return points.map<TextSelectionPoint>((TextSelectionPoint point) {
- return TextSelectionPoint(
- box.localToGlobal(point.point),
- point.direction,
- );
- }).toList();
- }
-
- Offset textOffsetToPosition(WidgetTester tester, int offset) {
- final RenderEditable renderEditable = findRenderEditable(tester);
- final List<TextSelectionPoint> 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 4799bad..964f522 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 @@
});
});
+ 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<TextSelectionPoint> 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>{ 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>{ 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>{ 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>{ 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<TextSelectionPoint> 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>{ 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<TextSelectionPoint> 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>{ 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 1c486ac..6344031 100644
--- a/packages/flutter_localizations/lib/src/l10n/generated_material_localizations.dart
+++ b/packages/flutter_localizations/lib/src/l10n/generated_material_localizations.dart
@@ -99,6 +99,9 @@
String get modalBarrierDismissLabel => 'Maak toe';
@override
+ String get moreButtonTooltip => 'TBD';
+
+ @override
String get nextMonthTooltip => 'Volgende maand';
@override
@@ -303,6 +306,9 @@
String get modalBarrierDismissLabel => 'አሰናብት';
@override
+ String get moreButtonTooltip => 'TBD';
+
+ @override
String get nextMonthTooltip => 'ቀጣይ ወር';
@override
@@ -507,6 +513,9 @@
String get modalBarrierDismissLabel => 'رفض';
@override
+ String get moreButtonTooltip => 'TBD';
+
+ @override
String get nextMonthTooltip => 'الشهر التالي';
@override
@@ -711,6 +720,9 @@
String get modalBarrierDismissLabel => 'অগ্ৰাহ্য কৰক';
@override
+ String get moreButtonTooltip => 'TBD';
+
+ @override
String get nextMonthTooltip => 'পৰৱৰ্তী মাহ';
@override
@@ -915,6 +927,9 @@
String get modalBarrierDismissLabel => 'İmtina edin';
@override
+ String get moreButtonTooltip => 'TBD';
+
+ @override
String get nextMonthTooltip => 'Növbəti ay';
@override
@@ -1119,6 +1134,9 @@
String get modalBarrierDismissLabel => 'Адхіліць';
@override
+ String get moreButtonTooltip => 'TBD';
+
+ @override
String get nextMonthTooltip => 'Наступны месяц';
@override
@@ -1323,6 +1341,9 @@
String get modalBarrierDismissLabel => 'Отхвърляне';
@override
+ String get moreButtonTooltip => 'TBD';
+
+ @override
String get nextMonthTooltip => 'Следващият месец';
@override
@@ -1527,6 +1548,9 @@
String get modalBarrierDismissLabel => 'খারিজ করুন';
@override
+ String get moreButtonTooltip => 'TBD';
+
+ @override
String get nextMonthTooltip => 'পরের মাস';
@override
@@ -1731,6 +1755,9 @@
String get modalBarrierDismissLabel => 'Odbaci';
@override
+ String get moreButtonTooltip => 'TBD';
+
+ @override
String get nextMonthTooltip => 'Sljedeći mjesec';
@override
@@ -1935,6 +1962,9 @@
String get modalBarrierDismissLabel => 'Ignora';
@override
+ String get moreButtonTooltip => 'TBD';
+
+ @override
String get nextMonthTooltip => 'Mes següent';
@override
@@ -2139,6 +2169,9 @@
String get modalBarrierDismissLabel => 'Zavřít';
@override
+ String get moreButtonTooltip => 'TBD';
+
+ @override
String get nextMonthTooltip => 'Další měsíc';
@override
@@ -2343,6 +2376,9 @@
String get modalBarrierDismissLabel => 'Afvis';
@override
+ String get moreButtonTooltip => 'TBD';
+
+ @override
String get nextMonthTooltip => 'Næste måned';
@override
@@ -2547,6 +2583,9 @@
String get modalBarrierDismissLabel => 'Schließen';
@override
+ String get moreButtonTooltip => 'TBD';
+
+ @override
String get nextMonthTooltip => 'Nächster Monat';
@override
@@ -2781,6 +2820,9 @@
String get modalBarrierDismissLabel => 'Παράβλεψη';
@override
+ String get moreButtonTooltip => 'TBD';
+
+ @override
String get nextMonthTooltip => 'Επόμενος μήνας';
@override
@@ -2985,6 +3027,9 @@
String get modalBarrierDismissLabel => 'Dismiss';
@override
+ String get moreButtonTooltip => 'More';
+
+ @override
String get nextMonthTooltip => 'Next month';
@override
@@ -3534,6 +3579,9 @@
String get modalBarrierDismissLabel => 'Cerrar';
@override
+ String get moreButtonTooltip => 'TBD';
+
+ @override
String get nextMonthTooltip => 'Mes siguiente';
@override
@@ -5361,6 +5409,9 @@
String get modalBarrierDismissLabel => 'Loobu';
@override
+ String get moreButtonTooltip => 'TBD';
+
+ @override
String get nextMonthTooltip => 'Järgmine kuu';
@override
@@ -5565,6 +5616,9 @@
String get modalBarrierDismissLabel => 'Baztertu';
@override
+ String get moreButtonTooltip => 'TBD';
+
+ @override
String get nextMonthTooltip => 'Hurrengo hilabetea';
@override
@@ -5769,6 +5823,9 @@
String get modalBarrierDismissLabel => 'نپذیرفتن';
@override
+ String get moreButtonTooltip => 'TBD';
+
+ @override
String get nextMonthTooltip => 'ماه بعد';
@override
@@ -5973,6 +6030,9 @@
String get modalBarrierDismissLabel => 'Ohita';
@override
+ String get moreButtonTooltip => 'TBD';
+
+ @override
String get nextMonthTooltip => 'Seuraava kuukausi';
@override
@@ -6177,6 +6237,9 @@
String get modalBarrierDismissLabel => 'I-dismiss';
@override
+ String get moreButtonTooltip => 'TBD';
+
+ @override
String get nextMonthTooltip => 'Susunod na buwan';
@override
@@ -6381,6 +6444,9 @@
String get modalBarrierDismissLabel => 'Ignorer';
@override
+ String get moreButtonTooltip => 'TBD';
+
+ @override
String get nextMonthTooltip => 'Mois suivant';
@override
@@ -6639,6 +6705,9 @@
String get modalBarrierDismissLabel => 'Ignorar';
@override
+ String get moreButtonTooltip => 'TBD';
+
+ @override
String get nextMonthTooltip => 'Mes seguinte';
@override
@@ -6843,6 +6912,9 @@
String get modalBarrierDismissLabel => 'Schließen';
@override
+ String get moreButtonTooltip => 'TBD';
+
+ @override
String get nextMonthTooltip => 'Nächster Monat';
@override
@@ -7047,6 +7119,9 @@
String get modalBarrierDismissLabel => 'છોડી દો';
@override
+ String get moreButtonTooltip => 'TBD';
+
+ @override
String get nextMonthTooltip => 'આગલો મહિનો';
@override
@@ -7251,6 +7326,9 @@
String get modalBarrierDismissLabel => 'סגירה';
@override
+ String get moreButtonTooltip => 'TBD';
+
+ @override
String get nextMonthTooltip => 'החודש הבא';
@override
@@ -7455,6 +7533,9 @@
String get modalBarrierDismissLabel => 'खारिज करें';
@override
+ String get moreButtonTooltip => 'TBD';
+
+ @override
String get nextMonthTooltip => 'अगला महीना';
@override
@@ -7659,6 +7740,9 @@
String get modalBarrierDismissLabel => 'Odbaci';
@override
+ String get moreButtonTooltip => 'TBD';
+
+ @override
String get nextMonthTooltip => 'Sljedeći mjesec';
@override
@@ -7863,6 +7947,9 @@
String get modalBarrierDismissLabel => 'Elvetés';
@override
+ String get moreButtonTooltip => 'TBD';
+
+ @override
String get nextMonthTooltip => 'Következő hónap';
@override
@@ -8067,6 +8154,9 @@
String get modalBarrierDismissLabel => 'Փակել';
@override
+ String get moreButtonTooltip => 'TBD';
+
+ @override
String get nextMonthTooltip => 'Հաջորդ ամիս';
@override
@@ -8271,6 +8361,9 @@
String get modalBarrierDismissLabel => 'Tutup';
@override
+ String get moreButtonTooltip => 'TBD';
+
+ @override
String get nextMonthTooltip => 'Bulan berikutnya';
@override
@@ -8475,6 +8568,9 @@
String get modalBarrierDismissLabel => 'Hunsa';
@override
+ String get moreButtonTooltip => 'TBD';
+
+ @override
String get nextMonthTooltip => 'Næsti mánuður';
@override
@@ -8679,6 +8775,9 @@
String get modalBarrierDismissLabel => 'Ignora';
@override
+ String get moreButtonTooltip => 'TBD';
+
+ @override
String get nextMonthTooltip => 'Mese successivo';
@override
@@ -8883,6 +8982,9 @@
String get modalBarrierDismissLabel => '閉じる';
@override
+ String get moreButtonTooltip => 'TBD';
+
+ @override
String get nextMonthTooltip => '来月';
@override
@@ -9087,6 +9189,9 @@
String get modalBarrierDismissLabel => 'დახურვა';
@override
+ String get moreButtonTooltip => 'TBD';
+
+ @override
String get nextMonthTooltip => 'შემდეგი თვე';
@override
@@ -9291,6 +9396,9 @@
String get modalBarrierDismissLabel => 'Жабу';
@override
+ String get moreButtonTooltip => 'TBD';
+
+ @override
String get nextMonthTooltip => 'Келесі ай';
@override
@@ -9495,6 +9603,9 @@
String get modalBarrierDismissLabel => 'ច្រានចោល';
@override
+ String get moreButtonTooltip => 'TBD';
+
+ @override
String get nextMonthTooltip => 'ខែក្រោយ';
@override
@@ -9699,6 +9810,9 @@
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}';
@override
@@ -9903,6 +10017,9 @@
String get modalBarrierDismissLabel => '닫기';
@override
+ String get moreButtonTooltip => 'TBD';
+
+ @override
String get nextMonthTooltip => '다음 달';
@override
@@ -10107,6 +10224,9 @@
String get modalBarrierDismissLabel => 'Жабуу';
@override
+ String get moreButtonTooltip => 'TBD';
+
+ @override
String get nextMonthTooltip => 'Кийинки ай';
@override
@@ -10311,6 +10431,9 @@
String get modalBarrierDismissLabel => 'ປິດໄວ້';
@override
+ String get moreButtonTooltip => 'TBD';
+
+ @override
String get nextMonthTooltip => 'ເດືອນໜ້າ';
@override
@@ -10515,6 +10638,9 @@
String get modalBarrierDismissLabel => 'Atsisakyti';
@override
+ String get moreButtonTooltip => 'TBD';
+
+ @override
String get nextMonthTooltip => 'Kitas mėnuo';
@override
@@ -10719,6 +10845,9 @@
String get modalBarrierDismissLabel => 'Nerādīt';
@override
+ String get moreButtonTooltip => 'TBD';
+
+ @override
String get nextMonthTooltip => 'Nākamais mēnesis';
@override
@@ -10923,6 +11052,9 @@
String get modalBarrierDismissLabel => 'Отфрли';
@override
+ String get moreButtonTooltip => 'TBD';
+
+ @override
String get nextMonthTooltip => 'Следниот месец';
@override
@@ -11127,6 +11259,9 @@
String get modalBarrierDismissLabel => 'നിരസിക്കുക';
@override
+ String get moreButtonTooltip => 'TBD';
+
+ @override
String get nextMonthTooltip => 'അടുത്ത മാസം';
@override
@@ -11331,6 +11466,9 @@
String get modalBarrierDismissLabel => 'Үл хэрэгсэх';
@override
+ String get moreButtonTooltip => 'TBD';
+
+ @override
String get nextMonthTooltip => 'Дараах сар';
@override
@@ -11535,6 +11673,9 @@
String get modalBarrierDismissLabel => 'डिसमिस करा';
@override
+ String get moreButtonTooltip => 'TBD';
+
+ @override
String get nextMonthTooltip => 'पुढील महिना';
@override
@@ -11739,6 +11880,9 @@
String get modalBarrierDismissLabel => 'Tolak';
@override
+ String get moreButtonTooltip => 'TBD';
+
+ @override
String get nextMonthTooltip => 'Bulan depan';
@override
@@ -11943,6 +12087,9 @@
String get modalBarrierDismissLabel => 'ပယ်ရန်';
@override
+ String get moreButtonTooltip => 'TBD';
+
+ @override
String get nextMonthTooltip => 'နောက်လ';
@override
@@ -12147,6 +12294,9 @@
String get modalBarrierDismissLabel => 'Avvis';
@override
+ String get moreButtonTooltip => 'TBD';
+
+ @override
String get nextMonthTooltip => 'Neste måned';
@override
@@ -12351,6 +12501,9 @@
String get modalBarrierDismissLabel => 'खारेज गर्नुहोस्';
@override
+ String get moreButtonTooltip => 'TBD';
+
+ @override
String get nextMonthTooltip => 'अर्को महिना';
@override
@@ -12555,6 +12708,9 @@
String get modalBarrierDismissLabel => 'Sluiten';
@override
+ String get moreButtonTooltip => 'TBD';
+
+ @override
String get nextMonthTooltip => 'Volgende maand';
@override
@@ -12759,6 +12915,9 @@
String get modalBarrierDismissLabel => 'ଖାରଜ କରନ୍ତୁ';
@override
+ String get moreButtonTooltip => 'TBD';
+
+ @override
String get nextMonthTooltip => 'ପରବର୍ତ୍ତୀ ମାସ';
@override
@@ -12963,6 +13122,9 @@
String get modalBarrierDismissLabel => 'ਖਾਰਜ ਕਰੋ';
@override
+ String get moreButtonTooltip => 'TBD';
+
+ @override
String get nextMonthTooltip => 'ਅਗਲਾ ਮਹੀਨਾ';
@override
@@ -13167,6 +13329,9 @@
String get modalBarrierDismissLabel => 'Zamknij';
@override
+ String get moreButtonTooltip => 'TBD';
+
+ @override
String get nextMonthTooltip => 'Następny miesiąc';
@override
@@ -13371,6 +13536,9 @@
String get modalBarrierDismissLabel => 'رد کړه';
@override
+ String get moreButtonTooltip => 'TBD';
+
+ @override
String get nextMonthTooltip => 'بله میاشت';
@override
@@ -13575,6 +13743,9 @@
String get modalBarrierDismissLabel => 'Dispensar';
@override
+ String get moreButtonTooltip => 'TBD';
+
+ @override
String get nextMonthTooltip => 'Próximo mês';
@override
@@ -13857,6 +14028,9 @@
String get modalBarrierDismissLabel => 'Închideți';
@override
+ String get moreButtonTooltip => 'TBD';
+
+ @override
String get nextMonthTooltip => 'Luna viitoare';
@override
@@ -14061,6 +14235,9 @@
String get modalBarrierDismissLabel => 'Закрыть';
@override
+ String get moreButtonTooltip => 'TBD';
+
+ @override
String get nextMonthTooltip => 'Следующий месяц';
@override
@@ -14265,6 +14442,9 @@
String get modalBarrierDismissLabel => 'ඉවත ලන්න';
@override
+ String get moreButtonTooltip => 'TBD';
+
+ @override
String get nextMonthTooltip => 'ඊළඟ මාසය';
@override
@@ -14469,6 +14649,9 @@
String get modalBarrierDismissLabel => 'Odmietnuť';
@override
+ String get moreButtonTooltip => 'TBD';
+
+ @override
String get nextMonthTooltip => 'Budúci mesiac';
@override
@@ -14673,6 +14856,9 @@
String get modalBarrierDismissLabel => 'Opusti';
@override
+ String get moreButtonTooltip => 'TBD';
+
+ @override
String get nextMonthTooltip => 'Naslednji mesec';
@override
@@ -14877,6 +15063,9 @@
String get modalBarrierDismissLabel => 'Hiq';
@override
+ String get moreButtonTooltip => 'TBD';
+
+ @override
String get nextMonthTooltip => 'Muaji i ardhshëm';
@override
@@ -15081,6 +15270,9 @@
String get modalBarrierDismissLabel => 'Одбаци';
@override
+ String get moreButtonTooltip => 'TBD';
+
+ @override
String get nextMonthTooltip => 'Следећи месец';
@override
@@ -15489,6 +15681,9 @@
String get modalBarrierDismissLabel => 'Stäng';
@override
+ String get moreButtonTooltip => 'TBD';
+
+ @override
String get nextMonthTooltip => 'Nästa månad';
@override
@@ -15693,6 +15888,9 @@
String get modalBarrierDismissLabel => 'Ondoa';
@override
+ String get moreButtonTooltip => 'TBD';
+
+ @override
String get nextMonthTooltip => 'Mwezi ujao';
@override
@@ -15897,6 +16095,9 @@
String get modalBarrierDismissLabel => 'நிராகரிக்கும்';
@override
+ String get moreButtonTooltip => 'TBD';
+
+ @override
String get nextMonthTooltip => 'அடுத்த மாதம்';
@override
@@ -16101,6 +16302,9 @@
String get modalBarrierDismissLabel => 'విస్మరించు';
@override
+ String get moreButtonTooltip => 'TBD';
+
+ @override
String get nextMonthTooltip => 'తర్వాత నెల';
@override
@@ -16305,6 +16509,9 @@
String get modalBarrierDismissLabel => 'ปิด';
@override
+ String get moreButtonTooltip => 'TBD';
+
+ @override
String get nextMonthTooltip => 'เดือนหน้า';
@override
@@ -16509,6 +16716,9 @@
String get modalBarrierDismissLabel => 'I-dismiss';
@override
+ String get moreButtonTooltip => 'TBD';
+
+ @override
String get nextMonthTooltip => 'Susunod na buwan';
@override
@@ -16713,6 +16923,9 @@
String get modalBarrierDismissLabel => 'Kapat';
@override
+ String get moreButtonTooltip => 'TBD';
+
+ @override
String get nextMonthTooltip => 'Gelecek ay';
@override
@@ -16917,6 +17130,9 @@
String get modalBarrierDismissLabel => 'Закрити';
@override
+ String get moreButtonTooltip => 'TBD';
+
+ @override
String get nextMonthTooltip => 'Наступний місяць';
@override
@@ -17121,6 +17337,9 @@
String get modalBarrierDismissLabel => 'برخاست کریں';
@override
+ String get moreButtonTooltip => 'TBD';
+
+ @override
String get nextMonthTooltip => 'اگلا مہینہ';
@override
@@ -17325,6 +17544,9 @@
String get modalBarrierDismissLabel => 'Yopish';
@override
+ String get moreButtonTooltip => 'TBD';
+
+ @override
String get nextMonthTooltip => 'Keyingi oy';
@override
@@ -17529,6 +17751,9 @@
String get modalBarrierDismissLabel => 'Bỏ qua';
@override
+ String get moreButtonTooltip => 'TBD';
+
+ @override
String get nextMonthTooltip => 'Tháng sau';
@override
@@ -17733,6 +17958,9 @@
String get modalBarrierDismissLabel => '关闭';
@override
+ String get moreButtonTooltip => 'TBD';
+
+ @override
String get nextMonthTooltip => '下个月';
@override
@@ -18210,6 +18438,9 @@
String get modalBarrierDismissLabel => 'Cashisa';
@override
+ String get moreButtonTooltip => 'TBD';
+
+ @override
String get nextMonthTooltip => 'Inyanga ezayo';
@override
diff --git a/packages/flutter_localizations/lib/src/l10n/material_af.arb b/packages/flutter_localizations/lib/src/l10n/material_af.arb
index 85367da..8390dcc 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 ace6f2a..a99e6fe 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 0062c25..9d679aa 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 bfaeb9b..9ed0226 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 bae6af2..6449b4b 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 a34a6c3..c38f6f3 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 cd6e683..f4774f8 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 c8349fe..8055be3 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 89979a7..b2ff5d0 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 ad17f41..5b51541 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 5922920..ac28cb4 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 c3caf77..9efeec3 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 b8eedd0..691cf6c 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 2a3b607..68eec0d 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 fc3402f..f51d17b 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 26ff120..3387c99 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 f0ee775..f100bd1 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 faa0c45..8d92a70 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 f5f7415..76ff956 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 ae435d7..24040fa 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 d317f31..a1060d7 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 239cf42..e6d48be 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 2a52209..82438c3 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 306f3b6..58d2166 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 666f8bf..3302a3e 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 2981ee6..f5af651 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 2c7d67a..6872652 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 5180a92..b4a4ab0 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 301dff5..896d41e 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 dd3649d..8c47a27 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 9914905..70f98c8 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 b25a6bf..c0ef72f 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 f486542..ebd5352 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 915561f..8852f15 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 70673a0..cb3207c 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 82ce189..25f10c8 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 a6a2cb6..5e080ab 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 6241f0d..598202b 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 b424457..1cc0c5c 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 97aee02..55fa590 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 1c06c45..ad27d49 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 b1b946c..22ef37e 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 0973c06..3bfb25e 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 c427e1d..add1768 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 c70f682..54882cc 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 1c8c4b9..cb62f11 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 c55faa0..5cd4c1f 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 d8e8bf9..3ed751c 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 b61db5f..ad8287f 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 900f860..3a251cf 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 c9f70b8..fc15da9 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 5492659..6f94504 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 91c2b34..6b65d4c 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 a67082d..e57acc9 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 be3613f..1ed89c3 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 2c318cd..6f456e9 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 a1d74b6..6c36828 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 5e29e55..3c92171 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 15a8cf6..6db7e27 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 f294e70..5bd5488 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 d617a86..5f17b77 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 b15a668..d7f7687 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 c8990ea..9236da6 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 db45fa6..686cf98 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 69a6eb4..5a02f2b 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 c50ee8f..ea141e2 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 bacfa9a..20d0ebe 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 007628f..d76ddf9 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 314cc88..a0d7e0d 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 d317f31..a1060d7 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 0d4e933..b834d20 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 7ef7294..6ed3a98 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 a0f4297..14e2919 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 91e3972..b85aa60 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 8fef977..1122284 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 f3ddf89..98ffdca 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 36ab9ae..d3a78a6 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"
}