Unverified Commit 78c5bb2a authored by Dan Field's avatar Dan Field Committed by GitHub

Make progress indicators accessible (#24275)

* Make progress indicators accessible
parent 567b31a7
......@@ -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.
///
......
......@@ -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 {
......
......@@ -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);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment