diff --git a/lib/reactions/on_authentication_state_change.dart b/lib/reactions/on_authentication_state_change.dart index cdbe39a31..d7652f78f 100644 --- a/lib/reactions/on_authentication_state_change.dart +++ b/lib/reactions/on_authentication_state_change.dart @@ -15,6 +15,7 @@ import 'package:cake_wallet/store/settings_store.dart'; import 'package:cake_wallet/utils/exception_handler.dart'; import 'package:cake_wallet/utils/show_pop_up.dart'; import 'package:cake_wallet/view_model/hardware_wallet/ledger_view_model.dart'; +import 'package:cake_wallet/view_model/link_view_model.dart'; import 'package:cw_core/wallet_info.dart'; import 'package:cw_core/wallet_type.dart'; import 'package:flutter/widgets.dart'; @@ -40,23 +41,19 @@ void startAuthenticationStateChange( _onAuthenticationStateChange ??= autorun((_) async { final state = authenticationStore.state; - if (state == AuthenticationState.installed && - !SettingsStoreBase.walletPasswordDirectInput) { + if (state == AuthenticationState.installed && !SettingsStoreBase.walletPasswordDirectInput) { try { if (!(await requireHardwareWalletConnection())) await loadCurrentWallet(); } catch (error, stack) { loginError = error; await ExceptionHandler.resetLastPopupDate(); - await ExceptionHandler.onError( - FlutterErrorDetails(exception: error, stack: stack)); + await ExceptionHandler.onError(FlutterErrorDetails(exception: error, stack: stack)); } return; } - if ([AuthenticationState.allowed, AuthenticationState.allowedCreate] - .contains(state)) { - if (state == AuthenticationState.allowed && - (await requireHardwareWalletConnection())) { + if ([AuthenticationState.allowed, AuthenticationState.allowedCreate].contains(state)) { + if (state == AuthenticationState.allowed && (await requireHardwareWalletConnection())) { await navigatorKey.currentState!.pushNamedAndRemoveUntil( Routes.connectDevices, (route) => false, @@ -116,15 +113,18 @@ void startAuthenticationStateChange( // await navigatorKey.currentState!.pushNamedAndRemoveUntil(Routes.connectDevices, (route) => false, arguments: ConnectDevicePageParams(walletType: walletType, onConnectDevice: onConnectDevice)); } else { - await navigatorKey.currentState! - .pushNamedAndRemoveUntil(Routes.dashboard, (route) => false); + navigatorKey.currentState!.pushNamedAndRemoveUntil(Routes.dashboard, (route) => false); } + WidgetsBinding.instance.addPostFrameCallback((_) { + final linkViewModel = getIt.get(); + linkViewModel.markReadyToOpenPage(); + }); + if (!(await authenticatedErrorStreamController.stream.isEmpty)) { await ExceptionHandler.showError( (await authenticatedErrorStreamController.stream.first).toString()); authenticatedErrorStreamController.stream.drain(); } - return; } }); } diff --git a/lib/view_model/link_view_model.dart b/lib/view_model/link_view_model.dart index fdffb9829..513f8d58e 100644 --- a/lib/view_model/link_view_model.dart +++ b/lib/view_model/link_view_model.dart @@ -1,3 +1,5 @@ +import 'dart:async'; + import 'package:cake_wallet/generated/i18n.dart'; import 'package:cake_wallet/reactions/wallet_connect.dart'; import 'package:cake_wallet/routes.dart'; @@ -21,6 +23,7 @@ class LinkViewModel { final AuthenticationStore authenticationStore; final GlobalKey navigatorKey; Uri? currentLink; + bool readyToOpenPage = false; bool get _isValidPaymentUri => currentLink?.path.isNotEmpty ?? false; bool get isWalletConnectLink => currentLink?.authority == 'wc'; @@ -93,7 +96,16 @@ class LinkViewModel { } catch (_) {} } + Future markReadyToOpenPage() async { + readyToOpenPage = true; + await handleLink(); + } + Future handleLink() async { + if (!readyToOpenPage) { + return; + } + String? route = getRouteToGo(); dynamic args = getRouteArgs(); if (route != null) {