mirror of
https://github.com/cypherstack/stack_wallet.git
synced 2025-03-15 16:12:16 +00:00
feat: go directly into wallet if only a single wallet exists for the specified currency on desktop
This commit is contained in:
parent
0080d25436
commit
3d2d0e4e73
1 changed files with 92 additions and 37 deletions
|
@ -19,15 +19,19 @@ import '../../providers/providers.dart';
|
|||
import '../../themes/coin_icon_provider.dart';
|
||||
import '../../themes/stack_colors.dart';
|
||||
import '../../utilities/amount/amount.dart';
|
||||
import '../../utilities/show_loading.dart';
|
||||
import '../../utilities/text_styles.dart';
|
||||
import '../../utilities/util.dart';
|
||||
import '../../wallets/crypto_currency/crypto_currency.dart';
|
||||
import '../../wallets/isar/providers/all_wallets_info_provider.dart';
|
||||
import '../../wallets/wallet/intermediate/lib_monero_wallet.dart';
|
||||
import '../../widgets/breathing.dart';
|
||||
import '../../widgets/conditional_parent.dart';
|
||||
import '../../widgets/desktop/desktop_dialog.dart';
|
||||
import '../../widgets/desktop/desktop_dialog_close_button.dart';
|
||||
import '../../widgets/dialogs/tor_warning_dialog.dart';
|
||||
import '../../widgets/rounded_white_container.dart';
|
||||
import 'wallet_view/desktop_wallet_view.dart';
|
||||
|
||||
class WalletSummaryTable extends ConsumerStatefulWidget {
|
||||
const WalletSummaryTable({super.key});
|
||||
|
@ -86,10 +90,7 @@ class DesktopWalletSummaryRow extends ConsumerStatefulWidget {
|
|||
|
||||
class _DesktopWalletSummaryRowState
|
||||
extends ConsumerState<DesktopWalletSummaryRow> {
|
||||
bool _hovering = false;
|
||||
|
||||
void _onPressed() async {
|
||||
// Check if Tor is enabled...
|
||||
Future<void> _checkTor() async {
|
||||
if (ref.read(prefsChangeNotifierProvider).useTor) {
|
||||
// ... and if the coin supports Tor.
|
||||
if (!widget.coin.torSupport) {
|
||||
|
@ -106,44 +107,97 @@ class _DesktopWalletSummaryRowState
|
|||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
showDialog<void>(
|
||||
context: context,
|
||||
builder: (_) => DesktopDialog(
|
||||
maxHeight: 600,
|
||||
maxWidth: 700,
|
||||
child: Column(
|
||||
children: [
|
||||
Row(
|
||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||
bool get goStraightIntoWallet =>
|
||||
Util.isDesktop && widget.walletCount == 1 && !widget.coin.hasTokenSupport;
|
||||
|
||||
bool _buttonLock = false;
|
||||
Future<void> _onPressedSingleWalletDesktop() async {
|
||||
if (_buttonLock) return;
|
||||
_buttonLock = true;
|
||||
try {
|
||||
await _checkTor();
|
||||
|
||||
if (mounted) {
|
||||
final wallet = ref.read(pWallets).wallets.firstWhere(
|
||||
(e) => e.cryptoCurrency.identifier == widget.coin.identifier);
|
||||
|
||||
final Future<void> loadFuture;
|
||||
if (wallet is LibMoneroWallet) {
|
||||
loadFuture =
|
||||
wallet.init().then((value) async => await (wallet).open());
|
||||
} else {
|
||||
loadFuture = wallet.init();
|
||||
}
|
||||
await showLoading(
|
||||
whileFuture: loadFuture,
|
||||
context: context,
|
||||
message: 'Opening ${wallet.info.name}',
|
||||
rootNavigator: Util.isDesktop,
|
||||
);
|
||||
|
||||
if (mounted) {
|
||||
await Navigator.of(context).pushNamed(
|
||||
DesktopWalletView.routeName,
|
||||
arguments: wallet.walletId,
|
||||
);
|
||||
}
|
||||
}
|
||||
} finally {
|
||||
_buttonLock = false;
|
||||
}
|
||||
}
|
||||
|
||||
void _onPressed() async {
|
||||
if (_buttonLock) return;
|
||||
_buttonLock = true;
|
||||
try {
|
||||
// Check if Tor is enabled...
|
||||
await _checkTor();
|
||||
|
||||
if (mounted) {
|
||||
await showDialog<void>(
|
||||
context: context,
|
||||
builder: (_) => DesktopDialog(
|
||||
maxHeight: 600,
|
||||
maxWidth: 700,
|
||||
child: Column(
|
||||
children: [
|
||||
Padding(
|
||||
padding: const EdgeInsets.only(left: 32),
|
||||
child: Text(
|
||||
"${widget.coin.prettyName} (${widget.coin.ticker}) wallets",
|
||||
style: STextStyles.desktopH3(context),
|
||||
Row(
|
||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||
children: [
|
||||
Padding(
|
||||
padding: const EdgeInsets.only(left: 32),
|
||||
child: Text(
|
||||
"${widget.coin.prettyName} (${widget.coin.ticker}) wallets",
|
||||
style: STextStyles.desktopH3(context),
|
||||
),
|
||||
),
|
||||
const DesktopDialogCloseButton(),
|
||||
],
|
||||
),
|
||||
Expanded(
|
||||
child: Padding(
|
||||
padding: const EdgeInsets.only(
|
||||
left: 32,
|
||||
right: 32,
|
||||
bottom: 32,
|
||||
),
|
||||
child: WalletsOverview(
|
||||
coin: widget.coin,
|
||||
navigatorState: Navigator.of(context),
|
||||
),
|
||||
),
|
||||
),
|
||||
const DesktopDialogCloseButton(),
|
||||
],
|
||||
),
|
||||
Expanded(
|
||||
child: Padding(
|
||||
padding: const EdgeInsets.only(
|
||||
left: 32,
|
||||
right: 32,
|
||||
bottom: 32,
|
||||
),
|
||||
child: WalletsOverview(
|
||||
coin: widget.coin,
|
||||
navigatorState: Navigator.of(context),
|
||||
),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
);
|
||||
),
|
||||
);
|
||||
}
|
||||
} finally {
|
||||
_buttonLock = false;
|
||||
}
|
||||
}
|
||||
|
||||
@override
|
||||
|
@ -152,7 +206,8 @@ class _DesktopWalletSummaryRowState
|
|||
child: RoundedWhiteContainer(
|
||||
padding: const EdgeInsets.all(20),
|
||||
hoverColor: Colors.transparent,
|
||||
onPressed: _onPressed,
|
||||
onPressed:
|
||||
goStraightIntoWallet ? _onPressedSingleWalletDesktop : _onPressed,
|
||||
child: Row(
|
||||
children: [
|
||||
Expanded(
|
||||
|
|
Loading…
Reference in a new issue