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/semantics/icon_semantics.dart';
|
||||
import 'package:flutter/cupertino.dart';
|
||||
|
||||
class CupertinoLoadingWidget extends StatelessWidget {
|
||||
@@ -6,17 +7,19 @@ class CupertinoLoadingWidget extends StatelessWidget {
|
||||
final double? size;
|
||||
final EdgeInsetsGeometry? padding;
|
||||
final bool isCenter;
|
||||
final String? semanticLabel;
|
||||
|
||||
const CupertinoLoadingWidget({
|
||||
super.key,
|
||||
this.size,
|
||||
this.padding,
|
||||
this.isCenter = true,
|
||||
this.semanticLabel,
|
||||
});
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
final item = isCenter
|
||||
Widget item = isCenter
|
||||
? Center(
|
||||
child: SizedBox(
|
||||
width: size ?? CupertinoLoadingWidgetStyles.size,
|
||||
@@ -36,6 +39,11 @@ class CupertinoLoadingWidget extends StatelessWidget {
|
||||
)
|
||||
),
|
||||
);
|
||||
|
||||
if (semanticLabel != null) {
|
||||
item = IconSemantics(label: semanticLabel!, child: item);
|
||||
}
|
||||
|
||||
if (padding != null) {
|
||||
return Padding(padding: padding!, child: item);
|
||||
} 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) {
|
||||
return const Padding(
|
||||
padding: EdgeInsetsDirectional.only(top: 16),
|
||||
child: CupertinoLoadingWidget());
|
||||
child: CupertinoLoadingWidget(
|
||||
semanticLabel: 'Mail list loading icon',
|
||||
),
|
||||
);
|
||||
} else {
|
||||
return const SizedBox.shrink();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user