reset_password_page.dart
3.76 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:one_poem/generated/l10n.dart';
import 'package:one_poem/login/widgets/my_text_field.dart';
import 'package:one_poem/res/resources.dart';
import 'package:one_poem/util/change_notifier_manage.dart';
import 'package:one_poem/util/other_utils.dart';
import 'package:one_poem/util/toast_utils.dart';
import 'package:one_poem/widgets/my_app_bar.dart';
import 'package:one_poem/widgets/my_button.dart';
import 'package:one_poem/widgets/my_scroll_view.dart';
/// design/1注册登录/index.html#artboard9
class ResetPasswordPage extends StatefulWidget {
const ResetPasswordPage({Key? key}) : super(key: key);
@override
_ResetPasswordPageState createState() => _ResetPasswordPageState();
}
class _ResetPasswordPageState extends State<ResetPasswordPage> with ChangeNotifierMixin<ResetPasswordPage> {
//定义一个controller
final TextEditingController _nameController = TextEditingController();
final TextEditingController _vCodeController = TextEditingController();
final TextEditingController _passwordController = TextEditingController();
final FocusNode _nodeText1 = FocusNode();
final FocusNode _nodeText2 = FocusNode();
final FocusNode _nodeText3 = FocusNode();
bool _clickable = false;
@override
Map<ChangeNotifier, List<VoidCallback>?>? changeNotifier() {
final List<VoidCallback> callbacks = <VoidCallback>[_verify];
return <ChangeNotifier, List<VoidCallback>?>{
_nameController: callbacks,
_vCodeController: callbacks,
_passwordController: callbacks,
_nodeText1: null,
_nodeText2: null,
_nodeText3: null,
};
}
void _verify() {
final String name = _nameController.text;
final String vCode = _vCodeController.text;
final String password = _passwordController.text;
bool clickable = true;
if (name.isEmpty || name.length < 11) {
clickable = false;
}
if (vCode.isEmpty || vCode.length < 6) {
clickable = false;
}
if (password.isEmpty || password.length < 6) {
clickable = false;
}
if (clickable != _clickable) {
setState(() {
_clickable = clickable;
});
}
}
void _reset() {
Toast.show(S.of(context).confirm);
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: MyAppBar(
title: S.of(context).forgotPasswordLink,
),
body: MyScrollView(
keyboardConfig: Utils.getKeyboardActionsConfig(context, <FocusNode>[_nodeText1, _nodeText2, _nodeText3]),
crossAxisAlignment: CrossAxisAlignment.center,
padding: const EdgeInsets.only(left: 16.0, right: 16.0, top: 20.0),
children: _buildBody(),
),
);
}
List<Widget> _buildBody() {
return <Widget>[
Text(
S.of(context).resetLoginPassword,
style: TextStyles.textBold26,
),
Gaps.vGap16,
MyTextField(
focusNode: _nodeText1,
controller: _nameController,
maxLength: 11,
keyboardType: TextInputType.phone,
hintText: S.of(context).inputPhoneHint,
),
Gaps.vGap8,
MyTextField(
focusNode: _nodeText2,
controller: _vCodeController,
keyboardType: TextInputType.number,
getVCode: () {
return Future<bool>.value(true);
},
maxLength: 6,
hintText: S.of(context).inputVerificationCodeHint,
),
Gaps.vGap8,
MyTextField(
focusNode: _nodeText3,
isInputPwd: true,
controller: _passwordController,
keyboardType: TextInputType.visiblePassword,
hintText: S.of(context).inputPasswordHint,
),
Gaps.vGap24,
MyButton(
onPressed: _clickable ? _reset : null,
text: S.of(context).confirm,
)
];
}
}