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
}