TF-3678 Support accessibility for loading icon in the mail list area

Signed-off-by: dab246 <tdvu@linagora.com>
This commit is contained in:
dab246
2025-04-24 14:08:26 +07:00
committed by Dat H. Pham
parent 5f0476a105
commit d3ddea3bd5
3 changed files with 35 additions and 2 deletions
@@ -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();
} }