From dd0d2d58591dd7c6d43544f97b2abc56beeeee31 Mon Sep 17 00:00:00 2001 From: Cyrix126 Date: Tue, 29 Sep 2026 16:42:50 +0200 Subject: [PATCH 1/3] fix: close the building dialog once on cancel --- lib/pages/exchange_view/exchange_step_views/step_4_view.dart | 1 + .../send_view/sub_widgets/building_transaction_dialog.dart | 2 -- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/lib/pages/exchange_view/exchange_step_views/step_4_view.dart b/lib/pages/exchange_view/exchange_step_views/step_4_view.dart index dc75032f94..c23cd61178 100644 --- a/lib/pages/exchange_view/exchange_step_views/step_4_view.dart +++ b/lib/pages/exchange_view/exchange_step_views/step_4_view.dart @@ -286,6 +286,7 @@ class _Step4ViewState extends ConsumerState { isSpark: wallet is FiroWallet && !firoPublicSend, onCancel: () { wasCancelled = true; + Navigator.of(context).pop(); }, ); }, diff --git a/lib/pages/send_view/sub_widgets/building_transaction_dialog.dart b/lib/pages/send_view/sub_widgets/building_transaction_dialog.dart index 0d1e9ef344..4cba928080 100644 --- a/lib/pages/send_view/sub_widgets/building_transaction_dialog.dart +++ b/lib/pages/send_view/sub_widgets/building_transaction_dialog.dart @@ -115,7 +115,6 @@ class _RestoringDialogState extends ConsumerState { style: STextStyles.itemSubtitle12(context), ), onPressed: () { - Navigator.of(context).pop(); onCancel.call(); }, ), @@ -140,7 +139,6 @@ class _RestoringDialogState extends ConsumerState { style: STextStyles.itemSubtitle12(context), ), onPressed: () { - Navigator.of(context).pop(); onCancel.call(); }, ), From 6a58f42aa1a79caa520be0ac45df4851970df07e Mon Sep 17 00:00:00 2001 From: Cyrix126 Date: Tue, 29 Sep 2026 16:42:51 +0200 Subject: [PATCH 2/3] fix: ignore a failed build after cancel --- lib/pages/exchange_view/send_from_view.dart | 5 ++--- .../namecoin_names/sub_widgets/transfer_option_widget.dart | 5 ++--- .../namecoin_names/sub_widgets/update_option_widget.dart | 5 ++--- lib/pages/salvium_stake/salvium_create_stake_view.dart | 5 ++--- lib/pages/send_view/send_view.dart | 5 ++--- lib/pages/send_view/sol_token_send_view.dart | 5 ++--- lib/pages/send_view/token_send_view.dart | 5 ++--- .../my_stack_view/wallet_view/sub_widgets/desktop_send.dart | 5 ++--- .../wallet_view/sub_widgets/desktop_sol_token_send.dart | 5 ++--- .../wallet_view/sub_widgets/desktop_token_send.dart | 5 ++--- 10 files changed, 20 insertions(+), 30 deletions(-) diff --git a/lib/pages/exchange_view/send_from_view.dart b/lib/pages/exchange_view/send_from_view.dart index 9fe4121ee0..8565f6f12c 100644 --- a/lib/pages/exchange_view/send_from_view.dart +++ b/lib/pages/exchange_view/send_from_view.dart @@ -225,9 +225,8 @@ class _SendFromCardState extends ConsumerState { Future _send({bool? shouldSendPublicFiroFunds}) async { final coin = ref.read(pWalletCoin(walletId)); + bool wasCancelled = false; try { - bool wasCancelled = false; - final wallet = ref.read(pWallets).getWallet(walletId); unawaited( @@ -362,7 +361,7 @@ class _SendFromCardState extends ConsumerState { } } catch (e, s) { Logging.instance.e("$e\n$s", error: e, stackTrace: s); - if (mounted) { + if (mounted && !wasCancelled) { // pop building dialog Navigator.of(context, rootNavigator: Util.isDesktop).pop(); diff --git a/lib/pages/namecoin_names/sub_widgets/transfer_option_widget.dart b/lib/pages/namecoin_names/sub_widgets/transfer_option_widget.dart index 5dbc649bcd..ee1ade39b8 100644 --- a/lib/pages/namecoin_names/sub_widgets/transfer_option_widget.dart +++ b/lib/pages/namecoin_names/sub_widgets/transfer_option_widget.dart @@ -71,11 +71,10 @@ class _TransferOptionWidgetState extends ConsumerState { FocusScope.of(context).unfocus(); await Future.delayed(const Duration(milliseconds: 100)); + bool wasCancelled = false; try { final wallet = ref.read(pWallets).getWallet(walletId) as NamecoinWallet; - bool wasCancelled = false; - if (mounted) { if (Util.isDesktop) { unawaited( @@ -194,7 +193,7 @@ class _TransferOptionWidgetState extends ConsumerState { stackTrace: s, ); - if (mounted) { + if (mounted && !wasCancelled) { String err = e.toString(); if (err.startsWith("Exception: ")) { err = err.replaceFirst("Exception: ", ""); diff --git a/lib/pages/namecoin_names/sub_widgets/update_option_widget.dart b/lib/pages/namecoin_names/sub_widgets/update_option_widget.dart index 4fd78fb707..2116133088 100644 --- a/lib/pages/namecoin_names/sub_widgets/update_option_widget.dart +++ b/lib/pages/namecoin_names/sub_widgets/update_option_widget.dart @@ -73,6 +73,7 @@ class _BuyDomainWidgetState extends ConsumerState { Future _previewUpdate() async { if (_previewLock) return; _previewLock = true; + bool wasCancelled = false; try { final newValue = _getNewValue(); if (newValue == _currentValue) { @@ -86,8 +87,6 @@ class _BuyDomainWidgetState extends ConsumerState { final wallet = ref.read(pWallets).getWallet(widget.walletId) as NamecoinWallet; - bool wasCancelled = false; - if (mounted) { if (Util.isDesktop) { unawaited( @@ -214,7 +213,7 @@ class _BuyDomainWidgetState extends ConsumerState { err = "Contains invalid characters"; } - if (mounted) { + if (mounted && !wasCancelled) { await showDialog( context: context, builder: diff --git a/lib/pages/salvium_stake/salvium_create_stake_view.dart b/lib/pages/salvium_stake/salvium_create_stake_view.dart index ca62f242d5..5679185136 100644 --- a/lib/pages/salvium_stake/salvium_create_stake_view.dart +++ b/lib/pages/salvium_stake/salvium_create_stake_view.dart @@ -74,9 +74,8 @@ class _SalviumCreateStakeViewState if (_lock) return; _lock = true; + bool wasCancelled = false; try { - bool wasCancelled = false; - unawaited( showDialog( context: context, @@ -170,7 +169,7 @@ class _SalviumCreateStakeViewState } catch (e, s) { Logging.instance.e("Salvium stake preview: ", error: e, stackTrace: s); - if (mounted) { + if (mounted && !wasCancelled) { // pop building dialog Navigator.of(context, rootNavigator: Util.isDesktop).pop(); diff --git a/lib/pages/send_view/send_view.dart b/lib/pages/send_view/send_view.dart index e6249006a7..3fe1e2c457 100644 --- a/lib/pages/send_view/send_view.dart +++ b/lib/pages/send_view/send_view.dart @@ -935,9 +935,8 @@ class _SendViewState extends ConsumerState { } } + bool wasCancelled = false; try { - bool wasCancelled = false; - if (mounted) { unawaited( showDialog( @@ -1167,7 +1166,7 @@ class _SendViewState extends ConsumerState { } } catch (e, s) { Logging.instance.e("$e\n$s", error: e, stackTrace: s); - if (mounted) { + if (mounted && !wasCancelled) { // pop building dialog Navigator.of(context, rootNavigator: true).pop(); diff --git a/lib/pages/send_view/sol_token_send_view.dart b/lib/pages/send_view/sol_token_send_view.dart index 13c66ff01d..dd8ccb5c7a 100644 --- a/lib/pages/send_view/sol_token_send_view.dart +++ b/lib/pages/send_view/sol_token_send_view.dart @@ -464,9 +464,8 @@ class _SolTokenSendViewState extends ConsumerState { final wallet = ref.read(pWallets).getWallet(walletId); final Amount amount = _amountToSend!; + bool wasCancelled = false; try { - bool wasCancelled = false; - if (mounted) { unawaited( showDialog( @@ -543,7 +542,7 @@ class _SolTokenSendViewState extends ConsumerState { } } catch (e, s) { Logging.instance.e("$e\n$s", error: e, stackTrace: s); - if (mounted) { + if (mounted && !wasCancelled) { // pop building dialog Navigator.of(context).pop(); diff --git a/lib/pages/send_view/token_send_view.dart b/lib/pages/send_view/token_send_view.dart index 5601d41c9a..fe8a805185 100644 --- a/lib/pages/send_view/token_send_view.dart +++ b/lib/pages/send_view/token_send_view.dart @@ -463,9 +463,8 @@ class _TokenSendViewState extends ConsumerState { // } // } + bool wasCancelled = false; try { - bool wasCancelled = false; - if (mounted) { unawaited( showDialog( @@ -538,7 +537,7 @@ class _TokenSendViewState extends ConsumerState { } } catch (e, s) { Logging.instance.e("$e\n$s", error: e, stackTrace: s); - if (mounted) { + if (mounted && !wasCancelled) { // pop building dialog Navigator.of(context).pop(); diff --git a/lib/pages_desktop_specific/my_stack_view/wallet_view/sub_widgets/desktop_send.dart b/lib/pages_desktop_specific/my_stack_view/wallet_view/sub_widgets/desktop_send.dart index b411775efe..9ce1582d54 100644 --- a/lib/pages_desktop_specific/my_stack_view/wallet_view/sub_widgets/desktop_send.dart +++ b/lib/pages_desktop_specific/my_stack_view/wallet_view/sub_widgets/desktop_send.dart @@ -549,9 +549,8 @@ class _DesktopSendState extends ConsumerState { } } + bool wasCancelled = false; try { - bool wasCancelled = false; - if (mounted) { unawaited( showDialog( @@ -793,7 +792,7 @@ class _DesktopSendState extends ConsumerState { } } catch (e, s) { Logging.instance.e("Desktop send: ", error: e, stackTrace: s); - if (mounted) { + if (mounted && !wasCancelled) { // pop building dialog Navigator.of(context, rootNavigator: true).pop(); diff --git a/lib/pages_desktop_specific/my_stack_view/wallet_view/sub_widgets/desktop_sol_token_send.dart b/lib/pages_desktop_specific/my_stack_view/wallet_view/sub_widgets/desktop_sol_token_send.dart index 9c84751966..2ac7b7bbe4 100644 --- a/lib/pages_desktop_specific/my_stack_view/wallet_view/sub_widgets/desktop_sol_token_send.dart +++ b/lib/pages_desktop_specific/my_stack_view/wallet_view/sub_widgets/desktop_sol_token_send.dart @@ -225,9 +225,8 @@ class _DesktopSolTokenSendState extends ConsumerState { } } + bool wasCancelled = false; try { - bool wasCancelled = false; - if (mounted) { unawaited( showDialog( @@ -310,7 +309,7 @@ class _DesktopSolTokenSendState extends ConsumerState { ); } } catch (e) { - if (mounted) { + if (mounted && !wasCancelled) { // pop building dialog Navigator.of(context, rootNavigator: true).pop(); diff --git a/lib/pages_desktop_specific/my_stack_view/wallet_view/sub_widgets/desktop_token_send.dart b/lib/pages_desktop_specific/my_stack_view/wallet_view/sub_widgets/desktop_token_send.dart index 9388a2230e..8bb54b00be 100644 --- a/lib/pages_desktop_specific/my_stack_view/wallet_view/sub_widgets/desktop_token_send.dart +++ b/lib/pages_desktop_specific/my_stack_view/wallet_view/sub_widgets/desktop_token_send.dart @@ -207,9 +207,8 @@ class _DesktopTokenSendState extends ConsumerState { } } + bool wasCancelled = false; try { - bool wasCancelled = false; - if (mounted) { unawaited( showDialog( @@ -289,7 +288,7 @@ class _DesktopTokenSendState extends ConsumerState { ); } } catch (e) { - if (mounted) { + if (mounted && !wasCancelled) { // pop building dialog Navigator.of(context, rootNavigator: true).pop(); From ae45aba8b12ba02d153766ebb7a6e368edc8b8de Mon Sep 17 00:00:00 2001 From: Cyrix126 Date: Thu, 8 Oct 2026 05:47:25 +0200 Subject: [PATCH 3/3] style: format --- lib/pages/exchange_view/send_from_view.dart | 36 ++++++------- .../sub_widgets/transfer_option_widget.dart | 12 ++--- .../sub_widgets/update_option_widget.dart | 50 +++++++++---------- .../building_transaction_dialog.dart | 1 + 4 files changed, 47 insertions(+), 52 deletions(-) diff --git a/lib/pages/exchange_view/send_from_view.dart b/lib/pages/exchange_view/send_from_view.dart index 8565f6f12c..7c0fd140cd 100644 --- a/lib/pages/exchange_view/send_from_view.dart +++ b/lib/pages/exchange_view/send_from_view.dart @@ -106,9 +106,9 @@ class _SendFromViewState extends ConsumerState { builder: (child) { return Background( child: Scaffold( - backgroundColor: Theme.of( - context, - ).extension()!.background, + backgroundColor: Theme.of(context) + .extension()! + .background, appBar: AppBar( leading: AppBarBackButton( onPressed: () { @@ -380,9 +380,9 @@ class _SendFromCardState extends ConsumerState { child: Text( "Ok", style: STextStyles.button(context).copyWith( - color: Theme.of( - context, - ).extension()!.buttonTextSecondary, + color: Theme.of(context) + .extension()! + .buttonTextSecondary, ), ), onPressed: () { @@ -426,9 +426,9 @@ class _SendFromCardState extends ConsumerState { children: [ if (!trade.exchangeName.startsWith(TrocadorExchange.exchangeName)) MaterialButton( - splashColor: Theme.of( - context, - ).extension()!.highlight, + splashColor: Theme.of(context) + .extension()! + .highlight, key: Key("walletsSheetItemButtonFiroPrivateKey_$walletId"), padding: const EdgeInsets.all(0), materialTapTargetSize: MaterialTapTargetSize.shrinkWrap, @@ -480,9 +480,9 @@ class _SendFromCardState extends ConsumerState { Assets.svg.chevronRight, height: 14, width: 7, - color: Theme.of( - context, - ).extension()!.infoItemLabel, + color: Theme.of(context) + .extension()! + .infoItemLabel, ), ], ), @@ -490,9 +490,9 @@ class _SendFromCardState extends ConsumerState { ), ), MaterialButton( - splashColor: Theme.of( - context, - ).extension()!.highlight, + splashColor: Theme.of(context) + .extension()! + .highlight, key: Key("walletsSheetItemButtonFiroPublicKey_$walletId"), padding: const EdgeInsets.all(0), materialTapTargetSize: MaterialTapTargetSize.shrinkWrap, @@ -542,9 +542,9 @@ class _SendFromCardState extends ConsumerState { Assets.svg.chevronRight, height: 14, width: 7, - color: Theme.of( - context, - ).extension()!.infoItemLabel, + color: Theme.of(context) + .extension()! + .infoItemLabel, ), ], ), diff --git a/lib/pages/namecoin_names/sub_widgets/transfer_option_widget.dart b/lib/pages/namecoin_names/sub_widgets/transfer_option_widget.dart index ee1ade39b8..eba8faa45d 100644 --- a/lib/pages/namecoin_names/sub_widgets/transfer_option_widget.dart +++ b/lib/pages/namecoin_names/sub_widgets/transfer_option_widget.dart @@ -360,8 +360,7 @@ class _TransferOptionWidgetState extends ConsumerState { children: [ _addressController.text.isNotEmpty ? TextFieldIconButton( - semanticsLabel: - "Clear Button. Clears The Address Field Input.", + semanticsLabel: "Clear Button. Clears The Address Field Input.", key: const Key( "nameTransferClearAddressFieldButtonKey", ), @@ -374,8 +373,7 @@ class _TransferOptionWidgetState extends ConsumerState { child: const XIcon(), ) : TextFieldIconButton( - semanticsLabel: - "Paste Button. Pastes From Clipboard To Address Field Input.", + semanticsLabel: "Paste Button. Pastes From Clipboard To Address Field Input.", key: const Key( "nameTransferPasteAddressFieldButtonKey", ), @@ -404,8 +402,7 @@ class _TransferOptionWidgetState extends ConsumerState { ), if (_addressController.text.isEmpty) TextFieldIconButton( - semanticsLabel: - "Address Book Button. Opens Address Book For Address Field.", + semanticsLabel: "Address Book Button. Opens Address Book For Address Field.", key: const Key( "nameTransferAddressBookButtonKey", ), @@ -419,8 +416,7 @@ class _TransferOptionWidgetState extends ConsumerState { ), if (_addressController.text.isEmpty) TextFieldIconButton( - semanticsLabel: - "Scan QR Button. Opens Camera For Scanning QR Code.", + semanticsLabel: "Scan QR Button. Opens Camera For Scanning QR Code.", key: const Key("nameTransferScanQrButtonKey"), onTap: _scanQr, child: const QrCodeIcon(), diff --git a/lib/pages/namecoin_names/sub_widgets/update_option_widget.dart b/lib/pages/namecoin_names/sub_widgets/update_option_widget.dart index 2116133088..fa21142b03 100644 --- a/lib/pages/namecoin_names/sub_widgets/update_option_widget.dart +++ b/lib/pages/namecoin_names/sub_widgets/update_option_widget.dart @@ -182,16 +182,15 @@ class _BuyDomainWidgetState extends ConsumerState { if (Util.isDesktop) { await showDialog( context: context, - builder: - (context) => SDialog( - child: SizedBox( - width: 580, - child: ConfirmNameTransactionView( - txData: txData, - walletId: widget.walletId, - ), - ), + builder: (context) => SDialog( + child: SizedBox( + width: 580, + child: ConfirmNameTransactionView( + txData: txData, + walletId: widget.walletId, ), + ), + ), ); } else { await Navigator.of(context).pushNamed( @@ -216,13 +215,12 @@ class _BuyDomainWidgetState extends ConsumerState { if (mounted && !wasCancelled) { await showDialog( context: context, - builder: - (_) => StackOkDialog( - title: "Update failed", - message: err, - desktopPopRootNavigator: Util.isDesktop, - maxWidth: Util.isDesktop ? 600 : null, - ), + builder: (_) => StackOkDialog( + title: "Update failed", + message: err, + desktopPopRootNavigator: Util.isDesktop, + maxWidth: Util.isDesktop ? 600 : null, + ), ); } } finally { @@ -259,10 +257,9 @@ class _BuyDomainWidgetState extends ConsumerState { Widget build(BuildContext context) { return Column( mainAxisSize: MainAxisSize.min, - crossAxisAlignment: - Util.isDesktop - ? CrossAxisAlignment.start - : CrossAxisAlignment.stretch, + crossAxisAlignment: Util.isDesktop + ? CrossAxisAlignment.start + : CrossAxisAlignment.stretch, children: [ Text("Edit value", style: STextStyles.label(context)), const SizedBox(height: 6), @@ -292,10 +289,9 @@ class _BuyDomainWidgetState extends ConsumerState { return Text( "$length/$valueMaxLength", style: STextStyles.w500_10(context).copyWith( - color: - Theme.of( - context, - ).extension()!.textSubtitle2, + color: Theme.of(context) + .extension()! + .textSubtitle2, ), ); }, @@ -310,8 +306,10 @@ class _BuyDomainWidgetState extends ConsumerState { child: SecondaryButton( label: "Cancel", buttonHeight: Util.isDesktop ? ButtonHeight.l : null, - onPressed: - Navigator.of(context, rootNavigator: Util.isDesktop).pop, + onPressed: Navigator.of( + context, + rootNavigator: Util.isDesktop, + ).pop, ), ), const SizedBox(width: 16), diff --git a/lib/pages/send_view/sub_widgets/building_transaction_dialog.dart b/lib/pages/send_view/sub_widgets/building_transaction_dialog.dart index 4cba928080..68c9c8bd20 100644 --- a/lib/pages/send_view/sub_widgets/building_transaction_dialog.dart +++ b/lib/pages/send_view/sub_widgets/building_transaction_dialog.dart @@ -12,6 +12,7 @@ import 'dart:io'; import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; + import '../../../themes/coin_image_provider.dart'; import '../../../themes/stack_colors.dart'; import '../../../utilities/text_styles.dart';