From 039508ee327e52059ce26b222be94b2fd28be3b7 Mon Sep 17 00:00:00 2001 From: julian <julian@cypherstack.com> Date: Mon, 9 Jan 2023 13:57:12 -0600 Subject: [PATCH] show insufficient balance warning on connect to paynym attempt --- .../paynym/dialogs/paynym_details_popup.dart | 91 +++++++++++++------ .../subwidgets/desktop_paynym_details.dart | 52 ++++++++--- 2 files changed, 103 insertions(+), 40 deletions(-) diff --git a/lib/pages/paynym/dialogs/paynym_details_popup.dart b/lib/pages/paynym/dialogs/paynym_details_popup.dart index a26905e7c..76b0575a3 100644 --- a/lib/pages/paynym/dialogs/paynym_details_popup.dart +++ b/lib/pages/paynym/dialogs/paynym_details_popup.dart @@ -15,6 +15,7 @@ import 'package:stackwallet/route_generator.dart'; import 'package:stackwallet/services/coins/coin_paynym_extension.dart'; import 'package:stackwallet/services/coins/dogecoin/dogecoin_wallet.dart'; import 'package:stackwallet/utilities/assets.dart'; +import 'package:stackwallet/utilities/enums/coin_enum.dart'; import 'package:stackwallet/utilities/text_styles.dart'; import 'package:stackwallet/utilities/theme/stack_colors.dart'; import 'package:stackwallet/widgets/custom_buttons/paynym_follow_toggle_button.dart'; @@ -22,6 +23,7 @@ import 'package:stackwallet/widgets/desktop/desktop_dialog.dart'; import 'package:stackwallet/widgets/desktop/primary_button.dart'; import 'package:stackwallet/widgets/desktop/secondary_button.dart'; import 'package:stackwallet/widgets/loading_indicator.dart'; +import 'package:stackwallet/widgets/rounded_container.dart'; class PaynymDetailsPopup extends ConsumerStatefulWidget { const PaynymDetailsPopup({ @@ -38,6 +40,8 @@ class PaynymDetailsPopup extends ConsumerStatefulWidget { } class _PaynymDetailsPopupState extends ConsumerState<PaynymDetailsPopup> { + bool _showInsufficientFundsInfo = false; + Future<void> _onConnectPressed() async { bool canPop = false; unawaited( @@ -79,13 +83,14 @@ class _PaynymDetailsPopupState extends ConsumerState<PaynymDetailsPopup> { selectedTxFeeRate: rates.medium, targetPaymentCodeString: widget.accountLite.code, ); - } on InsufficientBalanceException catch (e) { + } on InsufficientBalanceException catch (_) { if (mounted) { canPop = true; Navigator.of(context).pop(); } - // TODO show info popup - print(e); + setState(() { + _showInsufficientFundsInfo = true; + }); return; } @@ -145,39 +150,69 @@ class _PaynymDetailsPopupState extends ConsumerState<PaynymDetailsPopup> { right: 24, bottom: 16, ), - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, + child: Column( children: [ Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ - PayNymBot( - paymentCodeString: widget.accountLite.code, - size: 32, + Row( + children: [ + PayNymBot( + paymentCodeString: widget.accountLite.code, + size: 32, + ), + const SizedBox( + width: 12, + ), + Text( + widget.accountLite.nymName, + style: STextStyles.w600_12(context), + ), + ], ), - const SizedBox( - width: 12, - ), - Text( - widget.accountLite.nymName, - style: STextStyles.w600_12(context), + PrimaryButton( + label: "Connect", + buttonHeight: ButtonHeight.l, + icon: SvgPicture.asset( + Assets.svg.circlePlusFilled, + width: 10, + height: 10, + color: Theme.of(context) + .extension<StackColors>()! + .buttonTextPrimary, + ), + iconSpacing: 4, + width: 86, + onPressed: _onConnectPressed, ), ], ), - PrimaryButton( - label: "Connect", - buttonHeight: ButtonHeight.l, - icon: SvgPicture.asset( - Assets.svg.circlePlusFilled, - width: 10, - height: 10, - color: Theme.of(context) - .extension<StackColors>()! - .buttonTextPrimary, + if (_showInsufficientFundsInfo) + Column( + mainAxisSize: MainAxisSize.min, + children: [ + const SizedBox( + height: 24, + ), + RoundedContainer( + color: Theme.of(context) + .extension<StackColors>()! + .warningBackground, + child: Text( + "Adding a PayNym to your contacts requires a one-time " + "transaction fee for creating the record on the " + "blockchain. Please deposit more " + "${ref.read(walletsChangeNotifierProvider).getManager(widget.walletId).wallet.coin.ticker} " + "into your wallet and try again.", + style: STextStyles.infoSmall(context).copyWith( + color: Theme.of(context) + .extension<StackColors>()! + .warningForeground, + ), + ), + ), + ], ), - iconSpacing: 4, - width: 86, - onPressed: _onConnectPressed, - ), ], ), ), diff --git a/lib/pages/paynym/subwidgets/desktop_paynym_details.dart b/lib/pages/paynym/subwidgets/desktop_paynym_details.dart index ce6dedabe..7962c9462 100644 --- a/lib/pages/paynym/subwidgets/desktop_paynym_details.dart +++ b/lib/pages/paynym/subwidgets/desktop_paynym_details.dart @@ -6,6 +6,7 @@ import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:flutter_svg/svg.dart'; import 'package:qr_flutter/qr_flutter.dart'; import 'package:stackwallet/models/paynym/paynym_account_lite.dart'; +import 'package:stackwallet/notifications/show_flush_bar.dart'; import 'package:stackwallet/pages/paynym/dialogs/confirm_paynym_connect_dialog.dart'; import 'package:stackwallet/pages/paynym/subwidgets/paynym_bot.dart'; import 'package:stackwallet/pages/send_view/confirm_transaction_view.dart'; @@ -14,16 +15,16 @@ import 'package:stackwallet/route_generator.dart'; import 'package:stackwallet/services/coins/coin_paynym_extension.dart'; import 'package:stackwallet/services/coins/dogecoin/dogecoin_wallet.dart'; import 'package:stackwallet/utilities/assets.dart'; +import 'package:stackwallet/utilities/enums/coin_enum.dart'; import 'package:stackwallet/utilities/text_styles.dart'; import 'package:stackwallet/utilities/theme/stack_colors.dart'; import 'package:stackwallet/widgets/custom_buttons/blue_text_button.dart'; import 'package:stackwallet/widgets/custom_buttons/paynym_follow_toggle_button.dart'; import 'package:stackwallet/widgets/desktop/primary_button.dart'; import 'package:stackwallet/widgets/loading_indicator.dart'; +import 'package:stackwallet/widgets/rounded_container.dart'; import 'package:stackwallet/widgets/rounded_white_container.dart'; -import '../../../notifications/show_flush_bar.dart'; - class DesktopPaynymDetails extends ConsumerStatefulWidget { const DesktopPaynymDetails({ Key? key, @@ -40,6 +41,8 @@ class DesktopPaynymDetails extends ConsumerStatefulWidget { } class _PaynymDetailsPopupState extends ConsumerState<DesktopPaynymDetails> { + bool _showInsufficientFundsInfo = false; + Future<void> _onConnectPressed() async { bool canPop = false; unawaited( @@ -59,15 +62,15 @@ class _PaynymDetailsPopupState extends ConsumerState<DesktopPaynymDetails> { .getManager(widget.walletId) .wallet as DogecoinWallet; - // sanity check to prevent second notifcation tx + // sanity check to prevent second notification tx if (wallet.hasConnectedConfirmed(widget.accountLite.code)) { canPop = true; - Navigator.of(context).pop(); + Navigator.of(context, rootNavigator: true).pop(); // TODO show info popup return; } else if (wallet.hasConnected(widget.accountLite.code)) { canPop = true; - Navigator.of(context).pop(); + Navigator.of(context, rootNavigator: true).pop(); // TODO show info popup return; } @@ -84,10 +87,11 @@ class _PaynymDetailsPopupState extends ConsumerState<DesktopPaynymDetails> { } on InsufficientBalanceException catch (e) { if (mounted) { canPop = true; - Navigator.of(context).pop(); + Navigator.of(context, rootNavigator: true).pop(); } - // TODO show info popup - print(e); + setState(() { + _showInsufficientFundsInfo = true; + }); return; } @@ -96,10 +100,7 @@ class _PaynymDetailsPopupState extends ConsumerState<DesktopPaynymDetails> { canPop = true; // close loading - Navigator.of(context).pop(); - - // Close details - Navigator.of(context).pop(); + Navigator.of(context, rootNavigator: true).pop(); // show info pop up await showDialog<void>( @@ -192,6 +193,33 @@ class _PaynymDetailsPopupState extends ConsumerState<DesktopPaynymDetails> { ), ], ), + if (_showInsufficientFundsInfo) + Column( + mainAxisSize: MainAxisSize.min, + children: [ + const SizedBox( + height: 24, + ), + RoundedContainer( + color: Theme.of(context) + .extension<StackColors>()! + .warningBackground, + child: Text( + "Adding a PayNym to your contacts requires a one-time " + "transaction fee for creating the record on the " + "blockchain. Please deposit more " + "${ref.read(walletsChangeNotifierProvider).getManager(widget.walletId).wallet.coin.ticker} " + "into your wallet and try again.", + style: STextStyles.desktopTextExtraExtraSmall(context) + .copyWith( + color: Theme.of(context) + .extension<StackColors>()! + .warningForeground, + ), + ), + ), + ], + ), ], ), ),