info page refactoring

Serhii committed Dec 30, 2023 at 21:55 UTC 3522561cfcbe420caee880988990af3fb8379973
9 files changed +148 -96
lib/di.dart
+6 -3
@@ -50,6 +50,7 @@ import 'package:cake_wallet/src/screens/settings/connection_sync_page.dart';
50 import 'package:cake_wallet/src/screens/settings/trocador_providers_page.dart';
51 import 'package:cake_wallet/src/screens/settings/tor_page.dart';
52 import 'package:cake_wallet/src/screens/setup_2fa/modify_2fa_page.dart';
53 +import 'package:cake_wallet/src/screens/setup_2fa/setup_2fa_info_page.dart';
54 import 'package:cake_wallet/src/screens/setup_2fa/setup_2fa_qr_page.dart';
55 import 'package:cake_wallet/src/screens/setup_2fa/setup_2fa.dart';
56 import 'package:cake_wallet/src/screens/setup_2fa/setup_2fa_enter_code_page.dart';
@@ -133,7 +134,7 @@ import 'package:cake_wallet/src/screens/rescan/rescan_page.dart';
134 import 'package:cake_wallet/src/screens/restore/restore_from_backup_page.dart';
135 import 'package:cake_wallet/src/screens/restore/restore_options_page.dart';
136 import 'package:cake_wallet/src/screens/restore/wallet_restore_page.dart';
136 -import 'package:cake_wallet/src/screens/seed/warning_page.dart';
137 +import 'package:cake_wallet/src/screens/seed/pre_seed_page.dart';
138 import 'package:cake_wallet/src/screens/seed/wallet_seed_page.dart';
139 import 'package:cake_wallet/src/screens/send/send_template_page.dart';
140 import 'package:cake_wallet/src/screens/setup_pin_code/setup_pin_code.dart';
@@ -524,6 +525,8 @@ Future<void> setup({
525 getIt.registerFactory<TransactionsPage>(
526 () => TransactionsPage(dashboardViewModel: getIt.get<DashboardViewModel>()));
527
528 + getIt.registerFactory<Setup2FAInfoPage>(() => Setup2FAInfoPage());
529 +
530 getIt.registerFactory<Setup2FAPage>(
531 () => Setup2FAPage(setup2FAViewModel: getIt.get<Setup2FAViewModel>()));
532
@@ -915,9 +918,9 @@ Future<void> setup({
918 getIt.registerFactoryParam<NewWalletTypePage, void Function(BuildContext, WalletType), bool?>(
919 (param1, isCreate) => NewWalletTypePage(onTypeSelected: param1, isCreate: isCreate ?? true));
920
918 - getIt.registerFactoryParam<WarningPage, int?, void>(
921 + getIt.registerFactoryParam<PreSeedPage, int, void>(
922 (seedPhraseLength, _)
920 - => WarningPage(seedPhraseLength));
923 + => PreSeedPage(seedPhraseLength));
924
925 getIt.registerFactoryParam<TradeDetailsViewModel, Trade, void>((trade, _) =>
926 TradeDetailsViewModel(
lib/router.dart
+8 -4
@@ -42,11 +42,12 @@ import 'package:cake_wallet/src/screens/order_details/order_details_page.dart';
42 import 'package:cake_wallet/src/screens/pin_code/pin_code_widget.dart';
43 import 'package:cake_wallet/src/screens/restore/restore_from_backup_page.dart';
44 import 'package:cake_wallet/src/screens/restore/wallet_restore_page.dart';
45 -import 'package:cake_wallet/src/screens/seed/warning_page.dart';
45 +import 'package:cake_wallet/src/screens/seed/pre_seed_page.dart';
46 import 'package:cake_wallet/src/screens/settings/connection_sync_page.dart';
47 import 'package:cake_wallet/src/screens/settings/trocador_providers_page.dart';
48 import 'package:cake_wallet/src/screens/settings/tor_page.dart';
49 import 'package:cake_wallet/src/screens/setup_2fa/modify_2fa_page.dart';
50 +import 'package:cake_wallet/src/screens/setup_2fa/setup_2fa_info_page.dart';
51 import 'package:cake_wallet/src/screens/setup_2fa/setup_2fa_qr_page.dart';
52 import 'package:cake_wallet/src/screens/setup_2fa/setup_2fa.dart';
53 import 'package:cake_wallet/src/screens/setup_2fa/setup_2fa_enter_code_page.dart';
@@ -414,10 +415,10 @@ Route<dynamic> createRoute(RouteSettings settings) {
415 case Routes.faq:
416 return MaterialPageRoute<void>(builder: (_) => getIt.get<FaqPage>());
417
417 - case Routes.warningPage:
418 + case Routes.preSeedPage:
419 return MaterialPageRoute<void>(
419 - builder: (_) => getIt.get<WarningPage>(
420 - param1: settings.arguments as int?));
420 + builder: (_) => getIt.get<PreSeedPage>(
421 + param1: settings.arguments as int));
422
423 case Routes.backup:
424 return CupertinoPageRoute<void>(
@@ -580,6 +581,9 @@ Route<dynamic> createRoute(RouteSettings settings) {
581 case Routes.modify2FAPage:
582 return MaterialPageRoute<void>(builder: (_) => getIt.get<Modify2FAPage>());
583
584 + case Routes.setup2faInfoPage:
585 + return MaterialPageRoute<void>(builder: (_) => getIt.get<Setup2FAInfoPage>());
586 +
587 case Routes.homeSettings:
588 return CupertinoPageRoute<void>(
589 builder: (_) => getIt.get<HomeSettingsPage>(param1: settings.arguments),
lib/routes.dart
+2 -1
@@ -47,7 +47,7 @@ class Routes {
47 static const exchangeTemplate = '/exchange_template';
48 static const restoreWalletType = '/restore_wallet_type';
49 static const restoreWallet = '/restore_wallet';
50 - static const warningPage = '/warning_page';
50 + static const preSeedPage = '/pre_seed_page';
51 static const backup = '/backup';
52 static const editBackupPassword = '/edit_backup_passowrd';
53 static const restoreFromBackup = '/restore_from_backup';
@@ -96,6 +96,7 @@ class Routes {
96 static const setup_2faQRPage = '/setup_2fa_qr_page';
97 static const totpAuthCodePage = '/totp_auth_code_page';
98 static const modify2FAPage = '/modify_2fa_page';
99 + static const setup2faInfoPage = '/setup_2fa_info_page';
100 static const homeSettings = '/home_settings';
101 static const editToken = '/edit_token';
102 static const manageNodes = '/manage_nodes';
lib/src/screens/InfoPage.dart new
+83
@@ -0,0 +1,83 @@
1 +import 'package:cake_wallet/src/screens/base_page.dart';
2 +import 'package:cake_wallet/src/widgets/primary_button.dart';
3 +import 'package:cake_wallet/themes/extensions/cake_text_theme.dart';
4 +import 'package:cake_wallet/themes/theme_base.dart';
5 +import 'package:cake_wallet/utils/responsive_layout_util.dart';
6 +import 'package:flutter/material.dart';
7 +
8 +abstract class InfoPage extends BasePage {
9 + InfoPage({
10 + this.imageLightPath = 'assets/images/pre_seed_light.png',
11 + this.imageDarkPath = 'assets/images/pre_seed_dark.png',
12 + });
13 +
14 + final String imageLightPath;
15 + final String imageDarkPath;
16 +
17 + Image get imageLight => Image.asset(imageLightPath);
18 + Image get imageDark => Image.asset(imageDarkPath);
19 +
20 + bool get onWillPop => true;
21 + String get pageTitle;
22 + String get pageDescription;
23 + String get buttonText;
24 + void Function(BuildContext) get onPressed;
25 +
26 + @override
27 + Widget? leading(BuildContext context) => null;
28 +
29 + @override
30 + String get title => pageTitle;
31 +
32 + @override
33 + Widget body(BuildContext context) {
34 + final image = currentTheme.type == ThemeType.dark ? imageDark : imageLight;
35 +
36 + return WillPopScope(
37 + onWillPop: () async => onWillPop,
38 + child: Container(
39 + alignment: Alignment.center,
40 + padding: EdgeInsets.all(24),
41 + child: ConstrainedBox(
42 + constraints: BoxConstraints(
43 + maxWidth: ResponsiveLayoutUtilBase.kDesktopMaxWidthConstraint),
44 + child: Column(
45 + mainAxisAlignment: MainAxisAlignment.spaceBetween,
46 + children: <Widget>[
47 + Expanded(
48 + child: ConstrainedBox(
49 + constraints: BoxConstraints(
50 + maxHeight: MediaQuery.of(context).size.height * 0.3),
51 + child: AspectRatio(aspectRatio: 1, child: image),
52 + ),
53 + ),
54 + Expanded(
55 + child: Padding(
56 + padding: EdgeInsets.all(10),
57 + child: Text(
58 + pageDescription,
59 + textAlign: TextAlign.center,
60 + style: TextStyle(
61 + height: 1.7,
62 + fontSize: 14,
63 + fontWeight: FontWeight.normal,
64 + color: Theme.of(context)
65 + .extension<CakeTextTheme>()!
66 + .secondaryTextColor,
67 + ),
68 + ),
69 + ),
70 + ),
71 + PrimaryButton(
72 + onPressed: () => onPressed(context),
73 + text: buttonText,
74 + color: Theme.of(context).primaryColor,
75 + textColor: Colors.white,
76 + ),
77 + ],
78 + ),
79 + ),
80 + ),
81 + );
82 + }
83 +}
lib/src/screens/new_wallet/new_wallet_page.dart
+1 -1
@@ -73,7 +73,7 @@ class _WalletNameFormState extends State<WalletNameForm> {
73 _stateReaction ??= reaction((_) => _walletNewVM.state, (ExecutionState state) async {
74 if (state is ExecutedSuccessfullyState) {
75 Navigator.of(navigatorKey.currentContext!)
76 - .pushNamed(Routes.warningPage, arguments: _walletNewVM.seedPhraseWordsLength);
76 + .pushNamed(Routes.preSeedPage, arguments: _walletNewVM.seedPhraseWordsLength);
77 }
78
79 if (state is FailureState) {
lib/src/screens/seed/pre_seed_page.dart new
+27
@@ -0,0 +1,27 @@
1 +import 'package:cake_wallet/generated/i18n.dart';
2 +import 'package:cake_wallet/routes.dart';
3 +import 'package:cake_wallet/src/screens/InfoPage.dart';
4 +import 'package:flutter/cupertino.dart';
5 +
6 +class PreSeedPage extends InfoPage {
7 + PreSeedPage(this.seedPhraseLength);
8 +
9 + final int seedPhraseLength;
10 +
11 + @override
12 + bool get onWillPop => false;
13 +
14 + @override
15 + String get pageTitle => S.current.pre_seed_title;
16 +
17 + @override
18 + String get pageDescription =>
19 + S.current.pre_seed_description(seedPhraseLength.toString());
20 +
21 + @override
22 + String get buttonText => S.current.pre_seed_button_text;
23 +
24 + @override
25 + void Function(BuildContext) get onPressed => (BuildContext context) =>
26 + Navigator.of(context).popAndPushNamed(Routes.seed, arguments: true);
27 +}
lib/src/screens/seed/warning_page.dart deleted
-86
@@ -1,86 +0,0 @@
1 -import 'package:cake_wallet/utils/responsive_layout_util.dart';
2 -import 'package:cake_wallet/themes/extensions/cake_text_theme.dart';
3 -import 'package:cake_wallet/view_model/advanced_privacy_settings_view_model.dart';
4 -import 'package:cw_core/wallet_type.dart';
5 -import 'package:cake_wallet/src/screens/base_page.dart';
6 -import 'package:cake_wallet/src/widgets/primary_button.dart';
7 -import 'package:cake_wallet/generated/i18n.dart';
8 -import 'package:cake_wallet/routes.dart';
9 -import 'package:cake_wallet/themes/theme_base.dart';
10 -import 'package:flutter/material.dart';
11 -
12 -class WarningPage extends BasePage {
13 - WarningPage(this.seedPhraseLength)
14 - : isPreSeedPage = seedPhraseLength != null,
15 - imageLight = Image.asset('assets/images/pre_seed_light.png'),
16 - imageDark = Image.asset('assets/images/pre_seed_dark.png');
17 -
18 - final Image imageDark;
19 - final Image imageLight;
20 - final int? seedPhraseLength;
21 - final bool isPreSeedPage;
22 -
23 - @override
24 - Widget? leading(BuildContext context) =>
25 - isPreSeedPage ? null : super.leading(context);
26 -
27 - @override
28 - String? get title => S.current.pre_seed_title;
29 -
30 - @override
31 - Widget body(BuildContext context) {
32 - final image = currentTheme.type == ThemeType.dark ? imageDark : imageLight;
33 -
34 - return WillPopScope(
35 - onWillPop: () async => !isPreSeedPage,
36 - child: Container(
37 - alignment: Alignment.center,
38 - padding: EdgeInsets.all(24),
39 - child: ConstrainedBox(
40 - constraints: BoxConstraints(
41 - maxWidth: ResponsiveLayoutUtilBase.kDesktopMaxWidthConstraint),
42 - child: Column(
43 - mainAxisAlignment: MainAxisAlignment.spaceBetween,
44 - children: <Widget>[
45 - Expanded(
46 - child: ConstrainedBox(
47 - constraints: BoxConstraints(
48 - maxHeight: MediaQuery.of(context).size.height * 0.3),
49 - child: AspectRatio(aspectRatio: 1, child: image),
50 - ),
51 - ),
52 - Expanded(
53 - child: Padding(
54 - padding: EdgeInsets.all(10),
55 - child: Text(
56 - isPreSeedPage
57 - ? S.of(context).pre_seed_description(
58 - seedPhraseLength.toString())
59 - : S.of(context).setup_warning_2fa_text,
60 - textAlign: TextAlign.center,
61 - style: TextStyle(
62 - height: 1.7,
63 - fontSize: 14,
64 - fontWeight: FontWeight.normal,
65 - color: Theme.of(context)
66 - .extension<CakeTextTheme>()!
67 - .secondaryTextColor)),
68 - ),
69 - ),
70 - PrimaryButton(
71 - onPressed: () => isPreSeedPage
72 - ? Navigator.of(context)
73 - .popAndPushNamed(Routes.seed, arguments: true)
74 - : Navigator.of(context)
75 - .popAndPushNamed(Routes.setup_2faPage),
76 - text: isPreSeedPage
77 - ? S.of(context).pre_seed_button_text
78 - : S.of(context).understand,
79 - color: Theme.of(context).primaryColor,
80 - textColor: Colors.white)
81 - ],
82 - ),
83 - ),
84 - ));
85 - }
86 -}
lib/src/screens/settings/security_backup_page.dart
+1 -1
@@ -108,7 +108,7 @@ class SecurityBackupPage extends BasePage {
108 context,
109 route: _securitySettingsViewModel.useTotp2FA
110 ? Routes.modify2FAPage
111 - : Routes.warningPage,
111 + : Routes.setup2faInfoPage,
112 conditionToDetermineIfToUse2FA: _securitySettingsViewModel
113 .shouldRequireTOTP2FAForAllSecurityAndBackupSettings,
114 ),
lib/src/screens/setup_2fa/setup_2fa_info_page.dart new
+20
@@ -0,0 +1,20 @@
1 +import 'package:cake_wallet/generated/i18n.dart';
2 +import 'package:cake_wallet/routes.dart';
3 +import 'package:cake_wallet/src/screens/InfoPage.dart';
4 +import 'package:flutter/cupertino.dart';
5 +
6 +class Setup2FAInfoPage extends InfoPage {
7 +
8 + @override
9 + String get pageTitle => S.current.pre_seed_title;
10 +
11 + @override
12 + String get pageDescription => S.current.setup_warning_2fa_text;
13 +
14 + @override
15 + String get buttonText => S.current.understand;
16 +
17 + @override
18 + void Function(BuildContext) get onPressed => (BuildContext context) =>
19 + Navigator.of(context).popAndPushNamed(Routes.setup_2faPage);
20 +}