From a2308d3e7871acc662944a3286d12bd126ca18bd Mon Sep 17 00:00:00 2001 From: sneurlax Date: Sun, 30 Jun 2024 22:08:25 -0500 Subject: [PATCH 1/5] quick toggle balances as appropriate if only 2 balances exist, toggle them instead of showing the dialog. --- .../sub_widgets/wallet_summary_info.dart | 59 +++++++++++++++++-- 1 file changed, 53 insertions(+), 6 deletions(-) diff --git a/lib/pages/wallet_view/sub_widgets/wallet_summary_info.dart b/lib/pages/wallet_view/sub_widgets/wallet_summary_info.dart index 6862f878a..ca434e576 100644 --- a/lib/pages/wallet_view/sub_widgets/wallet_summary_info.dart +++ b/lib/pages/wallet_view/sub_widgets/wallet_summary_info.dart @@ -28,9 +28,9 @@ import '../../../utilities/enums/wallet_balance_toggle_state.dart'; import '../../../utilities/extensions/extensions.dart'; import '../../../utilities/text_styles.dart'; import '../../../wallets/crypto_currency/coins/banano.dart'; -import '../../../wallets/crypto_currency/coins/firo.dart'; import '../../../wallets/isar/providers/wallet_info_provider.dart'; import '../../../wallets/wallet/impl/banano_wallet.dart'; +import '../../../wallets/wallet/impl/firo_wallet.dart'; import '../../../widgets/conditional_parent.dart'; import 'wallet_balance_toggle_sheet.dart'; import 'wallet_refresh_button.dart'; @@ -45,7 +45,35 @@ class WalletSummaryInfo extends ConsumerWidget { final String walletId; final WalletSyncStatus initialSyncStatus; - void showSheet(BuildContext context) { + void showSheet(BuildContext context, WidgetRef ref) { + final wallet = + ref.watch(pWallets.select((value) => value.getWallet(walletId))); + final firoWallet = wallet as FiroWallet; + final availableBalances = getAvailableBalances(firoWallet); + + // Remove any elements whose balance is zero. + availableBalances.removeWhere((element) { + switch (element) { + case FiroType.spark: + return firoWallet.info.cachedBalanceTertiary.spendable.raw == + BigInt.zero; + case FiroType.lelantus: + return firoWallet.info.cachedBalanceSecondary.spendable.raw == + BigInt.zero; + case FiroType.public: + return firoWallet.info.cachedBalance.spendable.raw == BigInt.zero; + } + }); + + if (availableBalances.length <= 2) { + final state = ref.read(publicPrivateBalanceStateProvider.state).state; + final newState = availableBalances.firstWhere( + (balanceType) => balanceType != state, + orElse: () => availableBalances.first); + ref.read(publicPrivateBalanceStateProvider.state).state = newState; + return; + } + showModalBottomSheet( backgroundColor: Colors.transparent, context: context, @@ -60,6 +88,20 @@ class WalletSummaryInfo extends ConsumerWidget { ); } + List getAvailableBalances(FiroWallet firoWallet) { + final List availableBalances = []; + if (firoWallet.info.cachedBalanceTertiary.spendable.raw > BigInt.zero) { + availableBalances.add(FiroType.spark); + } + if (firoWallet.info.cachedBalanceSecondary.spendable.raw > BigInt.zero) { + availableBalances.add(FiroType.lelantus); + } + if (firoWallet.info.cachedBalance.spendable.raw > BigInt.zero) { + availableBalances.add(FiroType.public); + } + return availableBalances; + } + @override Widget build(BuildContext context, WidgetRef ref) { debugPrint("BUILD: $runtimeType"); @@ -87,8 +129,13 @@ class WalletSummaryInfo extends ConsumerWidget { final Amount balanceToShow; final String title; + final wallet = + ref.watch(pWallets.select((value) => value.getWallet(walletId))); + List availableBalances = []; + + if (wallet is FiroWallet) { + availableBalances = getAvailableBalances(wallet); - if (coin is Firo) { final type = ref.watch(publicPrivateBalanceStateProvider.state).state; title = "${_showAvailable ? "Available" : "Full"} ${type.name.capitalize()} balance"; @@ -140,9 +187,9 @@ class WalletSummaryInfo extends ConsumerWidget { crossAxisAlignment: CrossAxisAlignment.start, children: [ GestureDetector( - onTap: () { - showSheet(context); - }, + onTap: availableBalances.length > 1 + ? () => showSheet(context, ref) + : null, child: Row( children: [ Text( From 005fcdf44fdb1f2b17def91bdc9fc375da0152c9 Mon Sep 17 00:00:00 2001 From: sneurlax Date: Tue, 2 Jul 2024 11:14:23 -0500 Subject: [PATCH 2/5] hide down chevron contextually --- .../sub_widgets/wallet_summary_info.dart | 24 ++++++++++--------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/lib/pages/wallet_view/sub_widgets/wallet_summary_info.dart b/lib/pages/wallet_view/sub_widgets/wallet_summary_info.dart index ca434e576..5953da356 100644 --- a/lib/pages/wallet_view/sub_widgets/wallet_summary_info.dart +++ b/lib/pages/wallet_view/sub_widgets/wallet_summary_info.dart @@ -200,17 +200,19 @@ class WalletSummaryInfo extends ConsumerWidget { .textFavoriteCard, ), ), - const SizedBox( - width: 4, - ), - SvgPicture.asset( - Assets.svg.chevronDown, - color: Theme.of(context) - .extension()! - .textFavoriteCard, - width: 8, - height: 4, - ), + if (availableBalances.length > 1) ...[ + const SizedBox( + width: 4, + ), + SvgPicture.asset( + Assets.svg.chevronDown, + color: Theme.of(context) + .extension()! + .textFavoriteCard, + width: 8, + height: 4, + ), + ], ], ), ), From a69cc80e6167698da9cdbd800f7fe115001f1fc5 Mon Sep 17 00:00:00 2001 From: sneurlax Date: Tue, 2 Jul 2024 11:49:37 -0500 Subject: [PATCH 3/5] only affect firo wallets --- .../sub_widgets/wallet_summary_info.dart | 35 ++++++------------- 1 file changed, 10 insertions(+), 25 deletions(-) diff --git a/lib/pages/wallet_view/sub_widgets/wallet_summary_info.dart b/lib/pages/wallet_view/sub_widgets/wallet_summary_info.dart index 5953da356..39331ebb7 100644 --- a/lib/pages/wallet_view/sub_widgets/wallet_summary_info.dart +++ b/lib/pages/wallet_view/sub_widgets/wallet_summary_info.dart @@ -45,26 +45,8 @@ class WalletSummaryInfo extends ConsumerWidget { final String walletId; final WalletSyncStatus initialSyncStatus; - void showSheet(BuildContext context, WidgetRef ref) { - final wallet = - ref.watch(pWallets.select((value) => value.getWallet(walletId))); - final firoWallet = wallet as FiroWallet; - final availableBalances = getAvailableBalances(firoWallet); - - // Remove any elements whose balance is zero. - availableBalances.removeWhere((element) { - switch (element) { - case FiroType.spark: - return firoWallet.info.cachedBalanceTertiary.spendable.raw == - BigInt.zero; - case FiroType.lelantus: - return firoWallet.info.cachedBalanceSecondary.spendable.raw == - BigInt.zero; - case FiroType.public: - return firoWallet.info.cachedBalance.spendable.raw == BigInt.zero; - } - }); - + void showSheet( + BuildContext context, WidgetRef ref, List availableBalances) { if (availableBalances.length <= 2) { final state = ref.read(publicPrivateBalanceStateProvider.state).state; final newState = availableBalances.firstWhere( @@ -111,6 +93,8 @@ class WalletSummaryInfo extends ConsumerWidget { ); final coin = ref.watch(pWalletCoin(walletId)); final balance = ref.watch(pWalletBalance(walletId)); + final wallet = + ref.watch(pWallets.select((value) => value.getWallet(walletId))); final locale = ref.watch( localeServiceChangeNotifierProvider.select((value) => value.locale), @@ -129,8 +113,6 @@ class WalletSummaryInfo extends ConsumerWidget { final Amount balanceToShow; final String title; - final wallet = - ref.watch(pWallets.select((value) => value.getWallet(walletId))); List availableBalances = []; if (wallet is FiroWallet) { @@ -187,9 +169,12 @@ class WalletSummaryInfo extends ConsumerWidget { crossAxisAlignment: CrossAxisAlignment.start, children: [ GestureDetector( - onTap: availableBalances.length > 1 - ? () => showSheet(context, ref) - : null, + onTap: () { + if (availableBalances.isNotEmpty && + availableBalances.length > 1) { + showSheet(context, ref, availableBalances); + } + }, child: Row( children: [ Text( From 8faac03954c8edc41c60e5fe3b264df2676d4737 Mon Sep 17 00:00:00 2001 From: sneurlax Date: Tue, 2 Jul 2024 11:46:09 -0500 Subject: [PATCH 4/5] count pending balances as valid --- .../wallet_view/sub_widgets/wallet_summary_info.dart | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/lib/pages/wallet_view/sub_widgets/wallet_summary_info.dart b/lib/pages/wallet_view/sub_widgets/wallet_summary_info.dart index 39331ebb7..a2554fbe9 100644 --- a/lib/pages/wallet_view/sub_widgets/wallet_summary_info.dart +++ b/lib/pages/wallet_view/sub_widgets/wallet_summary_info.dart @@ -72,13 +72,18 @@ class WalletSummaryInfo extends ConsumerWidget { List getAvailableBalances(FiroWallet firoWallet) { final List availableBalances = []; - if (firoWallet.info.cachedBalanceTertiary.spendable.raw > BigInt.zero) { + if (firoWallet.info.cachedBalanceTertiary.spendable.raw > BigInt.zero || + firoWallet.info.cachedBalanceTertiary.pendingSpendable.raw > + BigInt.zero) { availableBalances.add(FiroType.spark); } - if (firoWallet.info.cachedBalanceSecondary.spendable.raw > BigInt.zero) { + if (firoWallet.info.cachedBalanceSecondary.spendable.raw > BigInt.zero || + firoWallet.info.cachedBalanceSecondary.pendingSpendable.raw > + BigInt.zero) { availableBalances.add(FiroType.lelantus); } - if (firoWallet.info.cachedBalance.spendable.raw > BigInt.zero) { + if (firoWallet.info.cachedBalance.spendable.raw > BigInt.zero || + firoWallet.info.cachedBalance.pendingSpendable.raw > BigInt.zero) { availableBalances.add(FiroType.public); } return availableBalances; From 90aae703aae02362308f05c8fabbbe841291d1ec Mon Sep 17 00:00:00 2001 From: julian Date: Mon, 29 Jul 2024 12:15:06 -0600 Subject: [PATCH 5/5] mobile balance toggle update --- .../sub_widgets/wallet_summary_info.dart | 65 +++++++------------ 1 file changed, 22 insertions(+), 43 deletions(-) diff --git a/lib/pages/wallet_view/sub_widgets/wallet_summary_info.dart b/lib/pages/wallet_view/sub_widgets/wallet_summary_info.dart index a2554fbe9..c9b973f5d 100644 --- a/lib/pages/wallet_view/sub_widgets/wallet_summary_info.dart +++ b/lib/pages/wallet_view/sub_widgets/wallet_summary_info.dart @@ -28,9 +28,9 @@ import '../../../utilities/enums/wallet_balance_toggle_state.dart'; import '../../../utilities/extensions/extensions.dart'; import '../../../utilities/text_styles.dart'; import '../../../wallets/crypto_currency/coins/banano.dart'; +import '../../../wallets/crypto_currency/coins/firo.dart'; import '../../../wallets/isar/providers/wallet_info_provider.dart'; import '../../../wallets/wallet/impl/banano_wallet.dart'; -import '../../../wallets/wallet/impl/firo_wallet.dart'; import '../../../widgets/conditional_parent.dart'; import 'wallet_balance_toggle_sheet.dart'; import 'wallet_refresh_button.dart'; @@ -45,17 +45,7 @@ class WalletSummaryInfo extends ConsumerWidget { final String walletId; final WalletSyncStatus initialSyncStatus; - void showSheet( - BuildContext context, WidgetRef ref, List availableBalances) { - if (availableBalances.length <= 2) { - final state = ref.read(publicPrivateBalanceStateProvider.state).state; - final newState = availableBalances.firstWhere( - (balanceType) => balanceType != state, - orElse: () => availableBalances.first); - ref.read(publicPrivateBalanceStateProvider.state).state = newState; - return; - } - + void showSheet(BuildContext context) { showModalBottomSheet( backgroundColor: Colors.transparent, context: context, @@ -70,25 +60,6 @@ class WalletSummaryInfo extends ConsumerWidget { ); } - List getAvailableBalances(FiroWallet firoWallet) { - final List availableBalances = []; - if (firoWallet.info.cachedBalanceTertiary.spendable.raw > BigInt.zero || - firoWallet.info.cachedBalanceTertiary.pendingSpendable.raw > - BigInt.zero) { - availableBalances.add(FiroType.spark); - } - if (firoWallet.info.cachedBalanceSecondary.spendable.raw > BigInt.zero || - firoWallet.info.cachedBalanceSecondary.pendingSpendable.raw > - BigInt.zero) { - availableBalances.add(FiroType.lelantus); - } - if (firoWallet.info.cachedBalance.spendable.raw > BigInt.zero || - firoWallet.info.cachedBalance.pendingSpendable.raw > BigInt.zero) { - availableBalances.add(FiroType.public); - } - return availableBalances; - } - @override Widget build(BuildContext context, WidgetRef ref) { debugPrint("BUILD: $runtimeType"); @@ -98,8 +69,6 @@ class WalletSummaryInfo extends ConsumerWidget { ); final coin = ref.watch(pWalletCoin(walletId)); final balance = ref.watch(pWalletBalance(walletId)); - final wallet = - ref.watch(pWallets.select((value) => value.getWallet(walletId))); final locale = ref.watch( localeServiceChangeNotifierProvider.select((value) => value.locale), @@ -112,17 +81,16 @@ class WalletSummaryInfo extends ConsumerWidget { priceAnd24hChangeNotifierProvider.select((value) => value.getPrice(coin)), ); - final _showAvailable = - ref.watch(walletBalanceToggleStateProvider.state).state == - WalletBalanceToggleState.available; + final _showAvailable = ref.watch(walletBalanceToggleStateProvider) == + WalletBalanceToggleState.available; final Amount balanceToShow; final String title; - List availableBalances = []; - if (wallet is FiroWallet) { - availableBalances = getAvailableBalances(wallet); + final bool toggleBalance; + if (coin is Firo) { + toggleBalance = false; final type = ref.watch(publicPrivateBalanceStateProvider.state).state; title = "${_showAvailable ? "Available" : "Full"} ${type.name.capitalize()} balance"; @@ -143,6 +111,7 @@ class WalletSummaryInfo extends ConsumerWidget { break; } } else { + toggleBalance = true; balanceToShow = _showAvailable ? balance.spendable : balance.total; title = _showAvailable ? "Available balance" : "Full balance"; } @@ -175,9 +144,19 @@ class WalletSummaryInfo extends ConsumerWidget { children: [ GestureDetector( onTap: () { - if (availableBalances.isNotEmpty && - availableBalances.length > 1) { - showSheet(context, ref, availableBalances); + if (toggleBalance) { + if (ref.read(walletBalanceToggleStateProvider) == + WalletBalanceToggleState.available) { + ref + .read(walletBalanceToggleStateProvider.notifier) + .state = WalletBalanceToggleState.full; + } else { + ref + .read(walletBalanceToggleStateProvider.notifier) + .state = WalletBalanceToggleState.available; + } + } else { + showSheet(context); } }, child: Row( @@ -190,7 +169,7 @@ class WalletSummaryInfo extends ConsumerWidget { .textFavoriteCard, ), ), - if (availableBalances.length > 1) ...[ + if (!toggleBalance) ...[ const SizedBox( width: 4, ),