From d67ab4934dae902da616bfd104eaf360c0359e54 Mon Sep 17 00:00:00 2001 From: M Date: Mon, 14 Sep 2020 15:08:33 +0300 Subject: [PATCH] Merge redesign part 6. --- lib/main.dart | 66 ++++++++++++++----------- lib/reactions/bootstrap.dart | 28 +++++++++-- lib/router.dart | 28 ++++++----- lib/src/screens/root/root.dart | 90 ++++++++++++++++++++++------------ 4 files changed, 137 insertions(+), 75 deletions(-) diff --git a/lib/main.dart b/lib/main.dart index 700ec9c2b..8f4080a30 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -1,4 +1,5 @@ import 'package:cake_wallet/reactions/bootstrap.dart'; +import 'package:cake_wallet/routes.dart'; import 'package:cake_wallet/store/app_store.dart'; import 'package:cake_wallet/store/authentication_store.dart'; import 'package:cake_wallet/core/auth_service.dart'; @@ -55,6 +56,8 @@ import 'package:cake_wallet/src/stores/seed_language/seed_language_store.dart'; bool isThemeChangerRegistered = false; +final navigatorKey = GlobalKey(); + void main() async { WidgetsFlutterBinding.ensureInitialized(); @@ -188,7 +191,9 @@ Future initialSetup( tradesSource: tradesSource, templates: templates, exchangeTemplates: exchangeTemplates); - await bootstrap(fiatConvertationService: fiatConvertationService); + await bootstrap( + fiatConvertationService: fiatConvertationService, + navigatorKey: navigatorKey); monero_wallet.onStartup(); } @@ -252,34 +257,37 @@ class MaterialAppWithTheme extends StatelessWidget { statusBarBrightness: statusBarBrightness, statusBarIconBrightness: statusBarIconBrightness)); - return MaterialApp( - debugShowCheckedModeBanner: false, - theme: theme.getTheme(), - localizationsDelegates: [ - S.delegate, - GlobalCupertinoLocalizations.delegate, - GlobalMaterialLocalizations.delegate, - GlobalWidgetsLocalizations.delegate, - ], - supportedLocales: S.delegate.supportedLocales, - locale: Locale(currentLanguage.getCurrentLanguage()), - onGenerateRoute: (settings) => Router.generateRoute( - sharedPreferences: sharedPreferences, - walletListService: walletListService, - walletService: walletService, - userService: userService, - settings: settings, - priceStore: priceStore, - walletStore: walletStore, - syncStore: syncStore, - balanceStore: balanceStore, - settingsStore: settingsStore, - contacts: contacts, - nodes: nodes, - trades: trades, - transactionDescriptions: transactionDescriptions), - home: Root( - authenticationStore: getIt.get(), + return Root( + authenticationStore: getIt.get(), + child: MaterialApp( + navigatorKey: navigatorKey, + debugShowCheckedModeBanner: false, + theme: theme.getTheme(), + localizationsDelegates: [ + S.delegate, + GlobalCupertinoLocalizations.delegate, + GlobalMaterialLocalizations.delegate, + GlobalWidgetsLocalizations.delegate, + ], + supportedLocales: S.delegate.supportedLocales, + locale: Locale(currentLanguage.getCurrentLanguage()), + onGenerateRoute: (settings) => Router.generateRoute( + sharedPreferences: sharedPreferences, + walletListService: walletListService, + walletService: walletService, + userService: userService, + settings: settings, + priceStore: priceStore, + walletStore: walletStore, + syncStore: syncStore, + balanceStore: balanceStore, + settingsStore: settingsStore, + contacts: contacts, + nodes: nodes, + trades: trades, + transactionDescriptions: transactionDescriptions), + initialRoute: Routes.login, // FIXME: get initial route! + // home: Container(color: Colors.blue), )); } } diff --git a/lib/reactions/bootstrap.dart b/lib/reactions/bootstrap.dart index b371ed74e..fd41c6ed5 100644 --- a/lib/reactions/bootstrap.dart +++ b/lib/reactions/bootstrap.dart @@ -1,7 +1,13 @@ import 'dart:async'; import 'package:cake_wallet/core/key_service.dart'; +import 'package:cake_wallet/router.dart'; +import 'package:cake_wallet/routes.dart'; import 'package:cake_wallet/src/domain/common/sync_status.dart'; +import 'package:cake_wallet/src/screens/auth/auth_page.dart'; +import 'package:cake_wallet/src/screens/dashboard/dashboard_page.dart'; +import 'package:flutter/cupertino.dart'; +import 'package:flutter/widgets.dart'; import 'package:mobx/mobx.dart'; import 'package:cake_wallet/di.dart'; import 'package:shared_preferences/shared_preferences.dart'; @@ -24,8 +30,7 @@ import 'package:cake_wallet/store/dashboard/fiat_convertation_store.dart'; // FIXME: move me Future loadCurrentWallet() async { final appStore = getIt.get(); - final name = 'test'; - getIt.get().getString('current_wallet_name'); + final name = getIt.get().getString('current_wallet_name'); final typeRaw = getIt.get().getInt('current_wallet_type') ?? 0; final type = deserializeFromInt(typeRaw); @@ -55,7 +60,8 @@ ReactionDisposer _onCurrentFiatCurrencyChangeDisposer; Timer _reconnectionTimer; Future bootstrap( - {FiatConvertationService fiatConvertationService}) async { + {FiatConvertationService fiatConvertationService, + GlobalKey navigatorKey}) async { final authenticationStore = getIt.get(); final settingsStore = getIt.get(); final fiatConvertationStore = getIt.get(); @@ -69,10 +75,26 @@ Future bootstrap( _initialAuthReaction ??= autorun((_) async { final state = authenticationStore.state; + print(state); if (state == AuthenticationState.installed) { await loadCurrentWallet(); } + + if (state == AuthenticationState.installed) { + await navigatorKey.currentState + .pushAndRemoveUntil(createLoginRoute(), (_) => false); + } + + if (state == AuthenticationState.allowed) { + await navigatorKey.currentState + .pushAndRemoveUntil(createDashboardRoute(), (_) => false); + } + + if (state == AuthenticationState.denied) { + await navigatorKey.currentState + .pushAndRemoveUntil(createWelcomeRoute(), (_) => false); + } }); _onCurrentWalletChangeReaction ??= diff --git a/lib/router.dart b/lib/router.dart index 14f658e0c..6ddedfc52 100644 --- a/lib/router.dart +++ b/lib/router.dart @@ -95,6 +95,15 @@ import 'package:cake_wallet/src/screens/new_wallet/new_wallet_type_page.dart'; import 'package:cake_wallet/src/screens/send/send_template_page.dart'; import 'package:cake_wallet/src/screens/exchange/exchange_template_page.dart'; +CupertinoPageRoute createDashboardRoute() => + CupertinoPageRoute(builder: (_) => getIt.get()); + +CupertinoPageRoute createLoginRoute() => CupertinoPageRoute( + builder: (context) => getIt.get(instanceName: 'login')); + +MaterialPageRoute createWelcomeRoute() => + MaterialPageRoute(builder: (_) => createWelcomePage()); + class Router { static Route generateRoute( {SharedPreferences sharedPreferences, @@ -239,7 +248,7 @@ class Router { : 'English'; // FIXME: Unnamed constant; English default and only one language for bitcoin. final walletRestorationFromKeysVM = - getIt.get(param1: [type, language]); + getIt.get(param1: [type, language]); return CupertinoPageRoute( builder: (_) => RestoreWalletFromKeysPage( @@ -255,7 +264,8 @@ class Router { case Routes.sendTemplate: return CupertinoPageRoute( - fullscreenDialog: true, builder: (_) => getIt.get()); + fullscreenDialog: true, + builder: (_) => getIt.get()); case Routes.receive: return CupertinoPageRoute( @@ -320,16 +330,8 @@ class Router { builder: (_) => getIt.get()); case Routes.login: - return CupertinoPageRoute(builder: (context) { - final authenticationStore = Provider.of(context); - - return createLoginPage( - sharedPreferences: sharedPreferences, - userService: userService, - walletService: walletService, - walletListService: walletListService, - authenticationStore: authenticationStore); - }); + return CupertinoPageRoute( + builder: (context) => getIt.get(instanceName: 'login')); case Routes.accountCreation: return CupertinoPageRoute( @@ -361,7 +363,7 @@ class Router { return MaterialPageRoute( builder: (_) => getIt.get()); - //ExchangeConfirmPage(trade: settings.arguments as Trade)); + //ExchangeConfirmPage(trade: settings.arguments as Trade)); case Routes.tradeDetails: return MaterialPageRoute(builder: (context) { diff --git a/lib/src/screens/root/root.dart b/lib/src/screens/root/root.dart index dff20b6d1..c1d289f70 100644 --- a/lib/src/screens/root/root.dart +++ b/lib/src/screens/root/root.dart @@ -25,10 +25,12 @@ import 'package:cake_wallet/src/screens/auth/auth_page.dart'; import 'package:cake_wallet/src/screens/welcome/create_welcome_page.dart'; class Root extends StatefulWidget { - Root({Key key, this.authenticationStore, this.appStore}) : super(key: key); + Root({Key key, this.authenticationStore, this.appStore, this.child}) + : super(key: key); final AuthenticationStore authenticationStore; final AppStore appStore; + final Widget child; @override RootState createState() => RootState(); @@ -37,12 +39,18 @@ class Root extends StatefulWidget { class RootState extends State with WidgetsBindingObserver { bool _isInactive; bool _postFrameCallback; + // GlobalKey _navKey; @override void initState() { _isInactive = false; _postFrameCallback = false; WidgetsBinding.instance.addObserver(this); + + // WidgetsBinding.instance.addPostFrameCallback((_) { + // _navKey.currentState.pushNamed(Routes.login); + // }); + super.initState(); } @@ -69,6 +77,8 @@ class RootState extends State with WidgetsBindingObserver { @override Widget build(BuildContext context) { + return widget.child; + // _authenticationStore = Provider.of(context); // final sharedPreferences = Provider.of(context); // final walletListService = Provider.of(context); @@ -82,39 +92,59 @@ class RootState extends State with WidgetsBindingObserver { // final walletStore = Provider.of(context); // final settingsStore = Provider.of(context); - if (_isInactive && !_postFrameCallback) { - _postFrameCallback = true; + // if (_isInactive && !_postFrameCallback) { + // _postFrameCallback = true; - WidgetsBinding.instance.addPostFrameCallback((_) { - Navigator.of(context).pushNamed(Routes.unlock, - arguments: (bool isAuthenticatedSuccessfully, AuthPageState auth) { - if (!isAuthenticatedSuccessfully) { - return; - } + // WidgetsBinding.instance.addPostFrameCallback((_) { + // Navigator.of(context).pushNamed(Routes.unlock, + // arguments: (bool isAuthenticatedSuccessfully, AuthPageState auth) { + // if (!isAuthenticatedSuccessfully) { + // return; + // } - setState(() { - _postFrameCallback = false; - _isInactive = false; - }); - auth.close(); - }); - }); - } + // setState(() { + // _postFrameCallback = false; + // _isInactive = false; + // }); + // auth.close(); + // }); + // }); + // } - return Observer(builder: (_) { - final state = widget.authenticationStore.state; + // return Navigator( + // key: _navKey, + // initialRoute: Routes.welcome, + // onGenerateRoute: Router.generateRoute( + // sharedPreferences: sharedPreferences, + // walletListService: walletListService, + // walletService: walletService, + // userService: userService, + // settings: settings, + // priceStore: priceStore, + // walletStore: walletStore, + // syncStore: syncStore, + // balanceStore: balanceStore, + // settingsStore: settingsStore, + // contacts: contacts, + // nodes: nodes, + // trades: trades, + // transactionDescriptions: transactionDescriptions), + // ); - if (state == AuthenticationState.denied) { - return createWelcomePage(); - } + // return Observer(builder: (_) { + // final state = widget.authenticationStore.state; - if (state == AuthenticationState.installed) { - return getIt.get(instanceName: 'login'); - } + // if (state == AuthenticationState.denied) { + // return createWelcomePage(); + // } - if (state == AuthenticationState.allowed) { - return getIt.get(); - } + // if (state == AuthenticationState.installed) { + // return getIt.get(instanceName: 'login'); + // } + + // if (state == AuthenticationState.allowed) { + // return getIt.get(); + // } // if (state == AuthenticationState.denied) { // return createWelcomePage(); @@ -148,7 +178,7 @@ class RootState extends State with WidgetsBindingObserver { // _authenticationStore.state = AuthenticationState.authenticated); // } - return Container(color: Colors.white); - }); + // return Container(color: Colors.white); + // }); } }