Make progress indicators accessible (#24275)
* Make progress indicators accessible
This commit is contained in:
parent
567b31a716
commit
78c5bb2a8e
@ -310,6 +310,9 @@ abstract class MaterialLocalizations {
|
||||
/// The label for the [TextField]'s character counter.
|
||||
String remainingTextFieldCharacterCount(int remaining);
|
||||
|
||||
/// The default semantics label for a [RefreshIndicator].
|
||||
String get refreshIndicatorSemanticLabel;
|
||||
|
||||
/// The `MaterialLocalizations` from the closest [Localizations] instance
|
||||
/// that encloses the given context.
|
||||
///
|
||||
@ -698,6 +701,9 @@ class DefaultMaterialLocalizations implements MaterialLocalizations {
|
||||
@override
|
||||
String get collapsedIconTapHint => 'Expand';
|
||||
|
||||
@override
|
||||
String get refreshIndicatorSemanticLabel => 'Refresh';
|
||||
|
||||
/// Creates an object that provides US English resource values for the material
|
||||
/// library widgets.
|
||||
///
|
||||
|
@ -31,11 +31,21 @@ abstract class ProgressIndicator extends StatefulWidget {
|
||||
/// The [value] argument can be either null (corresponding to an indeterminate
|
||||
/// progress indicator) or non-null (corresponding to a determinate progress
|
||||
/// indicator). See [value] for details.
|
||||
///
|
||||
/// {@template flutter.material.progressIndicator.semantics}
|
||||
/// ## Accessibility
|
||||
///
|
||||
/// The [semanticsLabel] can be used to identify the purpose of this progress
|
||||
/// bar for screen reading software. The [semanticsValue] property may be used
|
||||
/// for determinate progress indicators to indicate how much progress has been made.
|
||||
/// {@endtemplate}
|
||||
const ProgressIndicator({
|
||||
Key key,
|
||||
this.value,
|
||||
this.backgroundColor,
|
||||
this.valueColor,
|
||||
this.semanticsLabel,
|
||||
this.semanticsValue,
|
||||
}) : super(key: key);
|
||||
|
||||
/// If non-null, the value of this progress indicator with 0.0 corresponding
|
||||
@ -58,6 +68,28 @@ abstract class ProgressIndicator extends StatefulWidget {
|
||||
/// [ThemeData.accentColor].
|
||||
final Animation<Color> valueColor;
|
||||
|
||||
/// {@template flutter.material.progressIndicator.semanticsLabel}
|
||||
/// The [Semantics.label] for this progress indicator.
|
||||
///
|
||||
/// This value indicates the purpose of the progress bar, and will be
|
||||
/// read out by screen readers to indicate the purpose of this progress
|
||||
/// indicator.
|
||||
/// {@endtemplate}
|
||||
final String semanticsLabel;
|
||||
|
||||
/// {@template flutter.material.progressIndicator.semanticsValue}
|
||||
/// The [Semantics.value] for this progress indicator.
|
||||
///
|
||||
/// This will be used in conjunction with the [semanticsLabel] by
|
||||
/// screen reading software to identify the widget, and is primarily
|
||||
/// intended for use with determinate progress indicators to announce
|
||||
/// how far along they are.
|
||||
///
|
||||
/// For determinate progress indicators, this will be defaulted to [value]
|
||||
/// expressed as a percentage, i.e. `0.1` will become '10%'.
|
||||
/// {@endtemplate}
|
||||
final String semanticsValue;
|
||||
|
||||
Color _getBackgroundColor(BuildContext context) => backgroundColor ?? Theme.of(context).backgroundColor;
|
||||
Color _getValueColor(BuildContext context) => valueColor?.value ?? Theme.of(context).accentColor;
|
||||
|
||||
@ -66,6 +98,21 @@ abstract class ProgressIndicator extends StatefulWidget {
|
||||
super.debugFillProperties(properties);
|
||||
properties.add(PercentProperty('value', value, showName: false, ifNull: '<indeterminate>'));
|
||||
}
|
||||
|
||||
Widget _buildSemanticsWrapper({
|
||||
@required BuildContext context,
|
||||
@required Widget child,
|
||||
}) {
|
||||
String expandedSemanticsValue = semanticsValue;
|
||||
if (value != null) {
|
||||
expandedSemanticsValue ??= '${(value * 100).round()}%';
|
||||
}
|
||||
return Semantics(
|
||||
label: semanticsLabel,
|
||||
value: expandedSemanticsValue,
|
||||
child: child,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
class _LinearProgressIndicatorPainter extends CustomPainter {
|
||||
@ -179,12 +226,23 @@ class LinearProgressIndicator extends ProgressIndicator {
|
||||
/// The [value] argument can be either null (corresponding to an indeterminate
|
||||
/// progress indicator) or non-null (corresponding to a determinate progress
|
||||
/// indicator). See [value] for details.
|
||||
///
|
||||
/// {@macro flutter.material.progressIndicator.semantics}
|
||||
const LinearProgressIndicator({
|
||||
Key key,
|
||||
double value,
|
||||
Color backgroundColor,
|
||||
Animation<Color> valueColor,
|
||||
}) : super(key: key, value: value, backgroundColor: backgroundColor, valueColor: valueColor);
|
||||
String semanticsLabel,
|
||||
String semanticsValue,
|
||||
}) : super(
|
||||
key: key,
|
||||
value: value,
|
||||
backgroundColor: backgroundColor,
|
||||
valueColor: valueColor,
|
||||
semanticsLabel: semanticsLabel,
|
||||
semanticsValue: semanticsValue,
|
||||
);
|
||||
|
||||
@override
|
||||
_LinearProgressIndicatorState createState() => _LinearProgressIndicatorState();
|
||||
@ -220,18 +278,21 @@ class _LinearProgressIndicatorState extends State<LinearProgressIndicator> with
|
||||
}
|
||||
|
||||
Widget _buildIndicator(BuildContext context, double animationValue, TextDirection textDirection) {
|
||||
return Container(
|
||||
constraints: const BoxConstraints(
|
||||
minWidth: double.infinity,
|
||||
minHeight: _kLinearProgressIndicatorHeight,
|
||||
),
|
||||
child: CustomPaint(
|
||||
painter: _LinearProgressIndicatorPainter(
|
||||
backgroundColor: widget._getBackgroundColor(context),
|
||||
valueColor: widget._getValueColor(context),
|
||||
value: widget.value, // may be null
|
||||
animationValue: animationValue, // ignored if widget.value is not null
|
||||
textDirection: textDirection,
|
||||
return widget._buildSemanticsWrapper(
|
||||
context: context,
|
||||
child: Container(
|
||||
constraints: const BoxConstraints(
|
||||
minWidth: double.infinity,
|
||||
minHeight: _kLinearProgressIndicatorHeight,
|
||||
),
|
||||
child: CustomPaint(
|
||||
painter: _LinearProgressIndicatorPainter(
|
||||
backgroundColor: widget._getBackgroundColor(context),
|
||||
valueColor: widget._getValueColor(context),
|
||||
value: widget.value, // may be null
|
||||
animationValue: animationValue, // ignored if widget.value is not null
|
||||
textDirection: textDirection,
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
@ -335,13 +396,24 @@ class CircularProgressIndicator extends ProgressIndicator {
|
||||
/// The [value] argument can be either null (corresponding to an indeterminate
|
||||
/// progress indicator) or non-null (corresponding to a determinate progress
|
||||
/// indicator). See [value] for details.
|
||||
///
|
||||
/// {@macro flutter.material.progressIndicator.semantics}
|
||||
const CircularProgressIndicator({
|
||||
Key key,
|
||||
double value,
|
||||
Color backgroundColor,
|
||||
Animation<Color> valueColor,
|
||||
this.strokeWidth = 4.0,
|
||||
}) : super(key: key, value: value, backgroundColor: backgroundColor, valueColor: valueColor);
|
||||
String semanticsLabel,
|
||||
String semanticsValue,
|
||||
}) : super(
|
||||
key: key,
|
||||
value: value,
|
||||
backgroundColor: backgroundColor,
|
||||
valueColor: valueColor,
|
||||
semanticsLabel: semanticsLabel,
|
||||
semanticsValue: semanticsValue,
|
||||
);
|
||||
|
||||
/// The width of the line used to draw the circle.
|
||||
final double strokeWidth;
|
||||
@ -397,20 +469,23 @@ class _CircularProgressIndicatorState extends State<CircularProgressIndicator> w
|
||||
}
|
||||
|
||||
Widget _buildIndicator(BuildContext context, double headValue, double tailValue, int stepValue, double rotationValue) {
|
||||
return Container(
|
||||
constraints: const BoxConstraints(
|
||||
minWidth: _kMinCircularProgressIndicatorSize,
|
||||
minHeight: _kMinCircularProgressIndicatorSize,
|
||||
),
|
||||
child: CustomPaint(
|
||||
painter: _CircularProgressIndicatorPainter(
|
||||
valueColor: widget._getValueColor(context),
|
||||
value: widget.value, // may be null
|
||||
headValue: headValue, // remaining arguments are ignored if widget.value is not null
|
||||
tailValue: tailValue,
|
||||
stepValue: stepValue,
|
||||
rotationValue: rotationValue,
|
||||
strokeWidth: widget.strokeWidth,
|
||||
return widget._buildSemanticsWrapper(
|
||||
context: context,
|
||||
child: Container(
|
||||
constraints: const BoxConstraints(
|
||||
minWidth: _kMinCircularProgressIndicatorSize,
|
||||
minHeight: _kMinCircularProgressIndicatorSize,
|
||||
),
|
||||
child: CustomPaint(
|
||||
painter: _CircularProgressIndicatorPainter(
|
||||
valueColor: widget._getValueColor(context),
|
||||
value: widget.value, // may be null
|
||||
headValue: headValue, // remaining arguments are ignored if widget.value is not null
|
||||
tailValue: tailValue,
|
||||
stepValue: stepValue,
|
||||
rotationValue: rotationValue,
|
||||
strokeWidth: widget.strokeWidth,
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
@ -510,18 +585,24 @@ class RefreshProgressIndicator extends CircularProgressIndicator {
|
||||
///
|
||||
/// Rather than creating a refresh progress indicator directly, consider using
|
||||
/// a [RefreshIndicator] together with a [Scrollable] widget.
|
||||
///
|
||||
/// {@macro flutter.material.progressIndicator.semantics}
|
||||
const RefreshProgressIndicator({
|
||||
Key key,
|
||||
double value,
|
||||
Color backgroundColor,
|
||||
Animation<Color> valueColor,
|
||||
double strokeWidth = 2.0, // Different default than CircularProgressIndicator.
|
||||
String semanticsLabel,
|
||||
String semanticsValue,
|
||||
}) : super(
|
||||
key: key,
|
||||
value: value,
|
||||
backgroundColor: backgroundColor,
|
||||
valueColor: valueColor,
|
||||
strokeWidth: strokeWidth,
|
||||
semanticsLabel: semanticsLabel,
|
||||
semanticsValue: semanticsValue,
|
||||
);
|
||||
|
||||
@override
|
||||
@ -547,26 +628,29 @@ class _RefreshProgressIndicatorState extends _CircularProgressIndicatorState {
|
||||
@override
|
||||
Widget _buildIndicator(BuildContext context, double headValue, double tailValue, int stepValue, double rotationValue) {
|
||||
final double arrowheadScale = widget.value == null ? 0.0 : (widget.value * 2.0).clamp(0.0, 1.0);
|
||||
return Container(
|
||||
width: _indicatorSize,
|
||||
height: _indicatorSize,
|
||||
margin: const EdgeInsets.all(4.0), // accommodate the shadow
|
||||
child: Material(
|
||||
type: MaterialType.circle,
|
||||
color: widget.backgroundColor ?? Theme.of(context).canvasColor,
|
||||
elevation: 2.0,
|
||||
child: Padding(
|
||||
padding: const EdgeInsets.all(12.0),
|
||||
child: CustomPaint(
|
||||
painter: _RefreshProgressIndicatorPainter(
|
||||
valueColor: widget._getValueColor(context),
|
||||
value: null, // Draw the indeterminate progress indicator.
|
||||
headValue: headValue,
|
||||
tailValue: tailValue,
|
||||
stepValue: stepValue,
|
||||
rotationValue: rotationValue,
|
||||
strokeWidth: widget.strokeWidth,
|
||||
arrowheadScale: arrowheadScale,
|
||||
return widget._buildSemanticsWrapper(
|
||||
context: context,
|
||||
child: Container(
|
||||
width: _indicatorSize,
|
||||
height: _indicatorSize,
|
||||
margin: const EdgeInsets.all(4.0), // accommodate the shadow
|
||||
child: Material(
|
||||
type: MaterialType.circle,
|
||||
color: widget.backgroundColor ?? Theme.of(context).canvasColor,
|
||||
elevation: 2.0,
|
||||
child: Padding(
|
||||
padding: const EdgeInsets.all(12.0),
|
||||
child: CustomPaint(
|
||||
painter: _RefreshProgressIndicatorPainter(
|
||||
valueColor: widget._getValueColor(context),
|
||||
value: null, // Draw the indeterminate progress indicator.
|
||||
headValue: headValue,
|
||||
tailValue: tailValue,
|
||||
stepValue: stepValue,
|
||||
rotationValue: rotationValue,
|
||||
strokeWidth: widget.strokeWidth,
|
||||
arrowheadScale: arrowheadScale,
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
|
@ -7,6 +7,8 @@ import 'dart:math' as math;
|
||||
|
||||
import 'package:flutter/widgets.dart';
|
||||
|
||||
import 'debug.dart';
|
||||
import 'material_localizations.dart';
|
||||
import 'progress_indicator.dart';
|
||||
import 'theme.dart';
|
||||
|
||||
@ -85,6 +87,11 @@ class RefreshIndicator extends StatefulWidget {
|
||||
/// The [onRefresh], [child], and [notificationPredicate] arguments must be
|
||||
/// non-null. The default
|
||||
/// [displacement] is 40.0 logical pixels.
|
||||
///
|
||||
/// The [semanticsLabel] is used to specify an accessibility label for this widget.
|
||||
/// If it is null, it will be defaulted to [MaterialLocalizations.refreshIndicatorSemanticLabel].
|
||||
/// An empty string may be passed to avoid having anything read by screen reading software.
|
||||
/// The [semanticsValue] may be used to specify progress on the widget. The
|
||||
const RefreshIndicator({
|
||||
Key key,
|
||||
@required this.child,
|
||||
@ -93,6 +100,8 @@ class RefreshIndicator extends StatefulWidget {
|
||||
this.color,
|
||||
this.backgroundColor,
|
||||
this.notificationPredicate = defaultScrollNotificationPredicate,
|
||||
this.semanticsLabel,
|
||||
this.semanticsValue,
|
||||
}) : assert(child != null),
|
||||
assert(onRefresh != null),
|
||||
assert(notificationPredicate != null),
|
||||
@ -131,6 +140,15 @@ class RefreshIndicator extends StatefulWidget {
|
||||
/// else for more complicated layouts.
|
||||
final ScrollNotificationPredicate notificationPredicate;
|
||||
|
||||
/// {@macro flutter.material.progressIndicator.semanticsLabel}
|
||||
///
|
||||
/// This will be defaulted to [MaterialLocalizations.refreshIndicatorSemanticLabel]
|
||||
/// if it is null.
|
||||
final String semanticsLabel;
|
||||
|
||||
/// {@macro flutter.material.progressIndicator.semanticsValue}
|
||||
final String semanticsValue;
|
||||
|
||||
@override
|
||||
RefreshIndicatorState createState() => RefreshIndicatorState();
|
||||
}
|
||||
@ -391,6 +409,7 @@ class RefreshIndicatorState extends State<RefreshIndicator> with TickerProviderS
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
assert(debugCheckHasMaterialLocalizations(context));
|
||||
final Widget child = NotificationListener<ScrollNotification>(
|
||||
key: _key,
|
||||
onNotification: _handleScrollNotification,
|
||||
@ -434,6 +453,8 @@ class RefreshIndicatorState extends State<RefreshIndicator> with TickerProviderS
|
||||
animation: _positionController,
|
||||
builder: (BuildContext context, Widget child) {
|
||||
return RefreshProgressIndicator(
|
||||
semanticsLabel: widget.semanticsLabel ?? MaterialLocalizations.of(context).refreshIndicatorSemanticLabel,
|
||||
semanticsValue: widget.semanticsValue,
|
||||
value: showIndeterminateIndicator ? null : _value.value,
|
||||
valueColor: _valueColor,
|
||||
backgroundColor: widget.backgroundColor,
|
||||
|
@ -13,7 +13,8 @@ void main() {
|
||||
// The "can be constructed" tests that follow are primarily to ensure that any
|
||||
// animations started by the progress indicators are stopped at dispose() time.
|
||||
|
||||
testWidgets('LinearProgressIndicator(value: 0.0) can be constructed', (WidgetTester tester) async {
|
||||
testWidgets('LinearProgressIndicator(value: 0.0) can be constructed and has empty semantics by default', (WidgetTester tester) async {
|
||||
final SemanticsHandle handle = tester.ensureSemantics();
|
||||
await tester.pumpWidget(
|
||||
const Directionality(
|
||||
textDirection: TextDirection.ltr,
|
||||
@ -25,9 +26,13 @@ void main() {
|
||||
),
|
||||
),
|
||||
);
|
||||
|
||||
expect(tester.getSemantics(find.byType(LinearProgressIndicator)), matchesSemantics());
|
||||
handle.dispose();
|
||||
});
|
||||
|
||||
testWidgets('LinearProgressIndicator(value: null) can be constructed', (WidgetTester tester) async {
|
||||
testWidgets('LinearProgressIndicator(value: null) can be constructed and has empty semantics by default', (WidgetTester tester) async {
|
||||
final SemanticsHandle handle = tester.ensureSemantics();
|
||||
await tester.pumpWidget(
|
||||
const Directionality(
|
||||
textDirection: TextDirection.rtl,
|
||||
@ -39,6 +44,9 @@ void main() {
|
||||
),
|
||||
),
|
||||
);
|
||||
|
||||
expect(tester.getSemantics(find.byType(LinearProgressIndicator)), matchesSemantics());
|
||||
handle.dispose();
|
||||
});
|
||||
|
||||
testWidgets('LinearProgressIndicator paint (LTR)', (WidgetTester tester) async {
|
||||
@ -166,20 +174,34 @@ void main() {
|
||||
);
|
||||
});
|
||||
|
||||
testWidgets('CircularProgressIndicator(value: 0.0) can be constructed', (WidgetTester tester) async {
|
||||
testWidgets('CircularProgressIndicator(value: 0.0) can be constructed and has value semantics by default', (WidgetTester tester) async {
|
||||
final SemanticsHandle handle = tester.ensureSemantics();
|
||||
await tester.pumpWidget(
|
||||
const Center(
|
||||
child: CircularProgressIndicator(value: 0.0)
|
||||
const Directionality(
|
||||
textDirection: TextDirection.ltr,
|
||||
child: Center(
|
||||
child: CircularProgressIndicator(value: 0.0)
|
||||
)
|
||||
)
|
||||
);
|
||||
|
||||
expect(tester.getSemantics(find.byType(CircularProgressIndicator)), matchesSemantics(
|
||||
value: '0%',
|
||||
textDirection: TextDirection.ltr,
|
||||
));
|
||||
handle.dispose();
|
||||
});
|
||||
|
||||
testWidgets('CircularProgressIndicator(value: null) can be constructed', (WidgetTester tester) async {
|
||||
testWidgets('CircularProgressIndicator(value: null) can be constructed and has empty semantics by default', (WidgetTester tester) async {
|
||||
final SemanticsHandle handle = tester.ensureSemantics();
|
||||
await tester.pumpWidget(
|
||||
const Center(
|
||||
child: CircularProgressIndicator(value: null)
|
||||
)
|
||||
);
|
||||
|
||||
expect(tester.getSemantics(find.byType(CircularProgressIndicator)), matchesSemantics());
|
||||
handle.dispose();
|
||||
});
|
||||
|
||||
testWidgets('LinearProgressIndicator causes a repaint when it changes', (WidgetTester tester) async {
|
||||
@ -321,4 +343,147 @@ void main() {
|
||||
);
|
||||
expect(tester.binding.transientCallbackCount, 0);
|
||||
});
|
||||
|
||||
testWidgets('LinearProgressIndicator can be made accessible', (WidgetTester tester) async {
|
||||
final SemanticsHandle handle = tester.ensureSemantics();
|
||||
final GlobalKey key = GlobalKey();
|
||||
const String label = 'Label';
|
||||
const String value = '25%';
|
||||
await tester.pumpWidget(
|
||||
Directionality(
|
||||
textDirection: TextDirection.ltr,
|
||||
child: LinearProgressIndicator(
|
||||
key: key,
|
||||
value: 0.25,
|
||||
semanticsLabel: label,
|
||||
semanticsValue: value,
|
||||
),
|
||||
),
|
||||
);
|
||||
|
||||
expect(tester.getSemantics(find.byKey(key)), matchesSemantics(
|
||||
textDirection: TextDirection.ltr,
|
||||
label: label,
|
||||
value: value,
|
||||
));
|
||||
|
||||
handle.dispose();
|
||||
});
|
||||
|
||||
testWidgets('LinearProgressIndicator that is determinate gets default a11y value', (WidgetTester tester) async {
|
||||
final SemanticsHandle handle = tester.ensureSemantics();
|
||||
final GlobalKey key = GlobalKey();
|
||||
const String label = 'Label';
|
||||
await tester.pumpWidget(
|
||||
Directionality(
|
||||
textDirection: TextDirection.ltr,
|
||||
child: LinearProgressIndicator(
|
||||
key: key,
|
||||
value: 0.25,
|
||||
semanticsLabel: label,
|
||||
),
|
||||
),
|
||||
);
|
||||
|
||||
expect(tester.getSemantics(find.byKey(key)), matchesSemantics(
|
||||
textDirection: TextDirection.ltr,
|
||||
label: label,
|
||||
value: '25%',
|
||||
));
|
||||
|
||||
handle.dispose();
|
||||
});
|
||||
|
||||
testWidgets('LinearProgressIndicator that is determinate does not default a11y value when label is null', (WidgetTester tester) async {
|
||||
final SemanticsHandle handle = tester.ensureSemantics();
|
||||
final GlobalKey key = GlobalKey();
|
||||
await tester.pumpWidget(
|
||||
Directionality(
|
||||
textDirection: TextDirection.ltr,
|
||||
child: LinearProgressIndicator(
|
||||
key: key,
|
||||
value: 0.25,
|
||||
),
|
||||
),
|
||||
);
|
||||
|
||||
expect(tester.getSemantics(find.byKey(key)), matchesSemantics());
|
||||
|
||||
handle.dispose();
|
||||
});
|
||||
|
||||
testWidgets('LinearProgressIndicator that is indeterminate does not default a11y value', (WidgetTester tester) async {
|
||||
final SemanticsHandle handle = tester.ensureSemantics();
|
||||
final GlobalKey key = GlobalKey();
|
||||
const String label = 'Progress';
|
||||
await tester.pumpWidget(
|
||||
Directionality(
|
||||
textDirection: TextDirection.ltr,
|
||||
child: LinearProgressIndicator(
|
||||
key: key,
|
||||
value: 0.25,
|
||||
semanticsLabel: label,
|
||||
),
|
||||
),
|
||||
);
|
||||
|
||||
expect(tester.getSemantics(find.byKey(key)), matchesSemantics(
|
||||
textDirection: TextDirection.ltr,
|
||||
label: label,
|
||||
));
|
||||
|
||||
handle.dispose();
|
||||
});
|
||||
|
||||
testWidgets('CircularProgressIndicator can be made accessible', (WidgetTester tester) async {
|
||||
final SemanticsHandle handle = tester.ensureSemantics();
|
||||
final GlobalKey key = GlobalKey();
|
||||
const String label = 'Label';
|
||||
const String value = '25%';
|
||||
await tester.pumpWidget(
|
||||
Directionality(
|
||||
textDirection: TextDirection.ltr,
|
||||
child: CircularProgressIndicator(
|
||||
key: key,
|
||||
value: 0.25,
|
||||
semanticsLabel: label,
|
||||
semanticsValue: value,
|
||||
),
|
||||
),
|
||||
);
|
||||
|
||||
expect(tester.getSemantics(find.byKey(key)), matchesSemantics(
|
||||
textDirection: TextDirection.ltr,
|
||||
label: label,
|
||||
value: value,
|
||||
));
|
||||
|
||||
handle.dispose();
|
||||
});
|
||||
|
||||
testWidgets('RefreshProgressIndicator can be made accessible', (WidgetTester tester) async {
|
||||
final SemanticsHandle handle = tester.ensureSemantics();
|
||||
final GlobalKey key = GlobalKey();
|
||||
const String label = 'Label';
|
||||
const String value = '25%';
|
||||
await tester.pumpWidget(
|
||||
Directionality(
|
||||
textDirection: TextDirection.ltr,
|
||||
child: RefreshProgressIndicator(
|
||||
key: key,
|
||||
semanticsLabel: label,
|
||||
semanticsValue: value,
|
||||
),
|
||||
),
|
||||
);
|
||||
|
||||
expect(tester.getSemantics(find.byKey(key)), matchesSemantics(
|
||||
textDirection: TextDirection.ltr,
|
||||
label: label,
|
||||
value: value,
|
||||
));
|
||||
|
||||
|
||||
handle.dispose();
|
||||
});
|
||||
}
|
||||
|
@ -23,6 +23,7 @@ Future<void> holdRefresh() {
|
||||
void main() {
|
||||
testWidgets('RefreshIndicator', (WidgetTester tester) async {
|
||||
refreshCalled = false;
|
||||
final SemanticsHandle handle = tester.ensureSemantics();
|
||||
await tester.pumpWidget(
|
||||
MaterialApp(
|
||||
home: RefreshIndicator(
|
||||
@ -42,10 +43,16 @@ void main() {
|
||||
|
||||
await tester.fling(find.text('A'), const Offset(0.0, 300.0), 1000.0);
|
||||
await tester.pump();
|
||||
|
||||
expect(tester.getSemantics(find.byType(RefreshProgressIndicator)), matchesSemantics(
|
||||
label: 'Refresh',
|
||||
));
|
||||
|
||||
await tester.pump(const Duration(seconds: 1)); // finish the scroll animation
|
||||
await tester.pump(const Duration(seconds: 1)); // finish the indicator settle animation
|
||||
await tester.pump(const Duration(seconds: 1)); // finish the indicator hide animation
|
||||
expect(refreshCalled, true);
|
||||
handle.dispose();
|
||||
});
|
||||
|
||||
testWidgets('Refresh Indicator - nested', (WidgetTester tester) async {
|
||||
|
@ -131,6 +131,9 @@ class MaterialLocalizationAr extends GlobalMaterialLocalizations {
|
||||
@override
|
||||
String get previousPageTooltip => r'الصفحة السابقة';
|
||||
|
||||
@override
|
||||
String get refreshIndicatorSemanticLabel => r'TBD';
|
||||
|
||||
@override
|
||||
String get remainingTextFieldCharacterCountFew => r'$remainingCount أحرف متبقية';
|
||||
|
||||
@ -332,6 +335,9 @@ class MaterialLocalizationBg extends GlobalMaterialLocalizations {
|
||||
@override
|
||||
String get previousPageTooltip => r'Предишната страница';
|
||||
|
||||
@override
|
||||
String get refreshIndicatorSemanticLabel => r'TBD';
|
||||
|
||||
@override
|
||||
String get remainingTextFieldCharacterCountFew => null;
|
||||
|
||||
@ -533,6 +539,9 @@ class MaterialLocalizationBs extends GlobalMaterialLocalizations {
|
||||
@override
|
||||
String get previousPageTooltip => r'Prethodna stranica';
|
||||
|
||||
@override
|
||||
String get refreshIndicatorSemanticLabel => r'TBD';
|
||||
|
||||
@override
|
||||
String get remainingTextFieldCharacterCountFew => r'Preostala su $remainingCount znaka';
|
||||
|
||||
@ -734,6 +743,9 @@ class MaterialLocalizationCa extends GlobalMaterialLocalizations {
|
||||
@override
|
||||
String get previousPageTooltip => r'Pàgina anterior';
|
||||
|
||||
@override
|
||||
String get refreshIndicatorSemanticLabel => r'TBD';
|
||||
|
||||
@override
|
||||
String get remainingTextFieldCharacterCountFew => null;
|
||||
|
||||
@ -935,6 +947,9 @@ class MaterialLocalizationCs extends GlobalMaterialLocalizations {
|
||||
@override
|
||||
String get previousPageTooltip => r'Předchozí stránka';
|
||||
|
||||
@override
|
||||
String get refreshIndicatorSemanticLabel => r'TBD';
|
||||
|
||||
@override
|
||||
String get remainingTextFieldCharacterCountFew => r'Zbývají $remainingCount znaky';
|
||||
|
||||
@ -1136,6 +1151,9 @@ class MaterialLocalizationDa extends GlobalMaterialLocalizations {
|
||||
@override
|
||||
String get previousPageTooltip => r'Forrige side';
|
||||
|
||||
@override
|
||||
String get refreshIndicatorSemanticLabel => r'TBD';
|
||||
|
||||
@override
|
||||
String get remainingTextFieldCharacterCountFew => null;
|
||||
|
||||
@ -1337,6 +1355,9 @@ class MaterialLocalizationDe extends GlobalMaterialLocalizations {
|
||||
@override
|
||||
String get previousPageTooltip => r'Vorherige Seite';
|
||||
|
||||
@override
|
||||
String get refreshIndicatorSemanticLabel => r'TBD';
|
||||
|
||||
@override
|
||||
String get remainingTextFieldCharacterCountFew => null;
|
||||
|
||||
@ -1568,6 +1589,9 @@ class MaterialLocalizationEl extends GlobalMaterialLocalizations {
|
||||
@override
|
||||
String get previousPageTooltip => r'Προηγούμενη σελίδα';
|
||||
|
||||
@override
|
||||
String get refreshIndicatorSemanticLabel => r'TBD';
|
||||
|
||||
@override
|
||||
String get remainingTextFieldCharacterCountFew => null;
|
||||
|
||||
@ -1769,6 +1793,9 @@ class MaterialLocalizationEn extends GlobalMaterialLocalizations {
|
||||
@override
|
||||
String get previousPageTooltip => r'Previous page';
|
||||
|
||||
@override
|
||||
String get refreshIndicatorSemanticLabel => r'Refresh';
|
||||
|
||||
@override
|
||||
String get remainingTextFieldCharacterCountFew => null;
|
||||
|
||||
@ -2273,6 +2300,9 @@ class MaterialLocalizationEs extends GlobalMaterialLocalizations {
|
||||
@override
|
||||
String get previousPageTooltip => r'Página anterior';
|
||||
|
||||
@override
|
||||
String get refreshIndicatorSemanticLabel => r'TBD';
|
||||
|
||||
@override
|
||||
String get remainingTextFieldCharacterCountFew => null;
|
||||
|
||||
@ -4097,6 +4127,9 @@ class MaterialLocalizationEt extends GlobalMaterialLocalizations {
|
||||
@override
|
||||
String get previousPageTooltip => r'Eelmine leht';
|
||||
|
||||
@override
|
||||
String get refreshIndicatorSemanticLabel => r'TBD';
|
||||
|
||||
@override
|
||||
String get remainingTextFieldCharacterCountFew => null;
|
||||
|
||||
@ -4298,6 +4331,9 @@ class MaterialLocalizationFa extends GlobalMaterialLocalizations {
|
||||
@override
|
||||
String get previousPageTooltip => r'صفحه قبل';
|
||||
|
||||
@override
|
||||
String get refreshIndicatorSemanticLabel => r'TBD';
|
||||
|
||||
@override
|
||||
String get remainingTextFieldCharacterCountFew => null;
|
||||
|
||||
@ -4499,6 +4535,9 @@ class MaterialLocalizationFi extends GlobalMaterialLocalizations {
|
||||
@override
|
||||
String get previousPageTooltip => r'Edellinen sivu';
|
||||
|
||||
@override
|
||||
String get refreshIndicatorSemanticLabel => r'TBD';
|
||||
|
||||
@override
|
||||
String get remainingTextFieldCharacterCountFew => null;
|
||||
|
||||
@ -4700,6 +4739,9 @@ class MaterialLocalizationFil extends GlobalMaterialLocalizations {
|
||||
@override
|
||||
String get previousPageTooltip => r'Nakaraang page';
|
||||
|
||||
@override
|
||||
String get refreshIndicatorSemanticLabel => r'TBD';
|
||||
|
||||
@override
|
||||
String get remainingTextFieldCharacterCountFew => null;
|
||||
|
||||
@ -4901,6 +4943,9 @@ class MaterialLocalizationFr extends GlobalMaterialLocalizations {
|
||||
@override
|
||||
String get previousPageTooltip => r'Page précédente';
|
||||
|
||||
@override
|
||||
String get refreshIndicatorSemanticLabel => r'TBD';
|
||||
|
||||
@override
|
||||
String get remainingTextFieldCharacterCountFew => null;
|
||||
|
||||
@ -5129,6 +5174,9 @@ class MaterialLocalizationGsw extends GlobalMaterialLocalizations {
|
||||
@override
|
||||
String get previousPageTooltip => r'Vorherige Seite';
|
||||
|
||||
@override
|
||||
String get refreshIndicatorSemanticLabel => r'TBD';
|
||||
|
||||
@override
|
||||
String get remainingTextFieldCharacterCountFew => null;
|
||||
|
||||
@ -5330,6 +5378,9 @@ class MaterialLocalizationHe extends GlobalMaterialLocalizations {
|
||||
@override
|
||||
String get previousPageTooltip => r'הדף הקודם';
|
||||
|
||||
@override
|
||||
String get refreshIndicatorSemanticLabel => r'TBD';
|
||||
|
||||
@override
|
||||
String get remainingTextFieldCharacterCountFew => null;
|
||||
|
||||
@ -5531,6 +5582,9 @@ class MaterialLocalizationHi extends GlobalMaterialLocalizations {
|
||||
@override
|
||||
String get previousPageTooltip => r'पिछला पेज';
|
||||
|
||||
@override
|
||||
String get refreshIndicatorSemanticLabel => r'TBD';
|
||||
|
||||
@override
|
||||
String get remainingTextFieldCharacterCountFew => null;
|
||||
|
||||
@ -5732,6 +5786,9 @@ class MaterialLocalizationHr extends GlobalMaterialLocalizations {
|
||||
@override
|
||||
String get previousPageTooltip => r'Prethodna stranica';
|
||||
|
||||
@override
|
||||
String get refreshIndicatorSemanticLabel => r'TBD';
|
||||
|
||||
@override
|
||||
String get remainingTextFieldCharacterCountFew => r'Preostala su $remainingCount znaka';
|
||||
|
||||
@ -5933,6 +5990,9 @@ class MaterialLocalizationHu extends GlobalMaterialLocalizations {
|
||||
@override
|
||||
String get previousPageTooltip => r'Előző oldal';
|
||||
|
||||
@override
|
||||
String get refreshIndicatorSemanticLabel => r'TBD';
|
||||
|
||||
@override
|
||||
String get remainingTextFieldCharacterCountFew => null;
|
||||
|
||||
@ -6134,6 +6194,9 @@ class MaterialLocalizationId extends GlobalMaterialLocalizations {
|
||||
@override
|
||||
String get previousPageTooltip => r'Halaman sebelumnya';
|
||||
|
||||
@override
|
||||
String get refreshIndicatorSemanticLabel => r'TBD';
|
||||
|
||||
@override
|
||||
String get remainingTextFieldCharacterCountFew => null;
|
||||
|
||||
@ -6335,6 +6398,9 @@ class MaterialLocalizationIt extends GlobalMaterialLocalizations {
|
||||
@override
|
||||
String get previousPageTooltip => r'Pagina precedente';
|
||||
|
||||
@override
|
||||
String get refreshIndicatorSemanticLabel => r'TBD';
|
||||
|
||||
@override
|
||||
String get remainingTextFieldCharacterCountFew => null;
|
||||
|
||||
@ -6536,6 +6602,9 @@ class MaterialLocalizationJa extends GlobalMaterialLocalizations {
|
||||
@override
|
||||
String get previousPageTooltip => r'前のページ';
|
||||
|
||||
@override
|
||||
String get refreshIndicatorSemanticLabel => r'TBD';
|
||||
|
||||
@override
|
||||
String get remainingTextFieldCharacterCountFew => null;
|
||||
|
||||
@ -6737,6 +6806,9 @@ class MaterialLocalizationKm extends GlobalMaterialLocalizations {
|
||||
@override
|
||||
String get previousPageTooltip => r'ទំព័រមុន';
|
||||
|
||||
@override
|
||||
String get refreshIndicatorSemanticLabel => r'TBD';
|
||||
|
||||
@override
|
||||
String get remainingTextFieldCharacterCountFew => null;
|
||||
|
||||
@ -6938,6 +7010,9 @@ class MaterialLocalizationKo extends GlobalMaterialLocalizations {
|
||||
@override
|
||||
String get previousPageTooltip => r'이전 페이지';
|
||||
|
||||
@override
|
||||
String get refreshIndicatorSemanticLabel => r'TBD';
|
||||
|
||||
@override
|
||||
String get remainingTextFieldCharacterCountFew => null;
|
||||
|
||||
@ -7139,6 +7214,9 @@ class MaterialLocalizationLt extends GlobalMaterialLocalizations {
|
||||
@override
|
||||
String get previousPageTooltip => r'Ankstesnis puslapis';
|
||||
|
||||
@override
|
||||
String get refreshIndicatorSemanticLabel => r'TBD';
|
||||
|
||||
@override
|
||||
String get remainingTextFieldCharacterCountFew => r'Liko $remainingCount simboliai';
|
||||
|
||||
@ -7340,6 +7418,9 @@ class MaterialLocalizationLv extends GlobalMaterialLocalizations {
|
||||
@override
|
||||
String get previousPageTooltip => r'Iepriekšējā lapa';
|
||||
|
||||
@override
|
||||
String get refreshIndicatorSemanticLabel => r'TBD';
|
||||
|
||||
@override
|
||||
String get remainingTextFieldCharacterCountFew => null;
|
||||
|
||||
@ -7541,6 +7622,9 @@ class MaterialLocalizationMn extends GlobalMaterialLocalizations {
|
||||
@override
|
||||
String get previousPageTooltip => r'Өмнөх хуудас';
|
||||
|
||||
@override
|
||||
String get refreshIndicatorSemanticLabel => r'TBD';
|
||||
|
||||
@override
|
||||
String get remainingTextFieldCharacterCountFew => null;
|
||||
|
||||
@ -7943,6 +8027,9 @@ class MaterialLocalizationMs extends GlobalMaterialLocalizations {
|
||||
@override
|
||||
String get previousPageTooltip => r'Halaman sebelumnya';
|
||||
|
||||
@override
|
||||
String get refreshIndicatorSemanticLabel => r'TBD';
|
||||
|
||||
@override
|
||||
String get remainingTextFieldCharacterCountFew => null;
|
||||
|
||||
@ -8144,6 +8231,9 @@ class MaterialLocalizationNb extends GlobalMaterialLocalizations {
|
||||
@override
|
||||
String get previousPageTooltip => r'Forrige side';
|
||||
|
||||
@override
|
||||
String get refreshIndicatorSemanticLabel => r'TBD';
|
||||
|
||||
@override
|
||||
String get remainingTextFieldCharacterCountFew => null;
|
||||
|
||||
@ -8345,6 +8435,9 @@ class MaterialLocalizationNl extends GlobalMaterialLocalizations {
|
||||
@override
|
||||
String get previousPageTooltip => r'Vorige pagina';
|
||||
|
||||
@override
|
||||
String get refreshIndicatorSemanticLabel => r'TBD';
|
||||
|
||||
@override
|
||||
String get remainingTextFieldCharacterCountFew => null;
|
||||
|
||||
@ -8546,6 +8639,9 @@ class MaterialLocalizationPl extends GlobalMaterialLocalizations {
|
||||
@override
|
||||
String get previousPageTooltip => r'Poprzednia strona';
|
||||
|
||||
@override
|
||||
String get refreshIndicatorSemanticLabel => r'TBD';
|
||||
|
||||
@override
|
||||
String get remainingTextFieldCharacterCountFew => r'Jeszcze $remainingCount znaki';
|
||||
|
||||
@ -8747,6 +8843,9 @@ class MaterialLocalizationPs extends GlobalMaterialLocalizations {
|
||||
@override
|
||||
String get previousPageTooltip => r'مخکینی مخ';
|
||||
|
||||
@override
|
||||
String get refreshIndicatorSemanticLabel => r'TBD';
|
||||
|
||||
@override
|
||||
String get remainingTextFieldCharacterCountFew => null;
|
||||
|
||||
@ -8948,6 +9047,9 @@ class MaterialLocalizationPt extends GlobalMaterialLocalizations {
|
||||
@override
|
||||
String get previousPageTooltip => r'Página anterior';
|
||||
|
||||
@override
|
||||
String get refreshIndicatorSemanticLabel => r'TBD';
|
||||
|
||||
@override
|
||||
String get remainingTextFieldCharacterCountFew => null;
|
||||
|
||||
@ -9233,6 +9335,9 @@ class MaterialLocalizationRo extends GlobalMaterialLocalizations {
|
||||
@override
|
||||
String get previousPageTooltip => r'Pagina anterioară';
|
||||
|
||||
@override
|
||||
String get refreshIndicatorSemanticLabel => r'TBD';
|
||||
|
||||
@override
|
||||
String get remainingTextFieldCharacterCountFew => r'$remainingCount caractere rămase';
|
||||
|
||||
@ -9434,6 +9539,9 @@ class MaterialLocalizationRu extends GlobalMaterialLocalizations {
|
||||
@override
|
||||
String get previousPageTooltip => r'Предыдущая страница';
|
||||
|
||||
@override
|
||||
String get refreshIndicatorSemanticLabel => r'TBD';
|
||||
|
||||
@override
|
||||
String get remainingTextFieldCharacterCountFew => r'Осталось $remainingCount символа';
|
||||
|
||||
@ -9635,6 +9743,9 @@ class MaterialLocalizationSk extends GlobalMaterialLocalizations {
|
||||
@override
|
||||
String get previousPageTooltip => r'Predchádzajúca stránka';
|
||||
|
||||
@override
|
||||
String get refreshIndicatorSemanticLabel => r'TBD';
|
||||
|
||||
@override
|
||||
String get remainingTextFieldCharacterCountFew => r'Zostávajú $remainingCount znaky';
|
||||
|
||||
@ -9836,6 +9947,9 @@ class MaterialLocalizationSl extends GlobalMaterialLocalizations {
|
||||
@override
|
||||
String get previousPageTooltip => r'Prejšnja stran';
|
||||
|
||||
@override
|
||||
String get refreshIndicatorSemanticLabel => r'TBD';
|
||||
|
||||
@override
|
||||
String get remainingTextFieldCharacterCountFew => r'Še $remainingCount znaki';
|
||||
|
||||
@ -10037,6 +10151,9 @@ class MaterialLocalizationSr extends GlobalMaterialLocalizations {
|
||||
@override
|
||||
String get previousPageTooltip => r'Претходна страница';
|
||||
|
||||
@override
|
||||
String get refreshIndicatorSemanticLabel => r'TBD';
|
||||
|
||||
@override
|
||||
String get remainingTextFieldCharacterCountFew => r'Преостала су $remainingCount знака';
|
||||
|
||||
@ -10439,6 +10556,9 @@ class MaterialLocalizationSv extends GlobalMaterialLocalizations {
|
||||
@override
|
||||
String get previousPageTooltip => r'Föregående sida';
|
||||
|
||||
@override
|
||||
String get refreshIndicatorSemanticLabel => r'TBD';
|
||||
|
||||
@override
|
||||
String get remainingTextFieldCharacterCountFew => null;
|
||||
|
||||
@ -10640,6 +10760,9 @@ class MaterialLocalizationTh extends GlobalMaterialLocalizations {
|
||||
@override
|
||||
String get previousPageTooltip => r'หน้าก่อน';
|
||||
|
||||
@override
|
||||
String get refreshIndicatorSemanticLabel => r'TBD';
|
||||
|
||||
@override
|
||||
String get remainingTextFieldCharacterCountFew => null;
|
||||
|
||||
@ -10841,6 +10964,9 @@ class MaterialLocalizationTl extends GlobalMaterialLocalizations {
|
||||
@override
|
||||
String get previousPageTooltip => r'Nakaraang page';
|
||||
|
||||
@override
|
||||
String get refreshIndicatorSemanticLabel => r'TBD';
|
||||
|
||||
@override
|
||||
String get remainingTextFieldCharacterCountFew => null;
|
||||
|
||||
@ -11042,6 +11168,9 @@ class MaterialLocalizationTr extends GlobalMaterialLocalizations {
|
||||
@override
|
||||
String get previousPageTooltip => r'Önceki sayfa';
|
||||
|
||||
@override
|
||||
String get refreshIndicatorSemanticLabel => r'TBD';
|
||||
|
||||
@override
|
||||
String get remainingTextFieldCharacterCountFew => null;
|
||||
|
||||
@ -11243,6 +11372,9 @@ class MaterialLocalizationUk extends GlobalMaterialLocalizations {
|
||||
@override
|
||||
String get previousPageTooltip => r'Попередня сторінка';
|
||||
|
||||
@override
|
||||
String get refreshIndicatorSemanticLabel => r'TBD';
|
||||
|
||||
@override
|
||||
String get remainingTextFieldCharacterCountFew => r'Залишилося $remainingCount символи';
|
||||
|
||||
@ -11444,6 +11576,9 @@ class MaterialLocalizationUr extends GlobalMaterialLocalizations {
|
||||
@override
|
||||
String get previousPageTooltip => r'گزشتہ صفحہ';
|
||||
|
||||
@override
|
||||
String get refreshIndicatorSemanticLabel => r'TBD';
|
||||
|
||||
@override
|
||||
String get remainingTextFieldCharacterCountFew => null;
|
||||
|
||||
@ -11645,6 +11780,9 @@ class MaterialLocalizationVi extends GlobalMaterialLocalizations {
|
||||
@override
|
||||
String get previousPageTooltip => r'Trang trước';
|
||||
|
||||
@override
|
||||
String get refreshIndicatorSemanticLabel => r'TBD';
|
||||
|
||||
@override
|
||||
String get remainingTextFieldCharacterCountFew => null;
|
||||
|
||||
@ -11846,6 +11984,9 @@ class MaterialLocalizationZh extends GlobalMaterialLocalizations {
|
||||
@override
|
||||
String get previousPageTooltip => r'上一页';
|
||||
|
||||
@override
|
||||
String get refreshIndicatorSemanticLabel => r'TBD';
|
||||
|
||||
@override
|
||||
String get remainingTextFieldCharacterCountFew => null;
|
||||
|
||||
|
@ -57,5 +57,6 @@
|
||||
"collapsedIconTapHint": "توسيع",
|
||||
"remainingTextFieldCharacterCountZero": "لا أحرف متبقية",
|
||||
"remainingTextFieldCharacterCountOne": "حرف واحد متبقٍ",
|
||||
"remainingTextFieldCharacterCountOther": "$remainingCount حرف متبقٍ"
|
||||
"remainingTextFieldCharacterCountOther": "$remainingCount حرف متبقٍ",
|
||||
"refreshIndicatorSemanticLabel": "TBD"
|
||||
}
|
||||
|
@ -50,5 +50,6 @@
|
||||
"collapsedIconTapHint": "Разгъване",
|
||||
"remainingTextFieldCharacterCountZero": "TBD",
|
||||
"remainingTextFieldCharacterCountOne": "Остава 1 знак",
|
||||
"remainingTextFieldCharacterCountOther": "Остават $remainingCount знака"
|
||||
"remainingTextFieldCharacterCountOther": "Остават $remainingCount знака",
|
||||
"refreshIndicatorSemanticLabel": "TBD"
|
||||
}
|
||||
|
@ -52,5 +52,6 @@
|
||||
"collapsedIconTapHint": "Proširi",
|
||||
"remainingTextFieldCharacterCountZero": "TBD",
|
||||
"remainingTextFieldCharacterCountOne": "Preostao je 1 znak",
|
||||
"remainingTextFieldCharacterCountOther": "Preostalo je $remainingCount znakova"
|
||||
"remainingTextFieldCharacterCountOther": "Preostalo je $remainingCount znakova",
|
||||
"refreshIndicatorSemanticLabel": "TBD"
|
||||
}
|
||||
|
@ -50,5 +50,6 @@
|
||||
"collapsedIconTapHint": "Desplega",
|
||||
"remainingTextFieldCharacterCountZero": "TBD",
|
||||
"remainingTextFieldCharacterCountOne": "Queda 1 caràcter",
|
||||
"remainingTextFieldCharacterCountOther": "Queden $remainingCount caràcters"
|
||||
"remainingTextFieldCharacterCountOther": "Queden $remainingCount caràcters",
|
||||
"refreshIndicatorSemanticLabel": "TBD"
|
||||
}
|
||||
|
@ -54,5 +54,6 @@
|
||||
"collapsedIconTapHint": "Rozbalit",
|
||||
"remainingTextFieldCharacterCountZero": "TBD",
|
||||
"remainingTextFieldCharacterCountOne": "Zbývá 1 znak",
|
||||
"remainingTextFieldCharacterCountOther": "Zbývá $remainingCount znaků"
|
||||
"remainingTextFieldCharacterCountOther": "Zbývá $remainingCount znaků",
|
||||
"refreshIndicatorSemanticLabel": "TBD"
|
||||
}
|
||||
|
@ -50,5 +50,6 @@
|
||||
"collapsedIconTapHint": "Udvid",
|
||||
"remainingTextFieldCharacterCountZero": "TBD",
|
||||
"remainingTextFieldCharacterCountOne": "Ét tegn tilbage",
|
||||
"remainingTextFieldCharacterCountOther": "$remainingCount tegn tilbage"
|
||||
"remainingTextFieldCharacterCountOther": "$remainingCount tegn tilbage",
|
||||
"refreshIndicatorSemanticLabel": "TBD"
|
||||
}
|
||||
|
@ -51,5 +51,6 @@
|
||||
"collapsedIconTapHint": "Maximieren",
|
||||
"remainingTextFieldCharacterCountZero": "TBD",
|
||||
"remainingTextFieldCharacterCountOne": "Noch 1 Zeichen",
|
||||
"remainingTextFieldCharacterCountOther": "Noch $remainingCount Zeichen"
|
||||
"remainingTextFieldCharacterCountOther": "Noch $remainingCount Zeichen",
|
||||
"refreshIndicatorSemanticLabel": "TBD"
|
||||
}
|
||||
|
@ -50,5 +50,6 @@
|
||||
"collapsedIconTapHint": "Maximieren",
|
||||
"remainingTextFieldCharacterCountZero": "TBD",
|
||||
"remainingTextFieldCharacterCountOne": "Noch 1 Zeichen",
|
||||
"remainingTextFieldCharacterCountOther": "Noch $remainingCount Zeichen"
|
||||
"remainingTextFieldCharacterCountOther": "Noch $remainingCount Zeichen",
|
||||
"refreshIndicatorSemanticLabel": "TBD"
|
||||
}
|
||||
|
@ -50,5 +50,6 @@
|
||||
"collapsedIconTapHint": "Ανάπτυξη",
|
||||
"remainingTextFieldCharacterCountZero": "TBD",
|
||||
"remainingTextFieldCharacterCountOne": "απομένει 1 χαρακτήρας",
|
||||
"remainingTextFieldCharacterCountOther": "απομένουν $remainingCount χαρακτήρες"
|
||||
"remainingTextFieldCharacterCountOther": "απομένουν $remainingCount χαρακτήρες",
|
||||
"refreshIndicatorSemanticLabel": "TBD"
|
||||
}
|
||||
|
@ -254,5 +254,10 @@
|
||||
"@remainingTextFieldCharacterCount": {
|
||||
"description": "The label for the TextField's character counter. remainingCharacters is a integer representing how many more characters the user can type into the text field before using up a given budget. All values are greater than or equal to zero.",
|
||||
"plural": "remainingCount"
|
||||
},
|
||||
|
||||
"refreshIndicatorSemanticLabel": "Refresh",
|
||||
"@refreshIndicatorSemanticLabel": {
|
||||
"description": "The verb which describes what happens when a RefreshIndicator is displayed on screen. This is used by TalkBack on Android to announce that a refresh is happening."
|
||||
}
|
||||
}
|
||||
|
@ -50,5 +50,6 @@
|
||||
"collapsedIconTapHint": "Expand",
|
||||
"remainingTextFieldCharacterCountZero": "No characters remaining",
|
||||
"remainingTextFieldCharacterCountOne": "1 character remaining",
|
||||
"remainingTextFieldCharacterCountOther": "$remainingCount characters remaining"
|
||||
"remainingTextFieldCharacterCountOther": "$remainingCount characters remaining",
|
||||
"refreshIndicatorSemanticLabel": "Refresh"
|
||||
}
|
||||
|
@ -50,5 +50,6 @@
|
||||
"collapsedIconTapHint": "Expand",
|
||||
"remainingTextFieldCharacterCountZero": "No characters remaining",
|
||||
"remainingTextFieldCharacterCountOne": "1 character remaining",
|
||||
"remainingTextFieldCharacterCountOther": "$remainingCount characters remaining"
|
||||
"remainingTextFieldCharacterCountOther": "$remainingCount characters remaining",
|
||||
"refreshIndicatorSemanticLabel": "Refresh"
|
||||
}
|
||||
|
@ -50,5 +50,6 @@
|
||||
"collapsedIconTapHint": "Expand",
|
||||
"remainingTextFieldCharacterCountZero": "No characters remaining",
|
||||
"remainingTextFieldCharacterCountOne": "1 character remaining",
|
||||
"remainingTextFieldCharacterCountOther": "$remainingCount characters remaining"
|
||||
"remainingTextFieldCharacterCountOther": "$remainingCount characters remaining",
|
||||
"refreshIndicatorSemanticLabel": "Refresh"
|
||||
}
|
||||
|
@ -50,5 +50,6 @@
|
||||
"collapsedIconTapHint": "Expand",
|
||||
"remainingTextFieldCharacterCountZero": "No characters remaining",
|
||||
"remainingTextFieldCharacterCountOne": "1 character remaining",
|
||||
"remainingTextFieldCharacterCountOther": "$remainingCount characters remaining"
|
||||
"remainingTextFieldCharacterCountOther": "$remainingCount characters remaining",
|
||||
"refreshIndicatorSemanticLabel": "Refresh"
|
||||
}
|
||||
|
@ -50,5 +50,6 @@
|
||||
"collapsedIconTapHint": "Expand",
|
||||
"remainingTextFieldCharacterCountZero": "No characters remaining",
|
||||
"remainingTextFieldCharacterCountOne": "1 character remaining",
|
||||
"remainingTextFieldCharacterCountOther": "$remainingCount characters remaining"
|
||||
"remainingTextFieldCharacterCountOther": "$remainingCount characters remaining",
|
||||
"refreshIndicatorSemanticLabel": "Refresh"
|
||||
}
|
||||
|
@ -50,5 +50,6 @@
|
||||
"collapsedIconTapHint": "Expand",
|
||||
"remainingTextFieldCharacterCountZero": "No characters remaining",
|
||||
"remainingTextFieldCharacterCountOne": "1 character remaining",
|
||||
"remainingTextFieldCharacterCountOther": "$remainingCount characters remaining"
|
||||
"remainingTextFieldCharacterCountOther": "$remainingCount characters remaining",
|
||||
"refreshIndicatorSemanticLabel": "Refresh"
|
||||
}
|
||||
|
@ -50,5 +50,6 @@
|
||||
"collapsedIconTapHint": "Expand",
|
||||
"remainingTextFieldCharacterCountZero": "No characters remaining",
|
||||
"remainingTextFieldCharacterCountOne": "1 character remaining",
|
||||
"remainingTextFieldCharacterCountOther": "$remainingCount characters remaining"
|
||||
"remainingTextFieldCharacterCountOther": "$remainingCount characters remaining",
|
||||
"refreshIndicatorSemanticLabel": "Refresh"
|
||||
}
|
||||
|
@ -51,5 +51,6 @@
|
||||
"collapsedIconTapHint": "Mostrar",
|
||||
"remainingTextFieldCharacterCountZero": "TBD",
|
||||
"remainingTextFieldCharacterCountOne": "Queda 1 carácter.",
|
||||
"remainingTextFieldCharacterCountOther": "Quedan $remainingCount caracteres"
|
||||
"remainingTextFieldCharacterCountOther": "Quedan $remainingCount caracteres",
|
||||
"refreshIndicatorSemanticLabel": "TBD"
|
||||
}
|
||||
|
@ -50,5 +50,6 @@
|
||||
"collapsedIconTapHint": "Expandir",
|
||||
"remainingTextFieldCharacterCountZero": "TBD",
|
||||
"remainingTextFieldCharacterCountOne": "Queda 1 carácter",
|
||||
"remainingTextFieldCharacterCountOther": "Quedan $remainingCount caracteres"
|
||||
"remainingTextFieldCharacterCountOther": "Quedan $remainingCount caracteres",
|
||||
"refreshIndicatorSemanticLabel": "TBD"
|
||||
}
|
||||
|
@ -50,5 +50,6 @@
|
||||
"collapsedIconTapHint": "Expandir",
|
||||
"remainingTextFieldCharacterCountZero": "TBD",
|
||||
"remainingTextFieldCharacterCountOne": "Queda 1 carácter",
|
||||
"remainingTextFieldCharacterCountOther": "Quedan $remainingCount caracteres"
|
||||
"remainingTextFieldCharacterCountOther": "Quedan $remainingCount caracteres",
|
||||
"refreshIndicatorSemanticLabel": "TBD"
|
||||
}
|
||||
|
@ -50,5 +50,6 @@
|
||||
"collapsedIconTapHint": "Expandir",
|
||||
"remainingTextFieldCharacterCountZero": "TBD",
|
||||
"remainingTextFieldCharacterCountOne": "Queda 1 carácter",
|
||||
"remainingTextFieldCharacterCountOther": "Quedan $remainingCount caracteres"
|
||||
"remainingTextFieldCharacterCountOther": "Quedan $remainingCount caracteres",
|
||||
"refreshIndicatorSemanticLabel": "TBD"
|
||||
}
|
||||
|
@ -50,5 +50,6 @@
|
||||
"collapsedIconTapHint": "Expandir",
|
||||
"remainingTextFieldCharacterCountZero": "TBD",
|
||||
"remainingTextFieldCharacterCountOne": "Queda 1 carácter",
|
||||
"remainingTextFieldCharacterCountOther": "Quedan $remainingCount caracteres"
|
||||
"remainingTextFieldCharacterCountOther": "Quedan $remainingCount caracteres",
|
||||
"refreshIndicatorSemanticLabel": "TBD"
|
||||
}
|
||||
|
@ -50,5 +50,6 @@
|
||||
"collapsedIconTapHint": "Expandir",
|
||||
"remainingTextFieldCharacterCountZero": "TBD",
|
||||
"remainingTextFieldCharacterCountOne": "Queda 1 carácter",
|
||||
"remainingTextFieldCharacterCountOther": "Quedan $remainingCount caracteres"
|
||||
"remainingTextFieldCharacterCountOther": "Quedan $remainingCount caracteres",
|
||||
"refreshIndicatorSemanticLabel": "TBD"
|
||||
}
|
||||
|
@ -50,5 +50,6 @@
|
||||
"collapsedIconTapHint": "Expandir",
|
||||
"remainingTextFieldCharacterCountZero": "TBD",
|
||||
"remainingTextFieldCharacterCountOne": "Queda 1 carácter",
|
||||
"remainingTextFieldCharacterCountOther": "Quedan $remainingCount caracteres"
|
||||
"remainingTextFieldCharacterCountOther": "Quedan $remainingCount caracteres",
|
||||
"refreshIndicatorSemanticLabel": "TBD"
|
||||
}
|
||||
|
@ -50,5 +50,6 @@
|
||||
"collapsedIconTapHint": "Expandir",
|
||||
"remainingTextFieldCharacterCountZero": "TBD",
|
||||
"remainingTextFieldCharacterCountOne": "Queda 1 carácter",
|
||||
"remainingTextFieldCharacterCountOther": "Quedan $remainingCount caracteres"
|
||||
"remainingTextFieldCharacterCountOther": "Quedan $remainingCount caracteres",
|
||||
"refreshIndicatorSemanticLabel": "TBD"
|
||||
}
|
||||
|
@ -50,5 +50,6 @@
|
||||
"collapsedIconTapHint": "Expandir",
|
||||
"remainingTextFieldCharacterCountZero": "TBD",
|
||||
"remainingTextFieldCharacterCountOne": "Queda 1 carácter",
|
||||
"remainingTextFieldCharacterCountOther": "Quedan $remainingCount caracteres"
|
||||
"remainingTextFieldCharacterCountOther": "Quedan $remainingCount caracteres",
|
||||
"refreshIndicatorSemanticLabel": "TBD"
|
||||
}
|
||||
|
@ -50,5 +50,6 @@
|
||||
"collapsedIconTapHint": "Expandir",
|
||||
"remainingTextFieldCharacterCountZero": "TBD",
|
||||
"remainingTextFieldCharacterCountOne": "Queda 1 carácter",
|
||||
"remainingTextFieldCharacterCountOther": "Quedan $remainingCount caracteres"
|
||||
"remainingTextFieldCharacterCountOther": "Quedan $remainingCount caracteres",
|
||||
"refreshIndicatorSemanticLabel": "TBD"
|
||||
}
|
||||
|
@ -50,5 +50,6 @@
|
||||
"collapsedIconTapHint": "Expandir",
|
||||
"remainingTextFieldCharacterCountZero": "TBD",
|
||||
"remainingTextFieldCharacterCountOne": "Queda 1 carácter",
|
||||
"remainingTextFieldCharacterCountOther": "Quedan $remainingCount caracteres"
|
||||
"remainingTextFieldCharacterCountOther": "Quedan $remainingCount caracteres",
|
||||
"refreshIndicatorSemanticLabel": "TBD"
|
||||
}
|
||||
|
@ -50,5 +50,6 @@
|
||||
"collapsedIconTapHint": "Expandir",
|
||||
"remainingTextFieldCharacterCountZero": "TBD",
|
||||
"remainingTextFieldCharacterCountOne": "Queda 1 carácter",
|
||||
"remainingTextFieldCharacterCountOther": "Quedan $remainingCount caracteres"
|
||||
"remainingTextFieldCharacterCountOther": "Quedan $remainingCount caracteres",
|
||||
"refreshIndicatorSemanticLabel": "TBD"
|
||||
}
|
||||
|
@ -50,5 +50,6 @@
|
||||
"collapsedIconTapHint": "Expandir",
|
||||
"remainingTextFieldCharacterCountZero": "TBD",
|
||||
"remainingTextFieldCharacterCountOne": "Queda 1 carácter",
|
||||
"remainingTextFieldCharacterCountOther": "Quedan $remainingCount caracteres"
|
||||
"remainingTextFieldCharacterCountOther": "Quedan $remainingCount caracteres",
|
||||
"refreshIndicatorSemanticLabel": "TBD"
|
||||
}
|
||||
|
@ -50,5 +50,6 @@
|
||||
"collapsedIconTapHint": "Expandir",
|
||||
"remainingTextFieldCharacterCountZero": "TBD",
|
||||
"remainingTextFieldCharacterCountOne": "Queda 1 carácter",
|
||||
"remainingTextFieldCharacterCountOther": "Quedan $remainingCount caracteres"
|
||||
"remainingTextFieldCharacterCountOther": "Quedan $remainingCount caracteres",
|
||||
"refreshIndicatorSemanticLabel": "TBD"
|
||||
}
|
||||
|
@ -50,5 +50,6 @@
|
||||
"collapsedIconTapHint": "Expandir",
|
||||
"remainingTextFieldCharacterCountZero": "TBD",
|
||||
"remainingTextFieldCharacterCountOne": "Queda 1 carácter",
|
||||
"remainingTextFieldCharacterCountOther": "Quedan $remainingCount caracteres"
|
||||
"remainingTextFieldCharacterCountOther": "Quedan $remainingCount caracteres",
|
||||
"refreshIndicatorSemanticLabel": "TBD"
|
||||
}
|
||||
|
@ -50,5 +50,6 @@
|
||||
"collapsedIconTapHint": "Expandir",
|
||||
"remainingTextFieldCharacterCountZero": "TBD",
|
||||
"remainingTextFieldCharacterCountOne": "Queda 1 carácter",
|
||||
"remainingTextFieldCharacterCountOther": "Quedan $remainingCount caracteres"
|
||||
"remainingTextFieldCharacterCountOther": "Quedan $remainingCount caracteres",
|
||||
"refreshIndicatorSemanticLabel": "TBD"
|
||||
}
|
||||
|
@ -50,5 +50,6 @@
|
||||
"collapsedIconTapHint": "Expandir",
|
||||
"remainingTextFieldCharacterCountZero": "TBD",
|
||||
"remainingTextFieldCharacterCountOne": "Queda 1 carácter",
|
||||
"remainingTextFieldCharacterCountOther": "Quedan $remainingCount caracteres"
|
||||
"remainingTextFieldCharacterCountOther": "Quedan $remainingCount caracteres",
|
||||
"refreshIndicatorSemanticLabel": "TBD"
|
||||
}
|
||||
|
@ -50,5 +50,6 @@
|
||||
"collapsedIconTapHint": "Expandir",
|
||||
"remainingTextFieldCharacterCountZero": "TBD",
|
||||
"remainingTextFieldCharacterCountOne": "Queda 1 carácter",
|
||||
"remainingTextFieldCharacterCountOther": "Quedan $remainingCount caracteres"
|
||||
"remainingTextFieldCharacterCountOther": "Quedan $remainingCount caracteres",
|
||||
"refreshIndicatorSemanticLabel": "TBD"
|
||||
}
|
||||
|
@ -50,5 +50,6 @@
|
||||
"collapsedIconTapHint": "Expandir",
|
||||
"remainingTextFieldCharacterCountZero": "TBD",
|
||||
"remainingTextFieldCharacterCountOne": "Queda 1 carácter",
|
||||
"remainingTextFieldCharacterCountOther": "Quedan $remainingCount caracteres"
|
||||
"remainingTextFieldCharacterCountOther": "Quedan $remainingCount caracteres",
|
||||
"refreshIndicatorSemanticLabel": "TBD"
|
||||
}
|
||||
|
@ -50,5 +50,6 @@
|
||||
"collapsedIconTapHint": "Expandir",
|
||||
"remainingTextFieldCharacterCountZero": "TBD",
|
||||
"remainingTextFieldCharacterCountOne": "Queda 1 carácter",
|
||||
"remainingTextFieldCharacterCountOther": "Quedan $remainingCount caracteres"
|
||||
"remainingTextFieldCharacterCountOther": "Quedan $remainingCount caracteres",
|
||||
"refreshIndicatorSemanticLabel": "TBD"
|
||||
}
|
||||
|
@ -50,5 +50,6 @@
|
||||
"collapsedIconTapHint": "Expandir",
|
||||
"remainingTextFieldCharacterCountZero": "TBD",
|
||||
"remainingTextFieldCharacterCountOne": "Queda 1 carácter",
|
||||
"remainingTextFieldCharacterCountOther": "Quedan $remainingCount caracteres"
|
||||
"remainingTextFieldCharacterCountOther": "Quedan $remainingCount caracteres",
|
||||
"refreshIndicatorSemanticLabel": "TBD"
|
||||
}
|
||||
|
@ -50,5 +50,6 @@
|
||||
"collapsedIconTapHint": "Laienda",
|
||||
"remainingTextFieldCharacterCountZero": "TBD",
|
||||
"remainingTextFieldCharacterCountOne": "Jäänud on 1 tähemärk",
|
||||
"remainingTextFieldCharacterCountOther": "Jäänud on $remainingCount tähemärki"
|
||||
"remainingTextFieldCharacterCountOther": "Jäänud on $remainingCount tähemärki",
|
||||
"refreshIndicatorSemanticLabel": "TBD"
|
||||
}
|
||||
|
@ -50,5 +50,6 @@
|
||||
"collapsedIconTapHint": "بزرگ کردن",
|
||||
"remainingTextFieldCharacterCountZero": "TBD",
|
||||
"remainingTextFieldCharacterCountOne": "۱ نویسه باقی مانده است",
|
||||
"remainingTextFieldCharacterCountOther": "$remainingCount نویسه باقی مانده است"
|
||||
"remainingTextFieldCharacterCountOther": "$remainingCount نویسه باقی مانده است",
|
||||
"refreshIndicatorSemanticLabel": "TBD"
|
||||
}
|
||||
|
@ -50,5 +50,6 @@
|
||||
"collapsedIconTapHint": "Laajenna",
|
||||
"remainingTextFieldCharacterCountZero": "TBD",
|
||||
"remainingTextFieldCharacterCountOne": "1 merkki jäljellä",
|
||||
"remainingTextFieldCharacterCountOther": "$remainingCount merkkiä jäljellä"
|
||||
"remainingTextFieldCharacterCountOther": "$remainingCount merkkiä jäljellä",
|
||||
"refreshIndicatorSemanticLabel": "TBD"
|
||||
}
|
||||
|
@ -50,5 +50,6 @@
|
||||
"collapsedIconTapHint": "I-expand",
|
||||
"remainingTextFieldCharacterCountZero": "TBD",
|
||||
"remainingTextFieldCharacterCountOne": "1 character ang natitira",
|
||||
"remainingTextFieldCharacterCountOther": "$remainingCount na character ang natitira"
|
||||
"remainingTextFieldCharacterCountOther": "$remainingCount na character ang natitira",
|
||||
"refreshIndicatorSemanticLabel": "TBD"
|
||||
}
|
||||
|
@ -51,5 +51,6 @@
|
||||
"collapsedIconTapHint": "Développer",
|
||||
"remainingTextFieldCharacterCountZero": "TBD",
|
||||
"remainingTextFieldCharacterCountOne": "1 caractère restant",
|
||||
"remainingTextFieldCharacterCountOther": "$remainingCount caractères restants"
|
||||
"remainingTextFieldCharacterCountOther": "$remainingCount caractères restants",
|
||||
"refreshIndicatorSemanticLabel": "TBD"
|
||||
}
|
||||
|
@ -50,5 +50,6 @@
|
||||
"collapsedIconTapHint": "Maximieren",
|
||||
"remainingTextFieldCharacterCountZero": "TBD",
|
||||
"remainingTextFieldCharacterCountOne": "Noch 1 Zeichen",
|
||||
"remainingTextFieldCharacterCountOther": "Noch $remainingCount Zeichen"
|
||||
"remainingTextFieldCharacterCountOther": "Noch $remainingCount Zeichen",
|
||||
"refreshIndicatorSemanticLabel": "TBD"
|
||||
}
|
||||
|
@ -54,5 +54,6 @@
|
||||
"collapsedIconTapHint": "הרחבה",
|
||||
"remainingTextFieldCharacterCountZero": "TBD",
|
||||
"remainingTextFieldCharacterCountOne": "נותר תו אחד",
|
||||
"remainingTextFieldCharacterCountOther": "נותרו $remainingCount תווים"
|
||||
"remainingTextFieldCharacterCountOther": "נותרו $remainingCount תווים",
|
||||
"refreshIndicatorSemanticLabel": "TBD"
|
||||
}
|
||||
|
@ -50,5 +50,6 @@
|
||||
"collapsedIconTapHint": "बड़ा करें",
|
||||
"remainingTextFieldCharacterCountZero": "TBD",
|
||||
"remainingTextFieldCharacterCountOne": "एक वर्ण अाैर डाला जा सकता है",
|
||||
"remainingTextFieldCharacterCountOther": "$remainingCount वर्ण अाैर डाले जा सकते हैं"
|
||||
"remainingTextFieldCharacterCountOther": "$remainingCount वर्ण अाैर डाले जा सकते हैं",
|
||||
"refreshIndicatorSemanticLabel": "TBD"
|
||||
}
|
||||
|
@ -52,5 +52,6 @@
|
||||
"collapsedIconTapHint": "Proširi",
|
||||
"remainingTextFieldCharacterCountZero": "TBD",
|
||||
"remainingTextFieldCharacterCountOne": "Preostao je 1 znak",
|
||||
"remainingTextFieldCharacterCountOther": "Preostalo je $remainingCount znakova"
|
||||
"remainingTextFieldCharacterCountOther": "Preostalo je $remainingCount znakova",
|
||||
"refreshIndicatorSemanticLabel": "TBD"
|
||||
}
|
||||
|
@ -50,5 +50,6 @@
|
||||
"collapsedIconTapHint": "Kibontás",
|
||||
"remainingTextFieldCharacterCountZero": "TBD",
|
||||
"remainingTextFieldCharacterCountOne": "1 karakter maradt",
|
||||
"remainingTextFieldCharacterCountOther": "$remainingCount karakter maradt"
|
||||
"remainingTextFieldCharacterCountOther": "$remainingCount karakter maradt",
|
||||
"refreshIndicatorSemanticLabel": "TBD"
|
||||
}
|
||||
|
@ -50,5 +50,6 @@
|
||||
"collapsedIconTapHint": "Luaskan",
|
||||
"remainingTextFieldCharacterCountZero": "TBD",
|
||||
"remainingTextFieldCharacterCountOne": "Sisa 1 karakter",
|
||||
"remainingTextFieldCharacterCountOther": "Sisa $remainingCount karakter"
|
||||
"remainingTextFieldCharacterCountOther": "Sisa $remainingCount karakter",
|
||||
"refreshIndicatorSemanticLabel": "TBD"
|
||||
}
|
||||
|
@ -50,5 +50,6 @@
|
||||
"collapsedIconTapHint": "Espandi",
|
||||
"remainingTextFieldCharacterCountZero": "TBD",
|
||||
"remainingTextFieldCharacterCountOne": "1 carattere rimanente",
|
||||
"remainingTextFieldCharacterCountOther": "$remainingCount caratteri rimanenti"
|
||||
"remainingTextFieldCharacterCountOther": "$remainingCount caratteri rimanenti",
|
||||
"refreshIndicatorSemanticLabel": "TBD"
|
||||
}
|
||||
|
@ -50,5 +50,6 @@
|
||||
"collapsedIconTapHint": "展開",
|
||||
"remainingTextFieldCharacterCountZero": "TBD",
|
||||
"remainingTextFieldCharacterCountOne": "残り 1 文字(半角相当)",
|
||||
"remainingTextFieldCharacterCountOther": "残り $remainingCount 文字(半角相当)"
|
||||
"remainingTextFieldCharacterCountOther": "残り $remainingCount 文字(半角相当)",
|
||||
"refreshIndicatorSemanticLabel": "TBD"
|
||||
}
|
||||
|
@ -50,5 +50,6 @@
|
||||
"collapsedIconTapHint": "ពង្រីក",
|
||||
"remainingTextFieldCharacterCountZero": "TBD",
|
||||
"remainingTextFieldCharacterCountOne": "នៅសល់ 1 តួទៀត",
|
||||
"remainingTextFieldCharacterCountOther": "នៅសល់ $remainingCount តួទៀត"
|
||||
"remainingTextFieldCharacterCountOther": "នៅសល់ $remainingCount តួទៀត",
|
||||
"refreshIndicatorSemanticLabel": "TBD"
|
||||
}
|
||||
|
@ -50,5 +50,6 @@
|
||||
"collapsedIconTapHint": "펼치기",
|
||||
"remainingTextFieldCharacterCountZero": "TBD",
|
||||
"remainingTextFieldCharacterCountOne": "1자 남음",
|
||||
"remainingTextFieldCharacterCountOther": "$remainingCount자 남음"
|
||||
"remainingTextFieldCharacterCountOther": "$remainingCount자 남음",
|
||||
"refreshIndicatorSemanticLabel": "TBD"
|
||||
}
|
||||
|
@ -54,5 +54,6 @@
|
||||
"collapsedIconTapHint": "Išskleisti",
|
||||
"remainingTextFieldCharacterCountZero": "TBD",
|
||||
"remainingTextFieldCharacterCountOne": "Liko 1 simbolis",
|
||||
"remainingTextFieldCharacterCountOther": "Liko $remainingCount simbolių"
|
||||
"remainingTextFieldCharacterCountOther": "Liko $remainingCount simbolių",
|
||||
"refreshIndicatorSemanticLabel": "TBD"
|
||||
}
|
||||
|
@ -51,5 +51,6 @@
|
||||
"collapsedIconTapHint": "Izvērst",
|
||||
"remainingTextFieldCharacterCountZero": "Nav atlikusi neviena rakstzīme.",
|
||||
"remainingTextFieldCharacterCountOne": "Atlikusi 1 rakstzīme.",
|
||||
"remainingTextFieldCharacterCountOther": "Atlikušas $remainingCount rakstzīmes."
|
||||
"remainingTextFieldCharacterCountOther": "Atlikušas $remainingCount rakstzīmes.",
|
||||
"refreshIndicatorSemanticLabel": "TBD"
|
||||
}
|
||||
|
@ -51,5 +51,6 @@
|
||||
"collapsedIconTapHint": "Expand",
|
||||
"remainingTextFieldCharacterCountZero": "No characters remaining",
|
||||
"remainingTextFieldCharacterCountOne": "1 character remaining",
|
||||
"remainingTextFieldCharacterCountOther": "$remainingCount characters remaining"
|
||||
"remainingTextFieldCharacterCountOther": "$remainingCount characters remaining",
|
||||
"refreshIndicatorSemanticLabel": "TBD"
|
||||
}
|
||||
|
@ -51,5 +51,6 @@
|
||||
"collapsedIconTapHint": "Kembangkan",
|
||||
"remainingTextFieldCharacterCountZero": "TBD",
|
||||
"remainingTextFieldCharacterCountOne": "1 aksara lagi",
|
||||
"remainingTextFieldCharacterCountOther": "$remainingCount aksara lagi"
|
||||
"remainingTextFieldCharacterCountOther": "$remainingCount aksara lagi",
|
||||
"refreshIndicatorSemanticLabel": "TBD"
|
||||
}
|
||||
|
@ -50,5 +50,6 @@
|
||||
"collapsedIconTapHint": "Vis",
|
||||
"remainingTextFieldCharacterCountZero": "TBD",
|
||||
"remainingTextFieldCharacterCountOne": "1 tegn gjenstår",
|
||||
"remainingTextFieldCharacterCountOther": "$remainingCount tegn gjenstår"
|
||||
"remainingTextFieldCharacterCountOther": "$remainingCount tegn gjenstår",
|
||||
"refreshIndicatorSemanticLabel": "TBD"
|
||||
}
|
||||
|
@ -50,5 +50,6 @@
|
||||
"collapsedIconTapHint": "Uitvouwen",
|
||||
"remainingTextFieldCharacterCountZero": "TBD",
|
||||
"remainingTextFieldCharacterCountOne": "1 teken resterend",
|
||||
"remainingTextFieldCharacterCountOther": "$remainingCount tekens resterend"
|
||||
"remainingTextFieldCharacterCountOther": "$remainingCount tekens resterend",
|
||||
"refreshIndicatorSemanticLabel": "TBD"
|
||||
}
|
||||
|
@ -54,5 +54,6 @@
|
||||
"collapsedIconTapHint": "Rozwiń",
|
||||
"remainingTextFieldCharacterCountZero": "TBD",
|
||||
"remainingTextFieldCharacterCountOne": "Jeszcze 1 znak",
|
||||
"remainingTextFieldCharacterCountOther": "Jeszcze $remainingCount znaku"
|
||||
"remainingTextFieldCharacterCountOther": "Jeszcze $remainingCount znaku",
|
||||
"refreshIndicatorSemanticLabel": "TBD"
|
||||
}
|
||||
|
@ -49,5 +49,6 @@
|
||||
"collapsedIconTapHint": "TBD",
|
||||
"remainingTextFieldCharacterCountZero": "TBD",
|
||||
"remainingTextFieldCharacterCountOne": "TBD",
|
||||
"remainingTextFieldCharacterCountOther": "TBD"
|
||||
"remainingTextFieldCharacterCountOther": "TBD",
|
||||
"refreshIndicatorSemanticLabel": "TBD"
|
||||
}
|
||||
|
@ -52,5 +52,6 @@
|
||||
"collapsedIconTapHint": "Expandir",
|
||||
"remainingTextFieldCharacterCountZero": "TBD",
|
||||
"remainingTextFieldCharacterCountOne": "1 caractere restante",
|
||||
"remainingTextFieldCharacterCountOther": "$remainingCount caracteres restantes"
|
||||
"remainingTextFieldCharacterCountOther": "$remainingCount caracteres restantes",
|
||||
"refreshIndicatorSemanticLabel": "TBD"
|
||||
}
|
||||
|
@ -50,5 +50,6 @@
|
||||
"collapsedIconTapHint": "Expandir",
|
||||
"remainingTextFieldCharacterCountZero": "TBD",
|
||||
"remainingTextFieldCharacterCountOne": "Resta 1 caráter",
|
||||
"remainingTextFieldCharacterCountOther": "Restam $remainingCount carateres"
|
||||
"remainingTextFieldCharacterCountOther": "Restam $remainingCount carateres",
|
||||
"refreshIndicatorSemanticLabel": "TBD"
|
||||
}
|
||||
|
@ -53,5 +53,6 @@
|
||||
"collapsedIconTapHint": "Extindeți",
|
||||
"remainingTextFieldCharacterCountZero": "TBD",
|
||||
"remainingTextFieldCharacterCountOne": "un caracter rămas",
|
||||
"remainingTextFieldCharacterCountOther": "$remainingCount de caractere rămase"
|
||||
"remainingTextFieldCharacterCountOther": "$remainingCount de caractere rămase",
|
||||
"refreshIndicatorSemanticLabel": "TBD"
|
||||
}
|
||||
|
@ -55,5 +55,6 @@
|
||||
"collapsedIconTapHint": "Развернуть",
|
||||
"remainingTextFieldCharacterCountZero": "TBD",
|
||||
"remainingTextFieldCharacterCountOne": "Остался 1 символ",
|
||||
"remainingTextFieldCharacterCountOther": "Осталось $remainingCount символа"
|
||||
"remainingTextFieldCharacterCountOther": "Осталось $remainingCount символа",
|
||||
"refreshIndicatorSemanticLabel": "TBD"
|
||||
}
|
||||
|
@ -54,5 +54,6 @@
|
||||
"collapsedIconTapHint": "Rozbaliť",
|
||||
"remainingTextFieldCharacterCountZero": "TBD",
|
||||
"remainingTextFieldCharacterCountOne": "Zostáva 1 znak",
|
||||
"remainingTextFieldCharacterCountOther": "Zostáva $remainingCount znakov"
|
||||
"remainingTextFieldCharacterCountOther": "Zostáva $remainingCount znakov",
|
||||
"refreshIndicatorSemanticLabel": "TBD"
|
||||
}
|
||||
|
@ -54,5 +54,6 @@
|
||||
"collapsedIconTapHint": "Razširiti",
|
||||
"remainingTextFieldCharacterCountZero": "TBD",
|
||||
"remainingTextFieldCharacterCountOne": "Še 1 znak",
|
||||
"remainingTextFieldCharacterCountOther": "Še $remainingCount znakov"
|
||||
"remainingTextFieldCharacterCountOther": "Še $remainingCount znakov",
|
||||
"refreshIndicatorSemanticLabel": "TBD"
|
||||
}
|
||||
|
@ -52,5 +52,6 @@
|
||||
"collapsedIconTapHint": "Прошири",
|
||||
"remainingTextFieldCharacterCountZero": "TBD",
|
||||
"remainingTextFieldCharacterCountOne": "Преостао је 1 знак",
|
||||
"remainingTextFieldCharacterCountOther": "Преостало је $remainingCount знакова"
|
||||
"remainingTextFieldCharacterCountOther": "Преостало је $remainingCount знакова",
|
||||
"refreshIndicatorSemanticLabel": "TBD"
|
||||
}
|
||||
|
@ -52,5 +52,6 @@
|
||||
"collapsedIconTapHint": "Proširi",
|
||||
"remainingTextFieldCharacterCountZero": "TBD",
|
||||
"remainingTextFieldCharacterCountOne": "Preostao je 1 znak",
|
||||
"remainingTextFieldCharacterCountOther": "Preostalo je $remainingCount znakova"
|
||||
"remainingTextFieldCharacterCountOther": "Preostalo je $remainingCount znakova",
|
||||
"refreshIndicatorSemanticLabel": "TBD"
|
||||
}
|
||||
|
@ -50,5 +50,6 @@
|
||||
"collapsedIconTapHint": "Utöka",
|
||||
"remainingTextFieldCharacterCountZero": "TBD",
|
||||
"remainingTextFieldCharacterCountOne": "1 tecken kvar",
|
||||
"remainingTextFieldCharacterCountOther": "$remainingCount tecken kvar"
|
||||
"remainingTextFieldCharacterCountOther": "$remainingCount tecken kvar",
|
||||
"refreshIndicatorSemanticLabel": "TBD"
|
||||
}
|
||||
|
@ -50,5 +50,6 @@
|
||||
"collapsedIconTapHint": "ขยาย",
|
||||
"remainingTextFieldCharacterCountZero": "TBD",
|
||||
"remainingTextFieldCharacterCountOne": "เหลือ 1 อักขระ",
|
||||
"remainingTextFieldCharacterCountOther": "เหลือ $remainingCount อักขระ"
|
||||
"remainingTextFieldCharacterCountOther": "เหลือ $remainingCount อักขระ",
|
||||
"refreshIndicatorSemanticLabel": "TBD"
|
||||
}
|
||||
|
@ -50,5 +50,6 @@
|
||||
"collapsedIconTapHint": "I-expand",
|
||||
"remainingTextFieldCharacterCountZero": "TBD",
|
||||
"remainingTextFieldCharacterCountOne": "1 character ang natitira",
|
||||
"remainingTextFieldCharacterCountOther": "$remainingCount na character ang natitira"
|
||||
"remainingTextFieldCharacterCountOther": "$remainingCount na character ang natitira",
|
||||
"refreshIndicatorSemanticLabel": "TBD"
|
||||
}
|
||||
|
@ -50,5 +50,6 @@
|
||||
"collapsedIconTapHint": "Genişlet",
|
||||
"remainingTextFieldCharacterCountZero": "TBD",
|
||||
"remainingTextFieldCharacterCountOne": "1 karakter kaldı",
|
||||
"remainingTextFieldCharacterCountOther": "$remainingCount karakter kaldı"
|
||||
"remainingTextFieldCharacterCountOther": "$remainingCount karakter kaldı",
|
||||
"refreshIndicatorSemanticLabel": "TBD"
|
||||
}
|
||||
|
@ -54,5 +54,6 @@
|
||||
"collapsedIconTapHint": "Розгорнути",
|
||||
"remainingTextFieldCharacterCountZero": "TBD",
|
||||
"remainingTextFieldCharacterCountOne": "Залишився 1 символ",
|
||||
"remainingTextFieldCharacterCountOther": "Залишилося $remainingCount символу"
|
||||
"remainingTextFieldCharacterCountOther": "Залишилося $remainingCount символу",
|
||||
"refreshIndicatorSemanticLabel": "TBD"
|
||||
}
|
||||
|
@ -50,5 +50,6 @@
|
||||
"collapsedIconTapHint": "پھیلائیں",
|
||||
"remainingTextFieldCharacterCountZero": "TBD",
|
||||
"remainingTextFieldCharacterCountOne": "1 حرف باقی ہے",
|
||||
"remainingTextFieldCharacterCountOther": "$remainingCount حروف باقی ہیں"
|
||||
"remainingTextFieldCharacterCountOther": "$remainingCount حروف باقی ہیں",
|
||||
"refreshIndicatorSemanticLabel": "TBD"
|
||||
}
|
||||
|
@ -50,5 +50,6 @@
|
||||
"collapsedIconTapHint": "Mở rộng",
|
||||
"remainingTextFieldCharacterCountZero": "TBD",
|
||||
"remainingTextFieldCharacterCountOne": "Còn lại 1 ký tự",
|
||||
"remainingTextFieldCharacterCountOther": "Còn lại $remainingCount ký tự"
|
||||
"remainingTextFieldCharacterCountOther": "Còn lại $remainingCount ký tự",
|
||||
"refreshIndicatorSemanticLabel": "TBD"
|
||||
}
|
||||
|
@ -50,5 +50,6 @@
|
||||
"collapsedIconTapHint": "展开",
|
||||
"remainingTextFieldCharacterCountZero": "TBD",
|
||||
"remainingTextFieldCharacterCountOne": "还可输入 1 个字符",
|
||||
"remainingTextFieldCharacterCountOther": "还可输入 $remainingCount 个字符"
|
||||
"remainingTextFieldCharacterCountOther": "还可输入 $remainingCount 个字符",
|
||||
"refreshIndicatorSemanticLabel": "TBD"
|
||||
}
|
||||
|
@ -50,5 +50,6 @@
|
||||
"collapsedIconTapHint": "展開",
|
||||
"remainingTextFieldCharacterCountZero": "TBD",
|
||||
"remainingTextFieldCharacterCountOne": "還可輸入 1 個字元",
|
||||
"remainingTextFieldCharacterCountOther": "還可輸入 $remainingCount 個字元"
|
||||
"remainingTextFieldCharacterCountOther": "還可輸入 $remainingCount 個字元",
|
||||
"refreshIndicatorSemanticLabel": "TBD"
|
||||
}
|
||||
|
@ -50,5 +50,6 @@
|
||||
"collapsedIconTapHint": "展開",
|
||||
"remainingTextFieldCharacterCountZero": "TBD",
|
||||
"remainingTextFieldCharacterCountOne": "還可輸入 1 個字元",
|
||||
"remainingTextFieldCharacterCountOther": "還可輸入 $remainingCount 個字元"
|
||||
"remainingTextFieldCharacterCountOther": "還可輸入 $remainingCount 個字元",
|
||||
"refreshIndicatorSemanticLabel": "TBD"
|
||||
}
|
||||
|
@ -40,6 +40,7 @@ void main() {
|
||||
expect(localizations.alertDialogLabel, isNotNull);
|
||||
expect(localizations.collapsedIconTapHint, isNotNull);
|
||||
expect(localizations.expandedIconTapHint, isNotNull);
|
||||
expect(localizations.refreshIndicatorSemanticLabel, isNotNull);
|
||||
|
||||
expect(localizations.remainingTextFieldCharacterCount(0), isNotNull);
|
||||
expect(localizations.remainingTextFieldCharacterCount(1), isNotNull);
|
||||
|
Loading…
x
Reference in New Issue
Block a user