dev
dart 82 lines 2.93 KB
Raw
1 import 'package:mobx/mobx.dart';
2 import 'package:flutter/material.dart';
3 import 'package:flutter_mobx/flutter_mobx.dart';
4 import 'package:cake_wallet/generated/i18n.dart';
5 import 'package:cake_wallet/view_model/wallet_address_list/wallet_address_edit_or_create_view_model.dart';
6 import 'package:cake_wallet/core/address_label_validator.dart';
7 import 'package:cake_wallet/src/widgets/primary_button.dart';
8 import 'package:cake_wallet/src/widgets/base_text_form_field.dart';
9 import 'package:cake_wallet/src/screens/base_page.dart';
10
11 class AddressEditOrCreatePage extends BasePage {
12 AddressEditOrCreatePage({required this.addressEditOrCreateViewModel})
13 : _formKey = GlobalKey<FormState>(),
14 _labelController = TextEditingController(),
15 super() {
16 _labelController.addListener(() => addressEditOrCreateViewModel.label = _labelController.text);
17 _labelController.text = addressEditOrCreateViewModel.label;
18 }
19
20 final WalletAddressEditOrCreateViewModel addressEditOrCreateViewModel;
21 final GlobalKey<FormState> _formKey;
22 final TextEditingController _labelController;
23
24 bool _isEffectsInstalled = false;
25
26 @override
27 String get title => S.current.new_subaddress_title;
28
29 @override
30 Widget body(BuildContext context) {
31 _setEffects(context);
32
33 return Form(
34 key: _formKey,
35 child: Container(
36 padding: EdgeInsets.all(24.0),
37 child: Column(
38 children: <Widget>[
39 Expanded(
40 child: Center(
41 child: BaseTextFormField(
42 controller: _labelController,
43 hintText: S.of(context).new_subaddress_label_name,
44 validator: AddressLabelValidator(),
45 ),
46 )),
47 Observer(
48 builder: (_) => LoadingPrimaryButton(
49 onPressed: () async {
50 if (_formKey.currentState?.validate() ?? false) {
51 await addressEditOrCreateViewModel.save();
52 }
53 },
54 text: addressEditOrCreateViewModel.isEdit
55 ? S.of(context).rename
56 : S.of(context).new_subaddress_create,
57 color: Theme.of(context).colorScheme.primary,
58 textColor: Theme.of(context).colorScheme.onPrimary,
59 isLoading: addressEditOrCreateViewModel.state is AddressIsSaving,
60 isDisabled: addressEditOrCreateViewModel.label.isEmpty,
61 ),
62 )
63 ],
64 ),
65 ));
66 }
67
68 void _setEffects(BuildContext context) {
69 if (_isEffectsInstalled) {
70 return;
71 }
72 reaction((_) => addressEditOrCreateViewModel.state, (AddressEditOrCreateState state) {
73 if (state is AddressSavedSuccessfully) {
74 WidgetsBinding.instance.addPostFrameCallback((_) {
75 if (context.mounted) Navigator.of(context).pop();
76 });
77 }
78 });
79
80 _isEffectsInstalled = true;
81 }
82 }