You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

284 lines
9.7 KiB
Dart

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

import 'package:flutter/material.dart';
import '../../components/commonFun.dart';
import '../../widget/JdText.dart';
import '../../widget/JdButton.dart';
import '../../config/Config.dart';
import 'package:dio/dio.dart';
import 'package:fluttertoast/fluttertoast.dart';
import '../../services/Storage.dart';
import 'dart:convert';
import '../../components/EncryptUtil.dart';
import '../../services/EventBus.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import '../../config/service_url.dart';
class ModifyPassword extends StatefulWidget {
ModifyPassword({Key key}) : super(key: key);
_LoginPageState createState() => _LoginPageState();
}
class _LoginPageState extends State<ModifyPassword> {
//监听登录页面销毁的事件
dispose() {
super.dispose();
eventBus.fire(new UserEvent('登录成功...'));
}
String oldPassword = '';
String newPassword1 = '';
String newPassword2 = '';
doModifyPw() async {
oldPassword = oldPassword.trim();
newPassword1 = newPassword1.trim();
newPassword2 = newPassword2.trim();
RegExp regNewPw = RegExp(r"^[a-zA-Z0-9\?_!@#\$\%\^&]+$");
if (g_userInfo.password.isNotEmpty && oldPassword != g_userInfo.password) {
Fluttertoast.showToast(
msg: '输入的旧密码错误!',
toastLength: Toast.LENGTH_SHORT,
gravity: ToastGravity.CENTER,
);
} else if (newPassword1 != newPassword2) {
Fluttertoast.showToast(
msg: '两次输入的新密码不一致!',
toastLength: Toast.LENGTH_SHORT,
gravity: ToastGravity.CENTER,
);
} else if (oldPassword == newPassword1) {
Fluttertoast.showToast(
msg: '新旧密码不能完全一样!',
toastLength: Toast.LENGTH_SHORT,
gravity: ToastGravity.CENTER,
);
} else if (newPassword1.length < 6 || newPassword1.length > 12) {
Fluttertoast.showToast(
msg: '新密码位数不对,应在 6-12 位之间!',
toastLength: Toast.LENGTH_SHORT,
gravity: ToastGravity.CENTER,
);
} else if (!regNewPw.hasMatch(newPassword1)) {
Fluttertoast.showToast(
msg: '新密码格式不对,应该由 6-12 位英文字母、数字和特殊符号组成!',
toastLength: Toast.LENGTH_SHORT,
gravity: ToastGravity.CENTER,
);
} else {
doModifyPwDio().then((value) {
if (value) {
print(value);
//密码修改成,保存新密码
g_userInfo.password = newPassword1;
//加密保存新密码
Storage.setString('password', EncryptUtil.aesEncode(g_userInfo.password));
Fluttertoast.showToast(
msg: '密码修改成功!',
toastLength: Toast.LENGTH_LONG,
gravity: ToastGravity.CENTER,
);
Navigator.pop(context); // 返回上一个页面
}
});
}
}
Future doModifyPwDio() async {
var api = ServicePath.modifyPwUrl;
print(api);
bool ret = false;
try {
print('开始处理修改密码请求...');
print('username = ${g_userInfo.username}');
print('password = ${g_userInfo.password}');
Response response;
Dio dio = Dio();
String random = RandomBit(6); //flutter dart生成N位随机数
response = await dio.post(api, data: {
"username": g_userInfo.username,
"oldpassword": oldPassword,
"newpassword": newPassword1,
"sign": GenerateMd5(APPkey + random),
"random": random,
});
print('response = ${response.toString()}');
//response = {"ret":200,"data":"密码修改成功","msg":""}
//response = {"ret":200,"data":"原密码错误","msg":""}
if (response.statusCode == 200) {
if (response.data["data"].indexOf('成功') > 0) {
ret = true;
print('密码修改成功');
print('response.data["data"] = ${response.data["data"]}');
} else {
print('密码修改失败:${response.data["data"]}');
Fluttertoast.showToast(
msg: '密码修改失败:${response.data["data"]}',
toastLength: Toast.LENGTH_LONG,
gravity: ToastGravity.CENTER,
);
}
print('密码修改过程正常完成');
} else {
throw Exception('后端接口出现异常,请检测代码和服务器情况.........');
}
} catch (e) {
print('密码修改过程异常...');
print('ERROR:======>${e}');
Fluttertoast.showToast(
msg: 'ERROR:======>${e}',
toastLength: Toast.LENGTH_SHORT,
gravity: ToastGravity.CENTER,
);
}
return ret;
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: PreferredSize(
preferredSize: Size.fromHeight(ScreenUtil().setHeight(173)), // 设置appBar高度
// 设置appBar高度
child: AppBar(
automaticallyImplyLeading: false,
centerTitle: true,
titleSpacing: 0.0,
//设置title的左边距
flexibleSpace: Container(
//SizedBox(height: ScreenUtil().statusBarHeight), //显示顶部状态栏
// SizedBox(height: ScreenUtil().setHeight(10)), //显示顶部状态栏
padding: EdgeInsets.only(top: ScreenUtil().statusBarHeight), //留出顶部状态栏高度
child: Container(
//height: ScreenUtil().setHeight(173),
decoration: BoxDecoration(
gradient: LinearGradient(
begin: Alignment.centerLeft,
end: Alignment.centerRight,
colors: [
Color.fromRGBO(12, 186, 156, 1),
Color.fromRGBO(39, 127, 235, 1),
],
),
),
// decoration: BoxDecoration(
// gradient: LinearGradient(colors: [
// Color(0xFF0018EB),
// Color(0xFF01C1D9),
// ], begin: Alignment.bottomCenter, end: Alignment.topCenter),
// ),
),
),
title: Padding(
padding: EdgeInsets.only(left: 0, right: 0),
child: Row(
mainAxisAlignment: MainAxisAlignment.start,
children: [
getIconAndTextButton(
iconColor: Colors.white,
iconData: Icons.chevron_left_outlined,
onPress: () {
Navigator.pop(context);
},
),
Expanded(
child: Text("修改密码",
style: TextStyle(color: Colors.white, fontSize: 20),
textAlign: TextAlign.center,
overflow: TextOverflow.ellipsis),
),
SizedBox(width: 50),
],
),
),
),
),
body: Container(
padding: EdgeInsets.only(top: 30, bottom: 20, left: 20, right: 20),
child: ListView(
children: <Widget>[
Center(
child: Container(
margin: EdgeInsets.only(top: 30),
height: ScreenUtil().setWidth(160),
width: ScreenUtil().setWidth(160),
//child: Image.asset('assets/images/user.png', fit: BoxFit.cover),
child: Image.asset('assets/images/ybsthbj.png', fit: BoxFit.fitHeight),
// child: Image.network(
// 'https://www.itying.com/images/flutter/list5.jpg',
// fit: BoxFit.cover),
),
),
SizedBox(height: 50),
JdText(
height: ScreenUtil().setHeight(300),
title: '旧密码:',
text: "请输入旧密码",
password: true,
onChanged: (String value) {
// print(value);
oldPassword = value;
},
endBtn: 'ShowHiddenBtn',
),
SizedBox(height: 20),
JdText(
height: ScreenUtil().setHeight(300),
title: '新密码:',
text: "请输入6-12位新密码",
password: true,
onChanged: (String value) {
// print(value);
newPassword1 = value;
},
endBtn: 'ShowHiddenBtn',
),
SizedBox(height: 20),
JdText(
height: ScreenUtil().setHeight(300),
title: '新密码:',
text: "请再次输入6-12位新密码",
password: true,
onChanged: (String value) {
// print(value);
newPassword2 = value;
},
endBtn: 'ShowHiddenBtn',
),
SizedBox(height: 20),
Container(
alignment: Alignment(0, 0),
height: ScreenUtil().setHeight(222),
//width: ScreenUtil().setWidth(142),
padding: EdgeInsets.only(
left: ScreenUtil().setWidth(25), right: ScreenUtil().setWidth(25)),
decoration: new BoxDecoration(
borderRadius: BorderRadius.all(Radius.circular(4.0)),
border: new Border.all(width: 1, color: Colors.grey),
),
child: Text('新密码需要6-12位可以由大小写字母、阿拉伯数字以及英文 ?、_、、@、#、\$、%、^、& 等字符组成。',
style: TextStyle(fontSize: 15)),
),
SizedBox(height: 60),
JdButton(
height: ScreenUtil().setHeight(382),
//height: 126,
text: "确认",
color: Colors.blueAccent,
onTop: doModifyPw,
)
],
),
),
);
}
}