| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181 |
- import 'package:flutter/material.dart';
- import 'package:flutter_keyboard_visibility/flutter_keyboard_visibility.dart';
- import 'package:lszlgl/base/base_state.dart';
- import 'package:lszlgl/config/borders.dart';
- import 'package:lszlgl/main.dart';
- import 'package:lszlgl/network/my_api.dart';
- import 'package:lszlgl/utils/string_utils.dart';
- import 'package:lszlgl/widget/button.dart';
- import 'package:lszlgl/widget/countdown_button_widget.dart';
- class ForgetPasswordPage extends StatefulWidget {
- const ForgetPasswordPage({super.key});
- @override
- State<ForgetPasswordPage> createState() => _ForgetPasswordPageState();
- }
- class _ForgetPasswordPageState extends BaseState<ForgetPasswordPage> {
- late GlobalKey<FormState> textFormKey;
- late TextEditingController phoneCtrl;
- late TextEditingController msgCtrl;
- late TextEditingController pwdCtrl;
- @override
- void initState() {
- super.initState();
- textFormKey = GlobalKey<FormState>();
- phoneCtrl = TextEditingController();
- msgCtrl = TextEditingController();
- pwdCtrl = TextEditingController();
- }
- /// 重置密码
- void resetPwd() async{
- MyNavigator.showLoading(msg: '密码设置中...');
- try{
- var res = await MyApi.get().resetPassword({
- 'username': phoneCtrl.text,
- 'password': pwdCtrl.text,
- 'code':msgCtrl.text,
- });
- if(res.data ?? false){
- MyNavigator.showToast('密码设置成功');
- MyNavigator.pop();
- }
- }catch(e){
- logger.e(e);
- }
- MyNavigator.dismissLoading();
- }
- @override
- Widget build(BuildContext context) {
- return myScaffold(
- child: KeyboardDismissOnTap(
- dismissOnCapturedTaps: true,
- child: Column(
- children: [
- myAppBar(title: '忘记密码'),
- Expanded(
- child: Container(
- color: Colors.white,
- child: SingleChildScrollView(
- padding: const EdgeInsets.fromLTRB(22, 40, 22, 20),
- child: Form(
- key: textFormKey,
- child: Column(
- children: [
- TextFormField(
- controller: phoneCtrl,
- keyboardType: TextInputType.number,
- decoration: const InputDecoration(
- hintText: '手机号',
- contentPadding: EdgeInsets.symmetric(horizontal: 20,vertical: 6),
- border: Borders.borderA,
- enabledBorder: Borders.borderB,
- ),
- validator: (val){
- return StringUtils.isPhoneNum(val) ? null : '请输入手机号';
- },
- ),
- const SizedBox(height: 16),
- TextFormField(
- controller: msgCtrl,
- keyboardType: TextInputType.number,
- decoration: InputDecoration(
- hintText: '验证码',
- contentPadding: const EdgeInsets.symmetric(horizontal: 20,vertical: 6),
- border: Borders.borderA,
- enabledBorder: Borders.borderB,
- suffixIconConstraints: const BoxConstraints(maxHeight: 26),
- suffixIcon: Padding(
- padding: const EdgeInsets.only(right: 20),
- child: CountdownButtonWidget(
- phoneController: phoneCtrl,
- ),
- ),
- ),
- validator: (value){
- return value!.trim().isEmpty ? '请输入验证码' : null;
- },
- ),
- const SizedBox(height: 16),
- TextFormField(
- controller: pwdCtrl,
- obscureText: true,
- decoration: const InputDecoration(
- hintText: '新密码',
- contentPadding: EdgeInsets.symmetric(horizontal: 20,vertical: 6),
- border: Borders.borderA,
- enabledBorder: Borders.borderB,
- ),
- validator: (val){
- if(val!.length < 8){
- return '密码长度要大于8位';
- }
- var regex = RegExp(r'\d');
- if (!regex.hasMatch(val)) {
- return '密码要包含数字';
- }
- regex = RegExp(r'[a-zA-Z]');
- if (!regex.hasMatch(val)) {
- return '密码要包含大写字母或小写字母';
- }
- regex = RegExp(r'[!\"#$%&()*+,-./:;<=>?@\]\[^_`{|}~]');
- if (!regex.hasMatch(val)) {
- return '密码要包含特殊字符';
- }
- return null;
- },
- ),
- const SizedBox(height: 16),
- TextFormField(
- obscureText: true,
- decoration: const InputDecoration(
- hintText: '再次输入新密码',
- contentPadding: EdgeInsets.symmetric(horizontal: 20,vertical: 6),
- border: Borders.borderA,
- enabledBorder: Borders.borderB,
- ),
- validator: (val){
- if(val!.trim().isEmpty){
- return '请再次输入新密码';
- }
- if(val != pwdCtrl.text){
- return '两次输入密码不一致';
- }
- return null;
- },
- ),
- const SizedBox(height: 20),
- const Text(
- '*密码长度大于8位,包含数字、字母和特殊字符。',
- style: TextStyle(color: Colors.black54),
- ),
- const SizedBox(height: 36),
- MyButton(
- '确定',
- gradient: const LinearGradient(colors: [Color(0xFF3BD2E5), Color(0xFF247AF8)]),
- minHeight: 40,
- onTap: () {
- if (textFormKey.currentState!.validate()) {
- resetPwd();
- }
- },
- ),
- ],
- ),
- ),
- ),
- )),
- ],
- )));
- }
- }
|