Added displaying of errors on restore from backup screen.

M committed Jan 15, 2021 at 20:07 UTC 5999744fc784ba3f54ef45ca066ec2b149a1e68d
2 files changed +45 -8
lib/src/screens/restore/restore_from_backup_page.dart
+28 -6
@@ -1,3 +1,4 @@
1 +import 'package:cake_wallet/core/execution_state.dart';
2 import 'package:cake_wallet/generated/i18n.dart';
3 import 'package:cake_wallet/src/widgets/alert_with_one_action.dart';
4 import 'package:cake_wallet/utils/show_pop_up.dart';
@@ -7,6 +8,8 @@ import 'package:cake_wallet/src/widgets/primary_button.dart';
8 import 'package:cake_wallet/view_model/restore_from_backup_view_model.dart';
9 import 'package:cake_wallet/src/screens/base_page.dart';
10 import 'package:file_picker/file_picker.dart';
11 +import 'package:flutter_mobx/flutter_mobx.dart';
12 +import 'package:mobx/mobx.dart';
13
14 class RestoreFromBackupPage extends BasePage {
15 RestoreFromBackupPage(this.restoreFromBackupViewModel)
@@ -20,6 +23,22 @@ class RestoreFromBackupPage extends BasePage {
23
24 @override
25 Widget body(BuildContext context) {
26 + reaction((_) => restoreFromBackupViewModel.state, (ExecutionState state) {
27 + if (state is FailureState) {
28 + WidgetsBinding.instance.addPostFrameCallback((_) {
29 + showPopUp<void>(
30 + context: context,
31 + builder: (BuildContext context) {
32 + return AlertWithOneAction(
33 + alertTitle: S.of(context).error,
34 + alertContent: state.error,
35 + buttonText: S.of(context).ok,
36 + buttonAction: () => Navigator.of(context).pop());
37 + });
38 + });
39 + }
40 + });
41 +
42 return Container(
43 padding: EdgeInsets.only(bottom: 30, left: 25, right: 25),
44 child: Column(children: [
@@ -46,12 +65,15 @@ class RestoreFromBackupPage extends BasePage {
65 color: Colors.grey,
66 textColor: Colors.white)),
67 SizedBox(width: 20),
49 - Expanded(
50 - child: PrimaryButton(
51 - onPressed: () => onImportHandler(context),
52 - text: 'Import',
53 - color: Theme.of(context).accentTextTheme.body2.color,
54 - textColor: Colors.white))
68 + Expanded(child: Observer(builder: (_) {
69 + return LoadingPrimaryButton(
70 + isLoading:
71 + restoreFromBackupViewModel.state is IsExecutingState,
72 + onPressed: () => onImportHandler(context),
73 + text: 'Import',
74 + color: Theme.of(context).accentTextTheme.body2.color,
75 + textColor: Colors.white);
76 + }))
77 ])),
78 ]));
79 }
lib/view_model/restore_from_backup_view_model.dart
+17 -2
@@ -1,4 +1,5 @@
1 import 'dart:io';
2 +import 'package:cake_wallet/core/execution_state.dart';
3 import 'package:hive/hive.dart';
4 import 'package:mobx/mobx.dart';
5 import 'package:cake_wallet/main.dart';
@@ -19,15 +20,21 @@ abstract class RestoreFromBackupViewModelBase with Store {
20 @observable
21 String filePath;
22
23 + @observable
24 + ExecutionState state;
25 +
26 final BackupService backupService;
27
28 @action
29 void reset() => filePath = '';
30
31 + @action
32 Future<void> import(String password) async {
33 try {
34 + state = IsExecutingState();
35 +
36 if (filePath?.isEmpty ?? true) {
30 - // FIXME: throw exception;
37 + state = FailureState('Backup file is not selected.');
38 return;
39 }
40
@@ -49,8 +56,16 @@ abstract class RestoreFromBackupViewModelBase with Store {
56 reaction?.reaction?.dispose();
57 }
58 });
59 +
60 + state = ExecutedSuccessfullyState();
61 } catch (e) {
53 - print(e.toString());
62 + var msg = e.toString();
63 +
64 + if (msg == 'Message authentication code (MAC) is invalid') {
65 + msg = 'Incorrect backup password';
66 + }
67 +
68 + state = FailureState(msg);
69 }
70 }
71 }