dev
dart 185 lines 7.59 KB
Raw
1 import 'package:cake_wallet/entities/cake_2fa_preset_options.dart';
2 import 'package:cake_wallet/generated/i18n.dart';
3 import 'package:cake_wallet/src/screens/settings/widgets/settings_choices_cell.dart';
4 import 'package:cake_wallet/src/screens/settings/widgets/settings_switcher_cell.dart';
5 import 'package:cake_wallet/src/widgets/alert_with_two_actions.dart';
6 import 'package:cake_wallet/utils/show_pop_up.dart';
7 import 'package:cake_wallet/view_model/settings/choices_list_item.dart';
8 import 'package:flutter/material.dart';
9 import 'package:cake_wallet/src/screens/base_page.dart';
10 import 'package:cake_wallet/src/screens/settings/widgets/settings_cell_with_arrow.dart';
11 import 'package:cake_wallet/view_model/set_up_2fa_viewmodel.dart';
12 import 'package:cake_wallet/src/widgets/standard_list.dart';
13 import 'package:flutter_mobx/flutter_mobx.dart';
14 import 'package:modal_bottom_sheet/modal_bottom_sheet.dart';
15
16 import '../../../routes.dart';
17
18 class Modify2FAPage extends BasePage {
19 Modify2FAPage({required this.setup2FAViewModel});
20
21 final Setup2FAViewModel setup2FAViewModel;
22
23 @override
24 String get title => S.current.modify_2fa;
25
26 @override
27 Widget body(BuildContext context) {
28 return SingleChildScrollView(
29 controller: ModalScrollController.of(context),
30 child: _2FAControlsWidget(setup2FAViewModel: setup2FAViewModel),
31 );
32 }
33 }
34
35 class _2FAControlsWidget extends StatelessWidget {
36 const _2FAControlsWidget({required this.setup2FAViewModel});
37
38 final Setup2FAViewModel setup2FAViewModel;
39
40 @override
41 Widget build(BuildContext context) {
42 return Column(
43 crossAxisAlignment: CrossAxisAlignment.start,
44 children: [
45 SettingsCellWithArrow(
46 title: S.current.disable_cake_2fa,
47 handler: (_) async {
48 await showPopUp<void>(
49 context: context,
50 builder: (BuildContext context) {
51 return AlertWithTwoActions(
52 alertTitle: S.current.disable_cake_2fa,
53 alertContent: S.current.question_to_disable_2fa,
54 leftButtonText: S.current.cancel,
55 rightButtonText: S.current.disable,
56 actionLeftButton: () => Navigator.of(context).pop(),
57 actionRightButton: () {
58 setup2FAViewModel.setUseTOTP2FA(false);
59 Navigator.pushNamedAndRemoveUntil(context, Routes.dashboard, (route) => false);
60 },
61 );
62 },
63 );
64 },
65 ),
66 StandardListSeparator(padding: EdgeInsets.symmetric(horizontal: 24)),
67 Observer(
68 builder: (context) {
69 return SettingsChoicesCell(
70 ChoicesListItem<Cake2FAPresetsOptions>(
71 title: S.current.cake_2fa_preset,
72 onItemSelected: setup2FAViewModel.selectCakePreset,
73 selectedItem: setup2FAViewModel.selectedCake2FAPreset,
74 items: [
75 Cake2FAPresetsOptions.narrow,
76 Cake2FAPresetsOptions.normal,
77 Cake2FAPresetsOptions.aggressive,
78 ],
79 ),
80 );
81 },
82 ),
83 Observer(
84 builder: (context) {
85 return SettingsSwitcherCell(
86 title: S.current.require_for_assessing_wallet,
87 value: setup2FAViewModel.shouldRequireTOTP2FAForAccessingWallet,
88 onValueChange: (context, value) async =>
89 setup2FAViewModel.switchShouldRequireTOTP2FAForAccessingWallet(value),
90 );
91 },
92 ),
93 StandardListSeparator(padding: EdgeInsets.symmetric(horizontal: 24)),
94 Observer(
95 builder: (context) {
96 return SettingsSwitcherCell(
97 title: S.current.require_for_sends_to_non_contacts,
98 value: setup2FAViewModel.shouldRequireTOTP2FAForSendsToNonContact,
99 onValueChange: (context, value) async =>
100 setup2FAViewModel.switchShouldRequireTOTP2FAForSendsToNonContact(value),
101 );
102 },
103 ),
104 StandardListSeparator(padding: EdgeInsets.symmetric(horizontal: 24)),
105 Observer(
106 builder: (context) {
107 return SettingsSwitcherCell(
108 title: S.current.require_for_sends_to_contacts,
109 value: setup2FAViewModel.shouldRequireTOTP2FAForSendsToContact,
110 onValueChange: (context, value) async =>
111 setup2FAViewModel.switchShouldRequireTOTP2FAForSendsToContact(value),
112 );
113 },
114 ),
115 StandardListSeparator(padding: EdgeInsets.symmetric(horizontal: 24)),
116 Observer(
117 builder: (context) {
118 return SettingsSwitcherCell(
119 title: S.current.require_for_sends_to_internal_wallets,
120 value: setup2FAViewModel.shouldRequireTOTP2FAForSendsToInternalWallets,
121 onValueChange: (context, value) async =>
122 setup2FAViewModel.switchShouldRequireTOTP2FAForSendsToInternalWallets(value),
123 );
124 },
125 ),
126 StandardListSeparator(padding: EdgeInsets.symmetric(horizontal: 24)),
127 Observer(
128 builder: (context) {
129 return SettingsSwitcherCell(
130 title: S.current.require_for_exchanges_to_internal_wallets,
131 value: setup2FAViewModel.shouldRequireTOTP2FAForExchangesToInternalWallets,
132 onValueChange: (context, value) async =>
133 setup2FAViewModel.switchShouldRequireTOTP2FAForExchangesToInternalWallets(value),
134 );
135 },
136 ),
137 StandardListSeparator(padding: EdgeInsets.symmetric(horizontal: 24)),
138 Observer(
139 builder: (context) {
140 return SettingsSwitcherCell(
141 title: S.current.require_for_exchanges_to_external_wallets,
142 value: setup2FAViewModel.shouldRequireTOTP2FAForExchangesToExternalWallets,
143 onValueChange: (context, value) async =>
144 setup2FAViewModel.switchShouldRequireTOTP2FAForExchangesToExternalWallets(value),
145 );
146 },
147 ),
148 StandardListSeparator(padding: EdgeInsets.symmetric(horizontal: 24)),
149 Observer(
150 builder: (context) {
151 return SettingsSwitcherCell(
152 title: S.current.require_for_adding_contacts,
153 value: setup2FAViewModel.shouldRequireTOTP2FAForAddingContacts,
154 onValueChange: (context, value) async =>
155 setup2FAViewModel.switchShouldRequireTOTP2FAForAddingContacts(value),
156 );
157 },
158 ),
159 StandardListSeparator(padding: EdgeInsets.symmetric(horizontal: 24)),
160 Observer(
161 builder: (context) {
162 return SettingsSwitcherCell(
163 title: S.current.require_for_creating_new_wallets,
164 value: setup2FAViewModel.shouldRequireTOTP2FAForCreatingNewWallets,
165 onValueChange: (context, value) async =>
166 setup2FAViewModel.switchShouldRequireTOTP2FAForCreatingNewWallet(value),
167 );
168 },
169 ),
170 StandardListSeparator(padding: EdgeInsets.symmetric(horizontal: 24)),
171 Observer(
172 builder: (context) {
173 return SettingsSwitcherCell(
174 title: S.current.require_for_all_security_and_backup_settings,
175 value: setup2FAViewModel.shouldRequireTOTP2FAForAllSecurityAndBackupSettings,
176 onValueChange: (context, value) async => setup2FAViewModel
177 .switchShouldRequireTOTP2FAForAllSecurityAndBackupSettings(value),
178 );
179 },
180 ),
181 StandardListSeparator(padding: EdgeInsets.symmetric(horizontal: 24)),
182 ],
183 );
184 }
185 }