TF-3678 Support accessibility for loading icon in the mail list area
Signed-off-by: dab246 <tdvu@linagora.com>
This commit is contained in:
@@ -1,4 +1,5 @@
|
|||||||
import 'package:core/presentation/views/loading/cupertino_loading_widget_styles.dart';
|
import 'package:core/presentation/views/loading/cupertino_loading_widget_styles.dart';
|
||||||
|
import 'package:core/presentation/views/semantics/icon_semantics.dart';
|
||||||
import 'package:flutter/cupertino.dart';
|
import 'package:flutter/cupertino.dart';
|
||||||
|
|
||||||
class CupertinoLoadingWidget extends StatelessWidget {
|
class CupertinoLoadingWidget extends StatelessWidget {
|
||||||
@@ -6,17 +7,19 @@ class CupertinoLoadingWidget extends StatelessWidget {
|
|||||||
final double? size;
|
final double? size;
|
||||||
final EdgeInsetsGeometry? padding;
|
final EdgeInsetsGeometry? padding;
|
||||||
final bool isCenter;
|
final bool isCenter;
|
||||||
|
final String? semanticLabel;
|
||||||
|
|
||||||
const CupertinoLoadingWidget({
|
const CupertinoLoadingWidget({
|
||||||
super.key,
|
super.key,
|
||||||
this.size,
|
this.size,
|
||||||
this.padding,
|
this.padding,
|
||||||
this.isCenter = true,
|
this.isCenter = true,
|
||||||
|
this.semanticLabel,
|
||||||
});
|
});
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
final item = isCenter
|
Widget item = isCenter
|
||||||
? Center(
|
? Center(
|
||||||
child: SizedBox(
|
child: SizedBox(
|
||||||
width: size ?? CupertinoLoadingWidgetStyles.size,
|
width: size ?? CupertinoLoadingWidgetStyles.size,
|
||||||
@@ -36,6 +39,11 @@ class CupertinoLoadingWidget extends StatelessWidget {
|
|||||||
)
|
)
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
|
|
||||||
|
if (semanticLabel != null) {
|
||||||
|
item = IconSemantics(label: semanticLabel!, child: item);
|
||||||
|
}
|
||||||
|
|
||||||
if (padding != null) {
|
if (padding != null) {
|
||||||
return Padding(padding: padding!, child: item);
|
return Padding(padding: padding!, child: item);
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
@@ -0,0 +1,22 @@
|
|||||||
|
import 'package:flutter/material.dart';
|
||||||
|
|
||||||
|
class IconSemantics extends StatelessWidget {
|
||||||
|
final Widget child;
|
||||||
|
final String label;
|
||||||
|
|
||||||
|
const IconSemantics({
|
||||||
|
super.key,
|
||||||
|
required this.child,
|
||||||
|
required this.label,
|
||||||
|
});
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
return Semantics(
|
||||||
|
label: label,
|
||||||
|
container: true,
|
||||||
|
image: true,
|
||||||
|
child: child,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -26,7 +26,10 @@ class ThreadViewLoadingBarWidget extends StatelessWidget {
|
|||||||
success is CleanAndGetAllEmailLoading) {
|
success is CleanAndGetAllEmailLoading) {
|
||||||
return const Padding(
|
return const Padding(
|
||||||
padding: EdgeInsetsDirectional.only(top: 16),
|
padding: EdgeInsetsDirectional.only(top: 16),
|
||||||
child: CupertinoLoadingWidget());
|
child: CupertinoLoadingWidget(
|
||||||
|
semanticLabel: 'Mail list loading icon',
|
||||||
|
),
|
||||||
|
);
|
||||||
} else {
|
} else {
|
||||||
return const SizedBox.shrink();
|
return const SizedBox.shrink();
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user