Merge redesign part 6.

M committed Sep 14, 2020 at 15:08 UTC d67ab4934dae902da616bfd104eaf360c0359e54
4 files changed +143 -81
lib/main.dart
+37 -29
@@ -1,4 +1,5 @@
1 import 'package:cake_wallet/reactions/bootstrap.dart';
2 +import 'package:cake_wallet/routes.dart';
3 import 'package:cake_wallet/store/app_store.dart';
4 import 'package:cake_wallet/store/authentication_store.dart';
5 import 'package:cake_wallet/core/auth_service.dart';
@@ -55,6 +56,8 @@ import 'package:cake_wallet/src/stores/seed_language/seed_language_store.dart';
56
57 bool isThemeChangerRegistered = false;
58
59 +final navigatorKey = GlobalKey<NavigatorState>();
60 +
61 void main() async {
62 WidgetsFlutterBinding.ensureInitialized();
63
@@ -188,7 +191,9 @@ Future<void> initialSetup(
191 tradesSource: tradesSource,
192 templates: templates,
193 exchangeTemplates: exchangeTemplates);
191 - await bootstrap(fiatConvertationService: fiatConvertationService);
194 + await bootstrap(
195 + fiatConvertationService: fiatConvertationService,
196 + navigatorKey: navigatorKey);
197 monero_wallet.onStartup();
198 }
199
@@ -252,34 +257,37 @@ class MaterialAppWithTheme extends StatelessWidget {
257 statusBarBrightness: statusBarBrightness,
258 statusBarIconBrightness: statusBarIconBrightness));
259
255 - return MaterialApp(
256 - debugShowCheckedModeBanner: false,
257 - theme: theme.getTheme(),
258 - localizationsDelegates: [
259 - S.delegate,
260 - GlobalCupertinoLocalizations.delegate,
261 - GlobalMaterialLocalizations.delegate,
262 - GlobalWidgetsLocalizations.delegate,
263 - ],
264 - supportedLocales: S.delegate.supportedLocales,
265 - locale: Locale(currentLanguage.getCurrentLanguage()),
266 - onGenerateRoute: (settings) => Router.generateRoute(
267 - sharedPreferences: sharedPreferences,
268 - walletListService: walletListService,
269 - walletService: walletService,
270 - userService: userService,
271 - settings: settings,
272 - priceStore: priceStore,
273 - walletStore: walletStore,
274 - syncStore: syncStore,
275 - balanceStore: balanceStore,
276 - settingsStore: settingsStore,
277 - contacts: contacts,
278 - nodes: nodes,
279 - trades: trades,
280 - transactionDescriptions: transactionDescriptions),
281 - home: Root(
282 - authenticationStore: getIt.get<AuthenticationStore>(),
260 + return Root(
261 + authenticationStore: getIt.get<AuthenticationStore>(),
262 + child: MaterialApp(
263 + navigatorKey: navigatorKey,
264 + debugShowCheckedModeBanner: false,
265 + theme: theme.getTheme(),
266 + localizationsDelegates: [
267 + S.delegate,
268 + GlobalCupertinoLocalizations.delegate,
269 + GlobalMaterialLocalizations.delegate,
270 + GlobalWidgetsLocalizations.delegate,
271 + ],
272 + supportedLocales: S.delegate.supportedLocales,
273 + locale: Locale(currentLanguage.getCurrentLanguage()),
274 + onGenerateRoute: (settings) => Router.generateRoute(
275 + sharedPreferences: sharedPreferences,
276 + walletListService: walletListService,
277 + walletService: walletService,
278 + userService: userService,
279 + settings: settings,
280 + priceStore: priceStore,
281 + walletStore: walletStore,
282 + syncStore: syncStore,
283 + balanceStore: balanceStore,
284 + settingsStore: settingsStore,
285 + contacts: contacts,
286 + nodes: nodes,
287 + trades: trades,
288 + transactionDescriptions: transactionDescriptions),
289 + initialRoute: Routes.login, // FIXME: get initial route!
290 + // home: Container(color: Colors.blue),
291 ));
292 }
293 }
lib/reactions/bootstrap.dart
+25 -3
@@ -1,7 +1,13 @@
1 import 'dart:async';
2
3 import 'package:cake_wallet/core/key_service.dart';
4 +import 'package:cake_wallet/router.dart';
5 +import 'package:cake_wallet/routes.dart';
6 import 'package:cake_wallet/src/domain/common/sync_status.dart';
7 +import 'package:cake_wallet/src/screens/auth/auth_page.dart';
8 +import 'package:cake_wallet/src/screens/dashboard/dashboard_page.dart';
9 +import 'package:flutter/cupertino.dart';
10 +import 'package:flutter/widgets.dart';
11 import 'package:mobx/mobx.dart';
12 import 'package:cake_wallet/di.dart';
13 import 'package:shared_preferences/shared_preferences.dart';
@@ -24,8 +30,7 @@ import 'package:cake_wallet/store/dashboard/fiat_convertation_store.dart';
30 // FIXME: move me
31 Future<void> loadCurrentWallet() async {
32 final appStore = getIt.get<AppStore>();
27 - final name = 'test';
28 - getIt.get<SharedPreferences>().getString('current_wallet_name');
33 + final name = getIt.get<SharedPreferences>().getString('current_wallet_name');
34 final typeRaw =
35 getIt.get<SharedPreferences>().getInt('current_wallet_type') ?? 0;
36 final type = deserializeFromInt(typeRaw);
@@ -55,7 +60,8 @@ ReactionDisposer _onCurrentFiatCurrencyChangeDisposer;
60 Timer _reconnectionTimer;
61
62 Future<void> bootstrap(
58 - {FiatConvertationService fiatConvertationService}) async {
63 + {FiatConvertationService fiatConvertationService,
64 + GlobalKey<NavigatorState> navigatorKey}) async {
65 final authenticationStore = getIt.get<AuthenticationStore>();
66 final settingsStore = getIt.get<SettingsStore>();
67 final fiatConvertationStore = getIt.get<FiatConvertationStore>();
@@ -69,10 +75,26 @@ Future<void> bootstrap(
75
76 _initialAuthReaction ??= autorun((_) async {
77 final state = authenticationStore.state;
78 + print(state);
79
80 if (state == AuthenticationState.installed) {
81 await loadCurrentWallet();
82 }
83 +
84 + if (state == AuthenticationState.installed) {
85 + await navigatorKey.currentState
86 + .pushAndRemoveUntil(createLoginRoute(), (_) => false);
87 + }
88 +
89 + if (state == AuthenticationState.allowed) {
90 + await navigatorKey.currentState
91 + .pushAndRemoveUntil(createDashboardRoute(), (_) => false);
92 + }
93 +
94 + if (state == AuthenticationState.denied) {
95 + await navigatorKey.currentState
96 + .pushAndRemoveUntil(createWelcomeRoute(), (_) => false);
97 + }
98 });
99
100 _onCurrentWalletChangeReaction ??=
lib/router.dart
+15 -13
@@ -95,6 +95,15 @@ import 'package:cake_wallet/src/screens/new_wallet/new_wallet_type_page.dart';
95 import 'package:cake_wallet/src/screens/send/send_template_page.dart';
96 import 'package:cake_wallet/src/screens/exchange/exchange_template_page.dart';
97
98 +CupertinoPageRoute<void> createDashboardRoute() =>
99 + CupertinoPageRoute<void>(builder: (_) => getIt.get<DashboardPage>());
100 +
101 +CupertinoPageRoute<void> createLoginRoute() => CupertinoPageRoute<void>(
102 + builder: (context) => getIt.get<AuthPage>(instanceName: 'login'));
103 +
104 +MaterialPageRoute<void> createWelcomeRoute() =>
105 + MaterialPageRoute<void>(builder: (_) => createWelcomePage());
106 +
107 class Router {
108 static Route<dynamic> generateRoute(
109 {SharedPreferences sharedPreferences,
@@ -239,7 +248,7 @@ class Router {
248 : 'English'; // FIXME: Unnamed constant; English default and only one language for bitcoin.
249
250 final walletRestorationFromKeysVM =
242 - getIt.get<WalletRestorationFromKeysVM>(param1: [type, language]);
251 + getIt.get<WalletRestorationFromKeysVM>(param1: [type, language]);
252
253 return CupertinoPageRoute<void>(
254 builder: (_) => RestoreWalletFromKeysPage(
@@ -255,7 +264,8 @@ class Router {
264
265 case Routes.sendTemplate:
266 return CupertinoPageRoute<void>(
258 - fullscreenDialog: true, builder: (_) => getIt.get<SendTemplatePage>());
267 + fullscreenDialog: true,
268 + builder: (_) => getIt.get<SendTemplatePage>());
269
270 case Routes.receive:
271 return CupertinoPageRoute<void>(
@@ -320,16 +330,8 @@ class Router {
330 builder: (_) => getIt.get<NodeCreateOrEditPage>());
331
332 case Routes.login:
323 - return CupertinoPageRoute<void>(builder: (context) {
324 - final authenticationStore = Provider.of<AuthenticationStore>(context);
325 -
326 - return createLoginPage(
327 - sharedPreferences: sharedPreferences,
328 - userService: userService,
329 - walletService: walletService,
330 - walletListService: walletListService,
331 - authenticationStore: authenticationStore);
332 - });
333 + return CupertinoPageRoute<void>(
334 + builder: (context) => getIt.get<AuthPage>(instanceName: 'login'));
335
336 case Routes.accountCreation:
337 return CupertinoPageRoute<String>(
@@ -361,7 +363,7 @@ class Router {
363 return MaterialPageRoute<void>(
364 builder: (_) => getIt.get<ExchangeConfirmPage>());
365
364 - //ExchangeConfirmPage(trade: settings.arguments as Trade));
366 + //ExchangeConfirmPage(trade: settings.arguments as Trade));
367
368 case Routes.tradeDetails:
369 return MaterialPageRoute<void>(builder: (context) {
lib/src/screens/root/root.dart
+66 -36
@@ -25,10 +25,12 @@ import 'package:cake_wallet/src/screens/auth/auth_page.dart';
25 import 'package:cake_wallet/src/screens/welcome/create_welcome_page.dart';
26
27 class Root extends StatefulWidget {
28 - Root({Key key, this.authenticationStore, this.appStore}) : super(key: key);
28 + Root({Key key, this.authenticationStore, this.appStore, this.child})
29 + : super(key: key);
30
31 final AuthenticationStore authenticationStore;
32 final AppStore appStore;
33 + final Widget child;
34
35 @override
36 RootState createState() => RootState();
@@ -37,12 +39,18 @@ class Root extends StatefulWidget {
39 class RootState extends State<Root> with WidgetsBindingObserver {
40 bool _isInactive;
41 bool _postFrameCallback;
42 + // GlobalKey<NavigatorState> _navKey;
43
44 @override
45 void initState() {
46 _isInactive = false;
47 _postFrameCallback = false;
48 WidgetsBinding.instance.addObserver(this);
49 +
50 + // WidgetsBinding.instance.addPostFrameCallback((_) {
51 + // _navKey.currentState.pushNamed(Routes.login);
52 + // });
53 +
54 super.initState();
55 }
56
@@ -69,6 +77,8 @@ class RootState extends State<Root> with WidgetsBindingObserver {
77
78 @override
79 Widget build(BuildContext context) {
80 + return widget.child;
81 +
82 // _authenticationStore = Provider.of<AuthenticationStore>(context);
83 // final sharedPreferences = Provider.of<SharedPreferences>(context);
84 // final walletListService = Provider.of<WalletListService>(context);
@@ -82,39 +92,59 @@ class RootState extends State<Root> with WidgetsBindingObserver {
92 // final walletStore = Provider.of<WalletStore>(context);
93 // final settingsStore = Provider.of<SettingsStore>(context);
94
85 - if (_isInactive && !_postFrameCallback) {
86 - _postFrameCallback = true;
87 -
88 - WidgetsBinding.instance.addPostFrameCallback((_) {
89 - Navigator.of(context).pushNamed(Routes.unlock,
90 - arguments: (bool isAuthenticatedSuccessfully, AuthPageState auth) {
91 - if (!isAuthenticatedSuccessfully) {
92 - return;
93 - }
94 -
95 - setState(() {
96 - _postFrameCallback = false;
97 - _isInactive = false;
98 - });
99 - auth.close();
100 - });
101 - });
102 - }
103 -
104 - return Observer(builder: (_) {
105 - final state = widget.authenticationStore.state;
106 -
107 - if (state == AuthenticationState.denied) {
108 - return createWelcomePage();
109 - }
110 -
111 - if (state == AuthenticationState.installed) {
112 - return getIt.get<AuthPage>(instanceName: 'login');
113 - }
114 -
115 - if (state == AuthenticationState.allowed) {
116 - return getIt.get<DashboardPage>();
117 - }
95 + // if (_isInactive && !_postFrameCallback) {
96 + // _postFrameCallback = true;
97 +
98 + // WidgetsBinding.instance.addPostFrameCallback((_) {
99 + // Navigator.of(context).pushNamed(Routes.unlock,
100 + // arguments: (bool isAuthenticatedSuccessfully, AuthPageState auth) {
101 + // if (!isAuthenticatedSuccessfully) {
102 + // return;
103 + // }
104 +
105 + // setState(() {
106 + // _postFrameCallback = false;
107 + // _isInactive = false;
108 + // });
109 + // auth.close();
110 + // });
111 + // });
112 + // }
113 +
114 + // return Navigator(
115 + // key: _navKey,
116 + // initialRoute: Routes.welcome,
117 + // onGenerateRoute: Router.generateRoute(
118 + // sharedPreferences: sharedPreferences,
119 + // walletListService: walletListService,
120 + // walletService: walletService,
121 + // userService: userService,
122 + // settings: settings,
123 + // priceStore: priceStore,
124 + // walletStore: walletStore,
125 + // syncStore: syncStore,
126 + // balanceStore: balanceStore,
127 + // settingsStore: settingsStore,
128 + // contacts: contacts,
129 + // nodes: nodes,
130 + // trades: trades,
131 + // transactionDescriptions: transactionDescriptions),
132 + // );
133 +
134 + // return Observer(builder: (_) {
135 + // final state = widget.authenticationStore.state;
136 +
137 + // if (state == AuthenticationState.denied) {
138 + // return createWelcomePage();
139 + // }
140 +
141 + // if (state == AuthenticationState.installed) {
142 + // return getIt.get<AuthPage>(instanceName: 'login');
143 + // }
144 +
145 + // if (state == AuthenticationState.allowed) {
146 + // return getIt.get<DashboardPage>();
147 + // }
148
149 // if (state == AuthenticationState.denied) {
150 // return createWelcomePage();
@@ -148,7 +178,7 @@ class RootState extends State<Root> with WidgetsBindingObserver {
178 // _authenticationStore.state = AuthenticationState.authenticated);
179 // }
180
151 - return Container(color: Colors.white);
152 - });
181 + // return Container(color: Colors.white);
182 + // });
183 }
184 }