mirror of
https://github.com/cypherstack/stack_wallet.git
synced 2024-11-18 02:07:43 +00:00
Merge pull request #505 from detherminal/staging
feat: wrap with semantic widget for talkback
This commit is contained in:
commit
2dc510b6c6
15 changed files with 251 additions and 185 deletions
|
@ -333,6 +333,9 @@ class _AddWalletViewState extends ConsumerState<AddWalletView> {
|
|||
borderRadius: BorderRadius.circular(
|
||||
Constants.size.circularBorderRadius,
|
||||
),
|
||||
child: Semantics(
|
||||
label: "Search Text Field. Inputs Text To Search In Wallets.",
|
||||
excludeSemantics: true,
|
||||
child: TextField(
|
||||
autofocus: isDesktop,
|
||||
autocorrect: !isDesktop,
|
||||
|
@ -380,6 +383,7 @@ class _AddWalletViewState extends ConsumerState<AddWalletView> {
|
|||
: null,
|
||||
),
|
||||
),
|
||||
)
|
||||
),
|
||||
const SizedBox(
|
||||
height: 10,
|
||||
|
|
|
@ -238,14 +238,22 @@ class _NameYourWalletViewState extends ConsumerState<NameYourWalletView> {
|
|||
TextFieldIconButton(
|
||||
key: const Key("genRandomWalletNameButtonKey"),
|
||||
child: _showDiceIcon
|
||||
? DiceIcon(
|
||||
? Semantics(
|
||||
label: "Generate Random Wallet Name Button. Generates A Random Name For Wallet.",
|
||||
excludeSemantics: true,
|
||||
child: DiceIcon(
|
||||
width: isDesktop ? 20 : 17,
|
||||
height: isDesktop ? 20 : 17,
|
||||
),
|
||||
)
|
||||
: XIcon(
|
||||
: Semantics(
|
||||
label: "Generate Random Wallet Name Button. Generates A Random Name For Wallet.",
|
||||
excludeSemantics: true,
|
||||
child: XIcon(
|
||||
width: isDesktop ? 21 : 18,
|
||||
height: isDesktop ? 21 : 18,
|
||||
),
|
||||
),
|
||||
onTap: () async {
|
||||
if (_showDiceIcon) {
|
||||
textEditingController.text =
|
||||
|
|
|
@ -140,6 +140,7 @@ class _NewWalletRecoveryPhraseViewState
|
|||
child: AspectRatio(
|
||||
aspectRatio: 1,
|
||||
child: AppBarIconButton(
|
||||
semanticsLabel: "Copy Button. Copies The Recovery Phrase To Clipboard.",
|
||||
color: Theme.of(context)
|
||||
.extension<StackColors>()!
|
||||
.background,
|
||||
|
|
|
@ -87,6 +87,7 @@ class _NewWalletRecoveryPhraseWarningViewState
|
|||
right: 10,
|
||||
),
|
||||
child: AppBarIconButton(
|
||||
semanticsLabel: "Question Button. Opens A Dialog For Recovery Phrase Explanation.",
|
||||
icon: SvgPicture.asset(
|
||||
Assets.svg.circleQuestion,
|
||||
width: 20,
|
||||
|
|
|
@ -636,6 +636,7 @@ class _RestoreWalletViewState extends ConsumerState<RestoreWalletView> {
|
|||
child: AspectRatio(
|
||||
aspectRatio: 1,
|
||||
child: AppBarIconButton(
|
||||
semanticsLabel: "View QR Code Button. Opens Camera To Scan QR Code For Restoring Wallet.",
|
||||
key: const Key("restoreWalletViewQrCodeButton"),
|
||||
size: 36,
|
||||
shadows: const [],
|
||||
|
@ -662,6 +663,7 @@ class _RestoreWalletViewState extends ConsumerState<RestoreWalletView> {
|
|||
child: AspectRatio(
|
||||
aspectRatio: 1,
|
||||
child: AppBarIconButton(
|
||||
semanticsLabel: "Paste Button. Pastes From Clipboard For Restoring Wallet.",
|
||||
key: const Key("restoreWalletPasteButton"),
|
||||
size: 36,
|
||||
shadows: const [],
|
||||
|
|
|
@ -781,6 +781,9 @@ class _ExchangeFormState extends ConsumerState<ExchangeForm> {
|
|||
cursor: SystemMouseCursors.click,
|
||||
child: child,
|
||||
),
|
||||
child: Semantics(
|
||||
label: "Swap Button. Reverse The Exchange Currencies.",
|
||||
excludeSemantics: true,
|
||||
child: RoundedContainer(
|
||||
padding: isDesktop
|
||||
? const EdgeInsets.all(6)
|
||||
|
@ -806,6 +809,7 @@ class _ExchangeFormState extends ConsumerState<ExchangeForm> {
|
|||
),
|
||||
),
|
||||
),
|
||||
)
|
||||
),
|
||||
],
|
||||
),
|
||||
|
|
|
@ -191,6 +191,7 @@ class _HomeViewState extends ConsumerState<HomeView> {
|
|||
child: AspectRatio(
|
||||
aspectRatio: 1,
|
||||
child: AppBarIconButton(
|
||||
semanticsLabel: "Notifications Button. Takes To Notifications Page.",
|
||||
key: const Key("walletsViewAlertsButton"),
|
||||
size: 36,
|
||||
shadows: const [],
|
||||
|
@ -254,6 +255,7 @@ class _HomeViewState extends ConsumerState<HomeView> {
|
|||
child: AspectRatio(
|
||||
aspectRatio: 1,
|
||||
child: AppBarIconButton(
|
||||
semanticsLabel: "Settings Button. Takes To Settings Page.",
|
||||
key: const Key("walletsViewSettingsButton"),
|
||||
size: 36,
|
||||
shadows: const [],
|
||||
|
|
|
@ -39,6 +39,7 @@ class LockscreenView extends ConsumerStatefulWidget {
|
|||
this.routeOnSuccessArguments,
|
||||
this.biometrics = const Biometrics(),
|
||||
this.onSuccess,
|
||||
this.customKeyLabel = "Button",
|
||||
}) : super(key: key);
|
||||
|
||||
static const String routeName = "/lockscreen";
|
||||
|
@ -53,6 +54,8 @@ class LockscreenView extends ConsumerStatefulWidget {
|
|||
final String biometricsCancelButtonString;
|
||||
final Biometrics biometrics;
|
||||
final VoidCallback? onSuccess;
|
||||
final String customKeyLabel;
|
||||
|
||||
|
||||
@override
|
||||
ConsumerState<LockscreenView> createState() => _LockscreenViewState();
|
||||
|
@ -245,6 +248,10 @@ class _LockscreenViewState extends ConsumerState<LockscreenView> {
|
|||
),
|
||||
CustomPinPut(
|
||||
customKey: CustomKey(
|
||||
semanticsLabel: Platform.isIOS
|
||||
? "Face ID Button. Checks Face ID."
|
||||
: "Fingerprint Button. Checks Fingerprint."
|
||||
,
|
||||
onPressed: _checkUseBiometrics,
|
||||
iconAssetName: Platform.isIOS
|
||||
? Assets.svg.faceId
|
||||
|
|
|
@ -143,6 +143,7 @@ class _ReceiveViewState extends ConsumerState<ReceiveView> {
|
|||
child: AspectRatio(
|
||||
aspectRatio: 1,
|
||||
child: AppBarIconButton(
|
||||
semanticsLabel: "Address List Pop-up Button. Opens A Pop-up For Adress List Button.",
|
||||
key: const Key("walletNetworkSettingsAddNewNodeViewButton"),
|
||||
size: 36,
|
||||
shadows: const [],
|
||||
|
|
|
@ -981,6 +981,7 @@ class _SendViewState extends ConsumerState<SendView> {
|
|||
children: [
|
||||
_addressToggleFlag
|
||||
? TextFieldIconButton(
|
||||
semanticsLabel: "Clear Button. Clears The Address Field Input.",
|
||||
key: const Key(
|
||||
"sendViewClearAddressFieldButtonKey"),
|
||||
onTap: () {
|
||||
|
@ -997,6 +998,7 @@ class _SendViewState extends ConsumerState<SendView> {
|
|||
child: const XIcon(),
|
||||
)
|
||||
: TextFieldIconButton(
|
||||
semanticsLabel: "Paste Button. Pastes From Clipboard To Address Field Input.",
|
||||
key: const Key(
|
||||
"sendViewPasteAddressFieldButtonKey"),
|
||||
onTap: () async {
|
||||
|
@ -1046,6 +1048,7 @@ class _SendViewState extends ConsumerState<SendView> {
|
|||
),
|
||||
if (sendToController.text.isEmpty)
|
||||
TextFieldIconButton(
|
||||
semanticsLabel: "Address Book Button. Opens Address Book For Address Field.",
|
||||
key: const Key(
|
||||
"sendViewAddressBookButtonKey"),
|
||||
onTap: () {
|
||||
|
@ -1058,6 +1061,7 @@ class _SendViewState extends ConsumerState<SendView> {
|
|||
),
|
||||
if (sendToController.text.isEmpty)
|
||||
TextFieldIconButton(
|
||||
semanticsLabel: "Scan QR Button. Opens Camera For Scanning QR Code.",
|
||||
key: const Key(
|
||||
"sendViewScanQrButtonKey"),
|
||||
onTap: () async {
|
||||
|
|
|
@ -99,6 +99,9 @@ class _RefreshButtonState extends ConsumerState<WalletRefreshButton> {
|
|||
return SizedBox(
|
||||
height: isDesktop ? 22 : 36,
|
||||
width: isDesktop ? 22 : 36,
|
||||
child: Semantics(
|
||||
label: "Refresh Button. Refreshes The Values In Summary.",
|
||||
excludeSemantics: true,
|
||||
child: MaterialButton(
|
||||
color: isDesktop
|
||||
? Theme.of(context).extension<StackColors>()!.buttonBackSecondary
|
||||
|
@ -149,6 +152,7 @@ class _RefreshButtonState extends ConsumerState<WalletRefreshButton> {
|
|||
.textFavoriteCard,
|
||||
),
|
||||
),
|
||||
)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -473,6 +473,7 @@ class _WalletViewState extends ConsumerState<WalletView> {
|
|||
child: AspectRatio(
|
||||
aspectRatio: 1,
|
||||
child: AppBarIconButton(
|
||||
semanticsLabel: "Network Button. Takes To Network Status Page.",
|
||||
key: const Key("walletViewRadioButton"),
|
||||
size: 36,
|
||||
shadows: const [],
|
||||
|
@ -502,6 +503,7 @@ class _WalletViewState extends ConsumerState<WalletView> {
|
|||
child: AspectRatio(
|
||||
aspectRatio: 1,
|
||||
child: AppBarIconButton(
|
||||
semanticsLabel: "Notifications Button. Takes To Notifications Page.",
|
||||
key: const Key("walletViewAlertsButton"),
|
||||
size: 36,
|
||||
shadows: const [],
|
||||
|
@ -569,6 +571,7 @@ class _WalletViewState extends ConsumerState<WalletView> {
|
|||
child: AspectRatio(
|
||||
aspectRatio: 1,
|
||||
child: AppBarIconButton(
|
||||
semanticsLabel: "Settings Button. Takes To Wallet Settings Page.",
|
||||
key: const Key("walletViewSettingsButton"),
|
||||
size: 36,
|
||||
shadows: const [],
|
||||
|
|
|
@ -13,6 +13,7 @@ class AppBarIconButton extends StatelessWidget {
|
|||
// this.circularBorderRadius = 10.0,
|
||||
this.size = 36.0,
|
||||
this.shadows = const [],
|
||||
this.semanticsLabel = "Button",
|
||||
}) : super(key: key);
|
||||
|
||||
final Widget icon;
|
||||
|
@ -21,6 +22,7 @@ class AppBarIconButton extends StatelessWidget {
|
|||
// final double circularBorderRadius;
|
||||
final double size;
|
||||
final List<BoxShadow> shadows;
|
||||
final String semanticsLabel;
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
|
@ -32,6 +34,9 @@ class AppBarIconButton extends StatelessWidget {
|
|||
color: color ?? Theme.of(context).extension<StackColors>()!.background,
|
||||
boxShadow: shadows,
|
||||
),
|
||||
child: Semantics(
|
||||
excludeSemantics: true,
|
||||
label: semanticsLabel,
|
||||
child: MaterialButton(
|
||||
splashColor: Theme.of(context).extension<StackColors>()!.highlight,
|
||||
padding: EdgeInsets.zero,
|
||||
|
@ -42,6 +47,7 @@ class AppBarIconButton extends StatelessWidget {
|
|||
onPressed: onPressed,
|
||||
child: icon,
|
||||
),
|
||||
)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
@ -53,12 +59,14 @@ class AppBarBackButton extends StatelessWidget {
|
|||
this.isCompact = false,
|
||||
this.size,
|
||||
this.iconSize,
|
||||
this.semanticsLabel = "Back Button. Takes Back To Previous Page.",
|
||||
}) : super(key: key);
|
||||
|
||||
final VoidCallback? onPressed;
|
||||
final bool isCompact;
|
||||
final double? size;
|
||||
final double? iconSize;
|
||||
final String semanticsLabel;
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
|
@ -71,6 +79,7 @@ class AppBarBackButton extends StatelessWidget {
|
|||
)
|
||||
: const EdgeInsets.all(10),
|
||||
child: AppBarIconButton(
|
||||
semanticsLabel: semanticsLabel,
|
||||
size: size ??
|
||||
(isDesktop
|
||||
? isCompact
|
||||
|
@ -88,7 +97,7 @@ class AppBarBackButton extends StatelessWidget {
|
|||
color: Theme.of(context).extension<StackColors>()!.topNavIconPrimary,
|
||||
),
|
||||
onPressed: onPressed ?? Navigator.of(context).pop,
|
||||
),
|
||||
)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -140,6 +140,9 @@ class _BackspaceKeyState extends State<BackspaceKey> {
|
|||
}
|
||||
});
|
||||
},
|
||||
child: Semantics(
|
||||
label: "Backspace Button. Deletes The Last Digit.",
|
||||
excludeSemantics: true,
|
||||
child: Center(
|
||||
child: SvgPicture.asset(
|
||||
Assets.svg.delete,
|
||||
|
@ -149,6 +152,7 @@ class _BackspaceKeyState extends State<BackspaceKey> {
|
|||
Theme.of(context).extension<StackColors>()!.numpadTextDefault,
|
||||
),
|
||||
),
|
||||
)
|
||||
),
|
||||
);
|
||||
}
|
||||
|
@ -198,10 +202,12 @@ class CustomKey extends StatelessWidget {
|
|||
Key? key,
|
||||
required this.onPressed,
|
||||
this.iconAssetName,
|
||||
this.semanticsLabel = "Button",
|
||||
}) : super(key: key);
|
||||
|
||||
final VoidCallback onPressed;
|
||||
final String? iconAssetName;
|
||||
final String semanticsLabel;
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
|
@ -213,6 +219,9 @@ class CustomKey extends StatelessWidget {
|
|||
color: Theme.of(context).extension<StackColors>()!.numpadBackDefault,
|
||||
shadows: const [],
|
||||
),
|
||||
child: Semantics(
|
||||
label: semanticsLabel,
|
||||
excludeSemantics: true,
|
||||
child: MaterialButton(
|
||||
// splashColor: Theme.of(context).extension<StackColors>()!.highlight,
|
||||
materialTapTargetSize: MaterialTapTargetSize.shrinkWrap,
|
||||
|
@ -233,6 +242,7 @@ class CustomKey extends StatelessWidget {
|
|||
),
|
||||
),
|
||||
),
|
||||
)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -8,6 +8,7 @@ class TextFieldIconButton extends StatefulWidget {
|
|||
this.onTap,
|
||||
required this.child,
|
||||
this.color = Colors.transparent,
|
||||
this.semanticsLabel = "Button",
|
||||
}) : super(key: key);
|
||||
|
||||
final double width;
|
||||
|
@ -15,6 +16,7 @@ class TextFieldIconButton extends StatefulWidget {
|
|||
final VoidCallback? onTap;
|
||||
final Widget child;
|
||||
final Color color;
|
||||
final String semanticsLabel;
|
||||
|
||||
@override
|
||||
State<TextFieldIconButton> createState() => _TextFieldIconButtonState();
|
||||
|
@ -36,6 +38,9 @@ class _TextFieldIconButtonState extends State<TextFieldIconButton> {
|
|||
width: widget.width,
|
||||
child: ClipRRect(
|
||||
borderRadius: BorderRadius.circular(100),
|
||||
child: Semantics(
|
||||
label: widget.semanticsLabel,
|
||||
excludeSemantics: true,
|
||||
child: RawMaterialButton(
|
||||
constraints: BoxConstraints(
|
||||
minWidth: widget.width,
|
||||
|
@ -51,6 +56,7 @@ class _TextFieldIconButtonState extends State<TextFieldIconButton> {
|
|||
),
|
||||
),
|
||||
),
|
||||
)
|
||||
),
|
||||
);
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue