Showing
7 changed files
with
53 additions
and
21 deletions
... | @@ -21,7 +21,6 @@ class MessageLookup extends MessageLookupByLibrary { | ... | @@ -21,7 +21,6 @@ class MessageLookup extends MessageLookupByLibrary { |
21 | String get localeName => 'en'; | 21 | String get localeName => 'en'; |
22 | 22 | ||
23 | final messages = _notInlinedMessages(_notInlinedMessages); | 23 | final messages = _notInlinedMessages(_notInlinedMessages); |
24 | - | ||
25 | static Map<String, Function> _notInlinedMessages(_) => <String, Function>{ | 24 | static Map<String, Function> _notInlinedMessages(_) => <String, Function>{ |
26 | "accountEditPageUserBirthday": | 25 | "accountEditPageUserBirthday": |
27 | MessageLookupByLibrary.simpleMessage("Birthday"), | 26 | MessageLookupByLibrary.simpleMessage("Birthday"), | ... | ... |
... | @@ -21,7 +21,6 @@ class MessageLookup extends MessageLookupByLibrary { | ... | @@ -21,7 +21,6 @@ class MessageLookup extends MessageLookupByLibrary { |
21 | String get localeName => 'zh'; | 21 | String get localeName => 'zh'; |
22 | 22 | ||
23 | final messages = _notInlinedMessages(_notInlinedMessages); | 23 | final messages = _notInlinedMessages(_notInlinedMessages); |
24 | - | ||
25 | static Map<String, Function> _notInlinedMessages(_) => <String, Function>{ | 24 | static Map<String, Function> _notInlinedMessages(_) => <String, Function>{ |
26 | "accountEditPageUserBirthday": | 25 | "accountEditPageUserBirthday": |
27 | MessageLookupByLibrary.simpleMessage("出生日期"), | 26 | MessageLookupByLibrary.simpleMessage("出生日期"), | ... | ... |
1 | -import 'package:flutter/foundation.dart'; | 1 | +import 'package:Parlando/net/dio_utils.dart'; |
2 | +import 'package:Parlando/net/http_api.dart'; | ||
3 | +import 'package:email_validator/email_validator.dart'; | ||
2 | import 'package:flutter/gestures.dart'; | 4 | import 'package:flutter/gestures.dart'; |
3 | import 'package:flutter/material.dart'; | 5 | import 'package:flutter/material.dart'; |
4 | -import 'package:flutter/services.dart'; | ||
5 | import 'package:Parlando/home/webview_page.dart'; | 6 | import 'package:Parlando/home/webview_page.dart'; |
6 | import 'package:Parlando/login/widgets/my_text_field.dart'; | 7 | import 'package:Parlando/login/widgets/my_text_field.dart'; |
7 | import 'package:Parlando/res/resources.dart'; | 8 | import 'package:Parlando/res/resources.dart'; |
8 | -import 'package:Parlando/res/styles.dart'; | ||
9 | import 'package:Parlando/util/change_notifier_manage.dart'; | 9 | import 'package:Parlando/util/change_notifier_manage.dart'; |
10 | import 'package:Parlando/util/other_utils.dart'; | 10 | import 'package:Parlando/util/other_utils.dart'; |
11 | import 'package:Parlando/util/toast_utils.dart'; | 11 | import 'package:Parlando/util/toast_utils.dart'; |
... | @@ -34,7 +34,6 @@ class _RegisterPageState extends State<RegisterPage> | ... | @@ -34,7 +34,6 @@ class _RegisterPageState extends State<RegisterPage> |
34 | final FocusNode _nodeText2 = FocusNode(); | 34 | final FocusNode _nodeText2 = FocusNode(); |
35 | final FocusNode _nodeText3 = FocusNode(); | 35 | final FocusNode _nodeText3 = FocusNode(); |
36 | bool _clickable = false; | 36 | bool _clickable = false; |
37 | - bool _switchSelected=true; | ||
38 | 37 | ||
39 | @override | 38 | @override |
40 | Map<ChangeNotifier, List<VoidCallback>?>? changeNotifier() { | 39 | Map<ChangeNotifier, List<VoidCallback>?>? changeNotifier() { |
... | @@ -71,7 +70,18 @@ class _RegisterPageState extends State<RegisterPage> | ... | @@ -71,7 +70,18 @@ class _RegisterPageState extends State<RegisterPage> |
71 | } | 70 | } |
72 | 71 | ||
73 | void _register() { | 72 | void _register() { |
74 | - Toast.show('点击注册'); | 73 | + Map<String, String> params = <String, String>{ |
74 | + "email": _nameController.text, | ||
75 | + "password": _passwordController.text, | ||
76 | + "verify_code": _vCodeController.text, | ||
77 | + }; | ||
78 | + DioUtils.instance.asyncRequestNetwork( | ||
79 | + Method.post, | ||
80 | + HttpApi.register, | ||
81 | + params: params, | ||
82 | + onSuccess: (data) {}, | ||
83 | + onError: (code, msg) {}, | ||
84 | + ); | ||
75 | } | 85 | } |
76 | 86 | ||
77 | @override | 87 | @override |
... | @@ -99,8 +109,8 @@ class _RegisterPageState extends State<RegisterPage> | ... | @@ -99,8 +109,8 @@ class _RegisterPageState extends State<RegisterPage> |
99 | key: const Key('phone'), | 109 | key: const Key('phone'), |
100 | focusNode: _nodeText1, | 110 | focusNode: _nodeText1, |
101 | controller: _nameController, | 111 | controller: _nameController, |
102 | - maxLength: 11, | 112 | + maxLength: 100, |
103 | - keyboardType: TextInputType.phone, | 113 | + keyboardType: TextInputType.emailAddress, |
104 | hintText: ParlandoLocalizations.of(context).inputPhoneHint, | 114 | hintText: ParlandoLocalizations.of(context).inputPhoneHint, |
105 | ), | 115 | ), |
106 | Gaps.vGap8, | 116 | Gaps.vGap8, |
... | @@ -110,15 +120,28 @@ class _RegisterPageState extends State<RegisterPage> | ... | @@ -110,15 +120,28 @@ class _RegisterPageState extends State<RegisterPage> |
110 | controller: _vCodeController, | 120 | controller: _vCodeController, |
111 | keyboardType: TextInputType.number, | 121 | keyboardType: TextInputType.number, |
112 | getVCode: () async { | 122 | getVCode: () async { |
113 | - if (_nameController.text.length == 11) { | 123 | + bool valid = EmailValidator.validate(_nameController.text); |
124 | + if (valid) { | ||
114 | Toast.show(ParlandoLocalizations.of(context).verificationButton); | 125 | Toast.show(ParlandoLocalizations.of(context).verificationButton); |
115 | - | 126 | + Map<String, String> params = <String, String>{ |
116 | - /// 一般可以在这里发送真正的请求,请求成功返回true | 127 | + "email": _nameController.text, |
117 | - return true; | 128 | + }; |
129 | + DioUtils.instance.asyncRequestNetwork( | ||
130 | + Method.get, | ||
131 | + HttpApi.verify, | ||
132 | + params: [], | ||
133 | + queryParameters: params, | ||
134 | + onSuccess: (data) { | ||
135 | + print(data); | ||
136 | + }, | ||
137 | + onError: (code, msg) {}, | ||
138 | + ); | ||
118 | } else { | 139 | } else { |
119 | Toast.show(ParlandoLocalizations.of(context).inputPhoneInvalid); | 140 | Toast.show(ParlandoLocalizations.of(context).inputPhoneInvalid); |
120 | return false; | 141 | return false; |
121 | } | 142 | } |
143 | + | ||
144 | + return true; | ||
122 | }, | 145 | }, |
123 | maxLength: 6, | 146 | maxLength: 6, |
124 | hintText: ParlandoLocalizations.of(context).inputVerificationCodeHint, | 147 | hintText: ParlandoLocalizations.of(context).inputVerificationCodeHint, |
... | @@ -137,7 +160,7 @@ class _RegisterPageState extends State<RegisterPage> | ... | @@ -137,7 +160,7 @@ class _RegisterPageState extends State<RegisterPage> |
137 | Text.rich( | 160 | Text.rich( |
138 | TextSpan( | 161 | TextSpan( |
139 | text: '登录即代表同意并阅读', | 162 | text: '登录即代表同意并阅读', |
140 | - style: TextStyle(fontSize: 14, color: const Color(0xFF999999)), | 163 | + style: const TextStyle(fontSize: 14, color: Color(0xFF999999)), |
141 | children: [ | 164 | children: [ |
142 | TextSpan( | 165 | TextSpan( |
143 | text: '《用户协议》', | 166 | text: '《用户协议》', |
... | @@ -146,12 +169,12 @@ class _RegisterPageState extends State<RegisterPage> | ... | @@ -146,12 +169,12 @@ class _RegisterPageState extends State<RegisterPage> |
146 | ..onTap = () { | 169 | ..onTap = () { |
147 | Navigator.of(context) | 170 | Navigator.of(context) |
148 | .push(MaterialPageRoute(builder: (context) { | 171 | .push(MaterialPageRoute(builder: (context) { |
149 | - return WebViewPage( | 172 | + return const WebViewPage( |
150 | title: '《用户协议》', url: 'https://flutter.dev'); | 173 | title: '《用户协议》', url: 'https://flutter.dev'); |
151 | })); | 174 | })); |
152 | }, | 175 | }, |
153 | ), | 176 | ), |
154 | - TextSpan(text: '和'), | 177 | + const TextSpan(text: '和'), |
155 | TextSpan( | 178 | TextSpan( |
156 | text: '《隐私政策》', | 179 | text: '《隐私政策》', |
157 | style: TextStyle(color: Theme.of(context).primaryColor), | 180 | style: TextStyle(color: Theme.of(context).primaryColor), |
... | @@ -159,7 +182,7 @@ class _RegisterPageState extends State<RegisterPage> | ... | @@ -159,7 +182,7 @@ class _RegisterPageState extends State<RegisterPage> |
159 | ..onTap = () { | 182 | ..onTap = () { |
160 | Navigator.of(context) | 183 | Navigator.of(context) |
161 | .push(MaterialPageRoute(builder: (context) { | 184 | .push(MaterialPageRoute(builder: (context) { |
162 | - return WebViewPage( | 185 | + return const WebViewPage( |
163 | title: '《隐私政策》', url: 'https://flutter.dev'); | 186 | title: '《隐私政策》', url: 'https://flutter.dev'); |
164 | })); | 187 | })); |
165 | }, | 188 | }, | ... | ... |
... | @@ -113,10 +113,11 @@ class _MyTextFieldState extends State<MyTextField> { | ... | @@ -113,10 +113,11 @@ class _MyTextFieldState extends State<MyTextField> { |
113 | textInputAction: TextInputAction.done, | 113 | textInputAction: TextInputAction.done, |
114 | keyboardType: widget.keyboardType, | 114 | keyboardType: widget.keyboardType, |
115 | // 数字、手机号限制格式为0到9, 密码限制不包含汉字 | 115 | // 数字、手机号限制格式为0到9, 密码限制不包含汉字 |
116 | - inputFormatters: (widget.keyboardType == TextInputType.number || | 116 | + inputFormatters: [ |
117 | - widget.keyboardType == TextInputType.phone) | 117 | + FilteringTextInputFormatter.deny( |
118 | - ? [FilteringTextInputFormatter.allow(RegExp('[0-9]'))] | 118 | + RegExp('[\u4e00-\u9fa5]'), |
119 | - : [FilteringTextInputFormatter.deny(RegExp('[\u4e00-\u9fa5]'))], | 119 | + ), |
120 | + ], | ||
120 | decoration: InputDecoration( | 121 | decoration: InputDecoration( |
121 | contentPadding: EdgeInsets.symmetric(vertical: 16.px), | 122 | contentPadding: EdgeInsets.symmetric(vertical: 16.px), |
122 | hintText: widget.hintText, | 123 | hintText: widget.hintText, | ... | ... |
1 | class HttpApi { | 1 | class HttpApi { |
2 | static const String setting = 'setting'; | 2 | static const String setting = 'setting'; |
3 | + static const String register = 'register'; | ||
4 | + static const String verify = 'verify'; | ||
3 | static const String search = 'search/repositories'; | 5 | static const String search = 'search/repositories'; |
4 | static const String subscriptions = 'users/simplezhli/subscriptions'; | 6 | static const String subscriptions = 'users/simplezhli/subscriptions'; |
5 | static const String upload = 'uuc/upload-inco'; | 7 | static const String upload = 'uuc/upload-inco'; | ... | ... |
... | @@ -302,6 +302,13 @@ packages: | ... | @@ -302,6 +302,13 @@ packages: |
302 | url: "https://pub.flutter-io.cn" | 302 | url: "https://pub.flutter-io.cn" |
303 | source: hosted | 303 | source: hosted |
304 | version: "4.0.5" | 304 | version: "4.0.5" |
305 | + email_validator: | ||
306 | + dependency: "direct main" | ||
307 | + description: | ||
308 | + name: email_validator | ||
309 | + url: "https://pub.flutter-io.cn" | ||
310 | + source: hosted | ||
311 | + version: "2.0.1" | ||
305 | fake_async: | 312 | fake_async: |
306 | dependency: transitive | 313 | dependency: transitive |
307 | description: | 314 | description: | ... | ... |
... | @@ -106,6 +106,7 @@ dependencies: | ... | @@ -106,6 +106,7 @@ dependencies: |
106 | 106 | ||
107 | # A Dart timer that can be paused, resumed and reset. | 107 | # A Dart timer that can be paused, resumed and reset. |
108 | pausable_timer: ^1.0.0+3 | 108 | pausable_timer: ^1.0.0+3 |
109 | + email_validator: ^2.0.1 | ||
109 | 110 | ||
110 | dependency_overrides: | 111 | dependency_overrides: |
111 | decimal: 1.5.0 | 112 | decimal: 1.5.0 | ... | ... |
-
Please register or login to post a comment