V4.6.4 fixes (#904)

* Check if context is still mounted or not before showing popup * - Refactor Restore route flow - Fix Monero.com restore from QR - Remove deprecated restore classes - Update Monero.com app version and notes * Update Macos version and release notes * Fixate android plugin versions as Flutter published new fail packages version * Revert desktop changes as it's not supported yet to scan QR code on Desktop [skip ci] * Revert macos version update [skip ci]

Omar Hatem committed Apr 27, 2023 at 17:06 UTC 367efb3caed487ed10a3fe7b27ff568a00cf0c70
12 files changed +62 -524
assets/text/Monerocom_Release_Notes.txt
+1 -4
@@ -1,4 +1 @@
1 -Fix for QR codes
2 -Fix for creating sub-addresses
3 -Fix Add/Edit nodes
4 -Fix issues with text/amount fields
\ No newline at end of file
1 +Fix Restore from QR code
\ No newline at end of file
lib/router.dart
+29 -72
@@ -41,17 +41,14 @@ import 'package:cake_wallet/view_model/dashboard/dashboard_view_model.dart';
41 import 'package:cake_wallet/view_model/monero_account_list/account_list_item.dart';
42 import 'package:cake_wallet/view_model/node_list/node_create_or_edit_view_model.dart';
43 import 'package:cake_wallet/view_model/advanced_privacy_settings_view_model.dart';
44 -import 'package:cake_wallet/view_model/restore/restore_from_qr_vm.dart';
45 -import 'package:cake_wallet/view_model/restore/restore_wallet.dart';
44 +import 'package:cake_wallet/wallet_type_utils.dart';
45 import 'package:flutter/cupertino.dart';
46 import 'package:flutter/material.dart';
47 import 'package:cake_wallet/routes.dart';
48 import 'package:cake_wallet/generated/i18n.dart';
49 import 'package:cake_wallet/di.dart';
51 -import 'package:cake_wallet/utils/language_list.dart';
50 import 'package:cake_wallet/view_model/wallet_new_vm.dart';
51 import 'package:cake_wallet/view_model/wallet_restoration_from_seed_vm.dart';
54 -import 'package:cake_wallet/view_model/wallet_restoration_from_keys_vm.dart';
52 import 'package:cake_wallet/exchange/trade.dart';
53 import 'package:cw_core/transaction_info.dart';
54 import 'package:cw_core/wallet_type.dart';
@@ -65,9 +62,6 @@ import 'package:cake_wallet/src/screens/wallet_list/wallet_list_page.dart';
62 import 'package:cake_wallet/src/screens/new_wallet/new_wallet_page.dart';
63 import 'package:cake_wallet/src/screens/setup_pin_code/setup_pin_code.dart';
64 import 'package:cake_wallet/src/screens/restore/restore_options_page.dart';
68 -import 'package:cake_wallet/src/screens/restore/restore_wallet_options_page.dart';
69 -import 'package:cake_wallet/src/screens/restore/restore_wallet_from_seed_page.dart';
70 -import 'package:cake_wallet/src/screens/restore/restore_wallet_from_keys_page.dart';
65 import 'package:cake_wallet/src/screens/send/send_page.dart';
66 import 'package:cake_wallet/src/screens/disclaimer/disclaimer_page.dart';
67 import 'package:cake_wallet/src/screens/seed_language/seed_language_page.dart';
@@ -144,14 +138,6 @@ Route<dynamic> createRoute(RouteSettings settings) {
138 return CupertinoPageRoute<void>(
139 builder: (_) => getIt.get<SetupPinCodePage>(param1: callback));
140
147 - case Routes.moneroRestoreWalletFromWelcome:
148 - return CupertinoPageRoute<void>(
149 - builder: (_) => getIt.get<SetupPinCodePage>(
150 - param1: (PinCodeState<PinCodeWidget> context, dynamic _) =>
151 - Navigator.pushNamed(
152 - context.context, Routes.restoreWallet, arguments: WalletType.monero)),
153 - fullscreenDialog: true);
154 -
141 case Routes.restoreWalletType:
142 return CupertinoPageRoute<void>(
143 builder: (_) => getIt.get<NewWalletTypePage>(
@@ -165,46 +151,35 @@ Route<dynamic> createRoute(RouteSettings settings) {
151 return CupertinoPageRoute<void>(
152 builder: (_) => getIt.get<RestoreOptionsPage>(param1: isNewInstall));
153
168 - case Routes.restoreWalletOptions:
169 - final type = WalletType.monero; //settings.arguments as WalletType;
170 -
171 - return CupertinoPageRoute<void>(
172 - builder: (_) => RestoreWalletOptionsPage(
173 - type: type,
174 - onRestoreFromSeed: (context) {
175 - final route = type == WalletType.monero
176 - ? Routes.seedLanguage
177 - : Routes.restoreWalletFromSeed;
178 - final args = type == WalletType.monero
179 - ? [type, Routes.restoreWalletFromSeed]
180 - : [type];
181 -
182 - Navigator.of(context).pushNamed(route, arguments: args);
183 - },
184 - onRestoreFromKeys: (context) {
185 - final route = type == WalletType.monero
186 - ? Routes.seedLanguage
187 - : Routes.restoreWalletFromKeys;
188 - final args = type == WalletType.monero
189 - ? [type, Routes.restoreWalletFromKeys]
190 - : [type];
191 -
192 - Navigator.of(context).pushNamed(route, arguments: args);
193 - }));
194 -
195 - case Routes.restoreWalletOptionsFromWelcome:
154 + case Routes.restoreWalletFromSeedKeys:
155 final isNewInstall = settings.arguments as bool;
197 - return isNewInstall ? CupertinoPageRoute<void>(
198 - builder: (_) => getIt.get<SetupPinCodePage>(
199 - param1: (PinCodeState<PinCodeWidget> context, dynamic _) =>
200 - Navigator.pushNamed(
201 - context.context, Routes.restoreWalletType)),
202 - fullscreenDialog: true) : CupertinoPageRoute<void>(
203 - builder: (_) => getIt.get<NewWalletTypePage>(
204 - param1: (BuildContext context, WalletType type) =>
205 - Navigator.of(context)
206 - .pushNamed(Routes.restoreWallet, arguments: type),
207 - param2: false));
156 +
157 + if (isNewInstall) {
158 + return CupertinoPageRoute<void>(
159 + builder: (_) => getIt.get<SetupPinCodePage>(
160 + param1: (PinCodeState<PinCodeWidget> context, dynamic _) {
161 + if (isSingleCoin) {
162 + return Navigator.of(context.context)
163 + .pushNamed(Routes.restoreWallet, arguments: availableWalletTypes.first);
164 + }
165 +
166 + return Navigator.pushNamed(
167 + context.context, Routes.restoreWalletType);
168 + }),
169 + fullscreenDialog: true);
170 + } else if (isSingleCoin) {
171 + return MaterialPageRoute<void>(
172 + builder: (_) => getIt.get<WalletRestorePage>(
173 + param1: availableWalletTypes.first
174 + ));
175 + } else {
176 + return CupertinoPageRoute<void>(
177 + builder: (_) => getIt.get<NewWalletTypePage>(
178 + param1: (BuildContext context, WalletType type) =>
179 + Navigator.of(context)
180 + .pushNamed(Routes.restoreWallet, arguments: type),
181 + param2: false));
182 + }
183
184 case Routes.seed:
185 return MaterialPageRoute<void>(
@@ -216,24 +191,6 @@ Route<dynamic> createRoute(RouteSettings settings) {
191 builder: (_) => getIt.get<WalletRestorePage>(
192 param1: settings.arguments as WalletType));
193
219 - case Routes.restoreWalletFromSeed:
220 - final type = settings.arguments as WalletType;
221 - return CupertinoPageRoute<void>(
222 - builder: (_) => RestoreWalletFromSeedPage(type: type));
223 -
224 - case Routes.restoreWalletFromKeys:
225 - final args = settings.arguments as List<dynamic>;
226 - final type = args.first as WalletType;
227 - final language =
228 - type == WalletType.monero ? args[1] as String : LanguageList.english;
229 -
230 - final walletRestorationFromKeysVM =
231 - getIt.get<WalletRestorationFromKeysVM>(param1: [type, language]);
232 -
233 - return CupertinoPageRoute<void>(
234 - builder: (_) => RestoreWalletFromKeysPage(
235 - walletRestorationFromKeysVM: walletRestorationFromKeysVM));
236 -
194 case Routes.sweepingWalletPage:
195 return CupertinoPageRoute<void>(
196 builder: (_) => getIt.get<SweepingWalletPage>());
lib/routes.dart
+1 -8
@@ -3,14 +3,9 @@ class Routes {
3 static const newWallet = '/new_wallet';
4 static const setupPin = '/setup_pin_code';
5 static const newWalletFromWelcome = '/new_wallet_from_welcome';
6 - static const restoreFromWelcome = '/restore_from_welcome';
6 static const seed = '/seed';
7 static const restoreOptions = '/restore_options';
9 - static const restoreOptionsFromWelcome = '/restore_options_from_welcome';
10 - static const restoreWalletOptions = '/restore_seed_keys';
11 - static const restoreWalletOptionsFromWelcome = '/restore_wallet_options_from_welcome';
12 - static const restoreWalletFromSeed = '/restore_wallet_from_seed';
13 - static const restoreWalletFromKeys = '/restore_wallet_from_keys';
8 + static const restoreWalletFromSeedKeys = '/restore_wallet_from_seeds_keys';
9 static const dashboard = '/dashboard';
10 static const send = '/send';
11 static const transactionDetails = '/transaction_info';
@@ -57,8 +52,6 @@ class Routes {
52 static const buyWebView = '/buy_web_view';
53 static const unspentCoinsList = '/unspent_coins_list';
54 static const unspentCoinsDetails = '/unspent_coins_details';
60 - static const moneroRestoreWalletFromWelcome = '/monero_restore_wallet';
61 - static const moneroNewWalletFromWelcome = '/monero_new_wallet';
55 static const addressPage = '/address_page';
56 static const fullscreenQR = '/fullscreen_qr';
57 static const ioniaWelcomePage = '/cake_pay_welcome_page';
lib/src/screens/dashboard/desktop_widgets/desktop_wallet_selection_dropdown.dart
-1
@@ -1,6 +1,5 @@
1 import 'package:another_flushbar/flushbar.dart';
2 import 'package:cake_wallet/core/auth_service.dart';
3 -import 'package:cake_wallet/di.dart';
3 import 'package:cake_wallet/entities/desktop_dropdown_item.dart';
4 import 'package:cake_wallet/generated/i18n.dart';
5 import 'package:cake_wallet/routes.dart';
lib/src/screens/restore/restore_options_page.dart
+2 -1
@@ -7,6 +7,7 @@ import 'package:cake_wallet/utils/show_pop_up.dart';
7 import 'package:cake_wallet/view_model/restore/restore_from_qr_vm.dart';
8 import 'package:cake_wallet/view_model/restore/wallet_restore_from_qr_code.dart';
9 import 'package:cake_wallet/utils/responsive_layout_util.dart';
10 +import 'package:cake_wallet/wallet_type_utils.dart';
11 import 'package:flutter/material.dart';
12 import 'package:cake_wallet/routes.dart';
13 import 'package:flutter/cupertino.dart';
@@ -38,7 +39,7 @@ class RestoreOptionsPage extends BasePage {
39 children: <Widget>[
40 RestoreButton(
41 onPressed: () => Navigator.pushNamed(
41 - context, Routes.restoreWalletOptionsFromWelcome,
42 + context, Routes.restoreWalletFromSeedKeys,
43 arguments: isNewInstall),
44 image: imageSeedKeys,
45 title: S.of(context).restore_title_from_seed_keys,
lib/src/screens/restore/restore_wallet_from_keys_page.dart deleted
-212
@@ -1,212 +0,0 @@
1 -import 'package:cake_wallet/core/wallet_name_validator.dart';
2 -import 'package:cake_wallet/palette.dart';
3 -import 'package:flutter/services.dart';
4 -import 'package:flutter/cupertino.dart';
5 -import 'package:flutter/material.dart';
6 -import 'package:flutter_mobx/flutter_mobx.dart';
7 -import 'package:cake_wallet/generated/i18n.dart';
8 -import 'package:cake_wallet/src/screens/base_page.dart';
9 -import 'package:cake_wallet/src/widgets/primary_button.dart';
10 -import 'package:cake_wallet/src/widgets/blockchain_height_widget.dart';
11 -import 'package:cake_wallet/src/widgets/scollable_with_bottom_section.dart';
12 -import 'package:cake_wallet/src/widgets/alert_with_one_action.dart';
13 -import 'package:cake_wallet/view_model/wallet_restoration_from_keys_vm.dart';
14 -import 'package:cake_wallet/src/widgets/base_text_form_field.dart';
15 -
16 -class RestoreWalletFromKeysPage extends BasePage {
17 - RestoreWalletFromKeysPage(
18 - {required this.walletRestorationFromKeysVM});
19 -
20 - final WalletRestorationFromKeysVM walletRestorationFromKeysVM;
21 -
22 - @override
23 - String get title => S.current.restore_title_from_keys;
24 -
25 - @override
26 - Widget body(BuildContext context) => RestoreFromKeysFrom(walletRestorationFromKeysVM);
27 -}
28 -
29 -class RestoreFromKeysFrom extends StatefulWidget {
30 - RestoreFromKeysFrom(this.walletRestorationFromKeysVM);
31 -
32 - final WalletRestorationFromKeysVM walletRestorationFromKeysVM;
33 -
34 - @override
35 - _RestoreFromKeysFromState createState() => _RestoreFromKeysFromState();
36 -}
37 -
38 -class _RestoreFromKeysFromState extends State<RestoreFromKeysFrom> {
39 - final _formKey = GlobalKey<FormState>();
40 - final _blockchainHeightKey = GlobalKey<BlockchainHeightState>();
41 - final _nameController = TextEditingController();
42 - final _addressController = TextEditingController();
43 - final _viewKeyController = TextEditingController();
44 - final _spendKeyController = TextEditingController();
45 - final _wifController = TextEditingController();
46 -
47 - @override
48 - void initState() {
49 - _nameController.addListener(() =>
50 - widget.walletRestorationFromKeysVM.name = _nameController.text);
51 - _addressController.addListener(() =>
52 - widget.walletRestorationFromKeysVM.address = _addressController.text);
53 - _viewKeyController.addListener(() =>
54 - widget.walletRestorationFromKeysVM.viewKey = _viewKeyController.text);
55 - _spendKeyController.addListener(() =>
56 - widget.walletRestorationFromKeysVM.spendKey = _spendKeyController.text);
57 - _wifController.addListener(() =>
58 - widget.walletRestorationFromKeysVM.wif = _wifController.text);
59 -
60 - super.initState();
61 - }
62 -
63 - @override
64 - void dispose() {
65 - _nameController.dispose();
66 - _addressController.dispose();
67 - _viewKeyController.dispose();
68 - _spendKeyController.dispose();
69 - _wifController.dispose();
70 - super.dispose();
71 - }
72 -
73 - @override
74 - Widget build(BuildContext context) {
75 -
76 - /*reaction((_) => walletRestorationStore.state, (WalletRestorationState state) {
77 - if (state is WalletRestoredSuccessfully) {
78 - Navigator.of(context).popUntil((route) => route.isFirst);
79 - }
80 -
81 - if (state is WalletRestorationFailure) {
82 - WidgetsBinding.instance.addPostFrameCallback((_) {
83 - showPopUp<void>(
84 - context: context,
85 - builder: (BuildContext context) {
86 - return AlertWithOneAction(
87 - alertTitle: S.current.restore_title_from_keys,
88 - alertContent: state.error,
89 - buttonText: S.of(context).ok,
90 - buttonAction: () => Navigator.of(context).pop()
91 - );
92 - });
93 - });
94 - }
95 - });*/
96 -
97 - return Container(
98 - padding: EdgeInsets.only(left: 24, right: 24),
99 - child: ScrollableWithBottomSection(
100 - contentPadding: EdgeInsets.only(bottom: 24.0),
101 - content: Form(
102 - key: _formKey,
103 - child: Column(children: <Widget>[
104 - Row(
105 - children: <Widget>[
106 - Flexible(
107 - child: Container(
108 - padding: EdgeInsets.only(top: 20.0),
109 - child: BaseTextFormField(
110 - controller: _nameController,
111 - hintText: S.of(context).restore_wallet_name,
112 - validator: WalletNameValidator(),
113 - )
114 - ))
115 - ],
116 - ),
117 - if (!widget.walletRestorationFromKeysVM.hasRestorationHeight)
118 - Row(
119 - children: <Widget>[
120 - Flexible(
121 - child: Container(
122 - padding: EdgeInsets.only(top: 20.0),
123 - child: BaseTextFormField(
124 - controller: _wifController,
125 - hintText: 'WIF',
126 - )
127 - ))
128 - ],
129 - ),
130 - if (widget.walletRestorationFromKeysVM.hasRestorationHeight) ... [
131 - Row(
132 - children: <Widget>[
133 - Flexible(
134 - child: Container(
135 - padding: EdgeInsets.only(top: 20.0),
136 - child: BaseTextFormField(
137 - controller: _addressController,
138 - keyboardType: TextInputType.multiline,
139 - maxLines: null,
140 - hintText: S.of(context).restore_address,
141 - )
142 - ))
143 - ],
144 - ),
145 - Row(
146 - children: <Widget>[
147 - Flexible(
148 - child: Container(
149 - padding: EdgeInsets.only(top: 20.0),
150 - child: BaseTextFormField(
151 - controller: _viewKeyController,
152 - hintText: S.of(context).restore_view_key_private,
153 - )
154 - ))
155 - ],
156 - ),
157 - Row(
158 - children: <Widget>[
159 - Flexible(
160 - child: Container(
161 - padding: EdgeInsets.only(top: 20.0),
162 - child: BaseTextFormField(
163 - controller: _spendKeyController,
164 - hintText: S.of(context).restore_spend_key_private,
165 - )
166 - ))
167 - ],
168 - ),
169 - BlockchainHeightWidget(
170 - key: _blockchainHeightKey,
171 - onHeightChange: (height) {
172 - widget.walletRestorationFromKeysVM.height = height;
173 - print(height);
174 - }),
175 - Padding(
176 - padding: EdgeInsets.only(left: 40, right: 40, top: 24),
177 - child: Text(
178 - S.of(context).restore_from_date_or_blockheight,
179 - textAlign: TextAlign.center,
180 - style: TextStyle(
181 - fontSize: 12,
182 - fontWeight: FontWeight.normal,
183 - color: Theme.of(context).hintColor
184 - ),
185 - ),
186 - )],
187 - ]),
188 - ),
189 - bottomSectionPadding: EdgeInsets.only(bottom: 24),
190 - bottomSection: Observer(builder: (_) {
191 - return LoadingPrimaryButton(
192 - onPressed: () {
193 - if (_formKey.currentState != null && _formKey.currentState!.validate()) {
194 - /*walletRestorationStore.restoreFromKeys(
195 - name: _nameController.text,
196 - language: seedLanguageStore.selectedSeedLanguage,
197 - address: _addressController.text,
198 - viewKey: _viewKeyController.text,
199 - spendKey: _spendKeyController.text,
200 - restoreHeight: _blockchainHeightKey.currentState.height);*/
201 - }
202 - },
203 - text: S.of(context).restore_recover,
204 - color: Theme.of(context).accentTextTheme!.bodyText1!.color!,
205 - textColor: Colors.white,
206 - //isDisabled: walletRestorationStore.disabledState,
207 - );
208 - }),
209 - ),
210 - );
211 - }
212 -}
lib/src/screens/restore/restore_wallet_from_seed_page.dart deleted
-199
@@ -1,199 +0,0 @@
1 -import 'package:cake_wallet/src/screens/restore/restore_from_keys.dart';
2 -import 'package:cake_wallet/src/screens/restore/wallet_restore_from_seed_form.dart';
3 -import 'package:cake_wallet/src/screens/seed_language/widgets/seed_language_picker.dart';
4 -import 'package:cake_wallet/src/widgets/base_text_form_field.dart';
5 -import 'package:cake_wallet/src/widgets/blockchain_height_widget.dart';
6 -import 'package:cake_wallet/src/widgets/primary_button.dart';
7 -import 'package:cake_wallet/src/widgets/scollable_with_bottom_section.dart';
8 -import 'package:cake_wallet/utils/show_pop_up.dart';
9 -import 'package:flutter/cupertino.dart';
10 -import 'package:flutter/material.dart';
11 -import 'package:flutter/services.dart';
12 -import 'package:cake_wallet/routes.dart';
13 -import 'package:cake_wallet/generated/i18n.dart';
14 -import 'package:cake_wallet/src/screens/base_page.dart';
15 -import 'package:cake_wallet/src/widgets/seed_widget.dart';
16 -import 'package:cw_core/wallet_type.dart';
17 -import 'package:cake_wallet/core/seed_validator.dart';
18 -import 'package:cake_wallet/core/mnemonic_length.dart';
19 -import 'package:smooth_page_indicator/smooth_page_indicator.dart';
20 -
21 -class RestoreWalletFromSeedPage extends BasePage {
22 - RestoreWalletFromSeedPage({required this.type})
23 - : _pages = <Widget>[];
24 -
25 - final WalletType type;
26 - final String language = 'en';
27 -
28 - // final formKey = GlobalKey<_RestoreFromSeedFormState>();
29 - // final formKey = GlobalKey<_RestoreFromSeedFormState>();
30 -
31 - @override
32 - String get title => S.current.restore_title_from_seed;
33 -
34 - final controller = PageController(initialPage: 0);
35 - List<Widget> _pages;
36 -
37 - Widget _page(BuildContext context, int index) {
38 - if (_pages == null || _pages.isEmpty) {
39 - _setPages(context);
40 - }
41 -
42 - return _pages[index];
43 - }
44 -
45 - int _pageLength(BuildContext context) {
46 - if (_pages == null || _pages.isEmpty) {
47 - _setPages(context);
48 - }
49 -
50 - return _pages.length;
51 - }
52 -
53 - void _setPages(BuildContext context) {
54 - _pages = <Widget>[
55 - // FIX-ME: Added args (displayBlockHeightSelector: true, displayLanguageSelector: true, type: type)
56 - WalletRestoreFromSeedForm(displayBlockHeightSelector: true, displayLanguageSelector: true, type: type),
57 - RestoreFromKeysFrom(),
58 - ];
59 - }
60 -
61 - @override
62 - Widget body(BuildContext context) {
63 - return Column(mainAxisAlignment: MainAxisAlignment.center, children: [
64 - Expanded(
65 - child: PageView.builder(
66 - onPageChanged: (page) {
67 - print('Page index $page');
68 - },
69 - controller: controller,
70 - itemCount: _pageLength(context),
71 - itemBuilder: (context, index) => _page(context, index))),
72 - Padding(
73 - padding: EdgeInsets.only(top: 10),
74 - child: SmoothPageIndicator(
75 - controller: controller,
76 - count: _pageLength(context),
77 - effect: ColorTransitionEffect(
78 - spacing: 6.0,
79 - radius: 6.0,
80 - dotWidth: 6.0,
81 - dotHeight: 6.0,
82 - dotColor: Theme.of(context).hintColor.withOpacity(0.5),
83 - activeDotColor: Theme.of(context).hintColor),
84 - )),
85 - Padding(
86 - padding: EdgeInsets.only(top: 20, bottom: 24, left: 24, right: 24),
87 - child: PrimaryButton(
88 - text: S.of(context).restore_recover,
89 - isDisabled: false,
90 - onPressed: () => null,
91 - color: Theme.of(context).accentTextTheme!.bodyText1!.color!,
92 - textColor: Colors.white)),
93 - ]);
94 -
95 - // return GestureDetector(
96 - // onTap: () =>
97 - // SystemChannels.textInput.invokeMethod<void>('TextInput.hide'),
98 - // child: ScrollableWithBottomSection(
99 - // bottomSection: Column(children: [
100 - // GestureDetector(
101 - // onTap: () {},
102 - // child: Text('Switch to restore from keys',
103 - // style: TextStyle(fontSize: 15, color: Theme.of(context).hintColor))),
104 - // SizedBox(height: 30),
105 - // PrimaryButton(
106 - // text: S.of(context).restore_next,
107 - // isDisabled: false,
108 - // onPressed: () => null,
109 - // color: Theme.of(context).accentTextTheme!.bodyText1!.color!,
110 - // textColor: Colors.white)
111 - // ]),
112 - // contentPadding: EdgeInsets.only(bottom: 24),
113 - // content: Container(
114 - // padding: EdgeInsets.only(left: 25, right: 25),
115 - // child: Column(children: [
116 - // SeedWidget(
117 - // maxLength: mnemonicLength(type),
118 - // onMnemonicChange: (seed) => null,
119 - // onFinish: () => Navigator.of(context).pushNamed(
120 - // Routes.restoreWalletFromSeedDetails,
121 - // arguments: [type, language, '']),
122 - // validator: SeedValidator(type: type, language: language),
123 - // ),
124 - // // SizedBox(height: 15),
125 - // // BaseTextFormField(hintText: 'Language', initialValue: 'English'),
126 - // BlockchainHeightWidget(
127 - // // key: _blockchainHeightKey,
128 - // onHeightChange: (height) {
129 - // // widget.walletRestorationFromKeysVM.height = height;
130 - // print(height);
131 - // })
132 - // ]))),
133 - // );
134 - }
135 -}
136 -
137 -class RestoreFromSeedForm extends StatefulWidget {
138 - RestoreFromSeedForm(
139 - {Key? key,
140 - required this.type,
141 - this.language,
142 - this.leading,
143 - this.middle})
144 - : super(key: key);
145 - final WalletType type;
146 - final String? language;
147 - final Widget? leading;
148 - final Widget? middle;
149 -
150 - @override
151 - _RestoreFromSeedFormState createState() => _RestoreFromSeedFormState();
152 -}
153 -
154 -class _RestoreFromSeedFormState extends State<RestoreFromSeedForm> {
155 - // final _seedKey = GlobalKey<SeedWidgetState>();
156 -
157 - String mnemonic() =>
158 - ''; // _seedKey.currentState.items.map((e) => e.text).join(' ');
159 -
160 - @override
161 - Widget build(BuildContext context) {
162 - return GestureDetector(
163 - onTap: () =>
164 - SystemChannels.textInput.invokeMethod<void>('TextInput.hide'),
165 - child: Container(
166 - padding: EdgeInsets.only(left: 24, right: 24),
167 - // color: Colors.blue,
168 - // height: 300,
169 - child: Column(children: [
170 - SeedWidget(
171 - type: widget.type,
172 - language: widget.language ?? '',
173 - // key: _seedKey,
174 - // maxLength: mnemonicLength(widget.type),
175 - // onMnemonicChange: (seed) => null,
176 - // onFinish: () => Navigator.of(context).pushNamed(
177 - // Routes.restoreWalletFromSeedDetails,
178 - // arguments: [widget.type, widget.language, mnemonic()]),
179 - // leading: widget.leading,
180 - // middle: widget.middle,
181 - // validator:
182 - // SeedValidator(type: widget.type, language: widget.language),
183 - ),
184 - BlockchainHeightWidget(
185 - // key: _blockchainHeightKey,
186 - onHeightChange: (height) {
187 - // widget.walletRestorationFromKeysVM.height = height;
188 - print(height);
189 - }),
190 - Container(
191 - color: Colors.green,
192 - width: 100,
193 - height: 56,
194 - child: BaseTextFormField(
195 - hintText: 'Language', initialValue: 'English')),
196 - ])),
197 - );
198 - }
199 -}
lib/src/screens/wallet_list/wallet_list_page.dart
+1 -6
@@ -174,12 +174,7 @@ class WalletListBodyState extends State<WalletListBody> {
174 SizedBox(height: 10.0),
175 PrimaryImageButton(
176 onPressed: () {
177 - if (isSingleCoin) {
178 - Navigator.of(context).pushNamed(Routes.restoreWallet,
179 - arguments: widget.walletListViewModel.currentWalletType);
180 - } else {
181 - Navigator.of(context).pushNamed(Routes.restoreOptions, arguments: false);
182 - }
177 + Navigator.of(context).pushNamed(Routes.restoreOptions, arguments: false);
178 },
179 image: restoreWalletImage,
180 text: S.of(context).wallet_list_restore_wallet,
lib/utils/show_pop_up.dart
+20 -17
@@ -1,20 +1,23 @@
1 import 'package:flutter/material.dart';
2
3 -Future<T?> showPopUp<T>({
4 - required BuildContext context,
5 - required WidgetBuilder builder,
6 - bool barrierDismissible = true,
7 - Color? barrierColor,
8 - bool useSafeArea = false,
9 - bool useRootNavigator = true,
10 - RouteSettings? routeSettings
11 -}) {
12 - return showDialog<T>(
13 - context: context,
14 - builder: builder,
15 - barrierDismissible: barrierDismissible,
16 - barrierColor: barrierColor,
17 - useSafeArea: useSafeArea,
18 - useRootNavigator: useRootNavigator,
19 - routeSettings: routeSettings);
3 +Future<T?> showPopUp<T>(
4 + {required BuildContext context,
5 + required WidgetBuilder builder,
6 + bool barrierDismissible = true,
7 + Color? barrierColor,
8 + bool useSafeArea = false,
9 + bool useRootNavigator = true,
10 + RouteSettings? routeSettings}) async {
11 + if (context.mounted) {
12 + return showDialog<T>(
13 + context: context,
14 + builder: builder,
15 + barrierDismissible: barrierDismissible,
16 + barrierColor: barrierColor,
17 + useSafeArea: useSafeArea,
18 + useRootNavigator: useRootNavigator,
19 + routeSettings: routeSettings);
20 + }
21 +
22 + return null;
23 }
pubspec_base.yaml
+4
@@ -73,6 +73,10 @@ dependencies:
73 url: https://github.com/cake-tech/cake_backup.git
74 ref: main
75 version: 1.0.0
76 + flutter_plugin_android_lifecycle: 2.0.9
77 + path_provider_android: 2.0.24
78 + shared_preferences_android: 2.0.17
79 + url_launcher_android: 6.0.24
80
81 dev_dependencies:
82 flutter_test:
scripts/android/app_env.sh
+2 -2
@@ -14,8 +14,8 @@ TYPES=($MONERO_COM $CAKEWALLET $HAVEN)
14 APP_ANDROID_TYPE=$1
15
16 MONERO_COM_NAME="Monero.com"
17 -MONERO_COM_VERSION="1.3.4"
18 -MONERO_COM_BUILD_NUMBER=47
17 +MONERO_COM_VERSION="1.3.5"
18 +MONERO_COM_BUILD_NUMBER=48
19 MONERO_COM_BUNDLE_ID="com.monero.app"
20 MONERO_COM_PACKAGE="com.monero.app"
21
scripts/ios/app_env.sh
+2 -2
@@ -13,8 +13,8 @@ TYPES=($MONERO_COM $CAKEWALLET $HAVEN)
13 APP_IOS_TYPE=$1
14
15 MONERO_COM_NAME="Monero.com"
16 -MONERO_COM_VERSION="1.3.4"
17 -MONERO_COM_BUILD_NUMBER=45
16 +MONERO_COM_VERSION="1.3.5"
17 +MONERO_COM_BUILD_NUMBER=46
18 MONERO_COM_BUNDLE_ID="com.cakewallet.monero"
19
20 CAKEWALLET_NAME="Cake Wallet"