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.

330 lines
12 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 'dart:convert';
import 'package:dio/dio.dart';
import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:fluttertoast/fluttertoast.dart';
import 'package:hyzp_ybqx/pages/Works/TJXX/tj_data.dart';
import '../../components/EncryptUtil.dart';
import '../../components/commonFun.dart';
import '../../config/service_url.dart';
import '../../services/EventBus.dart';
import '../../services/Storage.dart';
import '../../widget/JdText.dart';
class LoginByName2 extends StatefulWidget {
LoginByName2({Key key, this.height}) : super(key: key);
double height;
_LoginPageState createState() => _LoginPageState();
}
class _LoginPageState extends State<LoginByName2> {
//try_setState(); //避免如下异常报错
try_setState() {
try {
setState(() {});
} catch (e) {
print('setState(() {})异常:${e}');
}
}
//监听登录页面销毁的事件
dispose() {
super.dispose();
eventBus.fire(new UserEvent('登录成功...'));
}
bool bRemmberPW = false;
@override
void initState() {
super.initState();
// g_userInfo.username = 'the_user_03';
// g_userInfo.password = '123456';
// g_userInfo.password = 'ybhb1234';
g_userInfo.username = '';
g_userInfo.password = '';
doInit();
//监听统计数据改变事件
eventBus.on<StatisDataUpdate>().listen((event) {
print(event.str);
updateMayLogin();
});
}
//处理延迟登录
updateMayLogin() {
//判断从网络获取三种统计数据是否完成
// if (listZptjStatisAlone.length >= dwSum &&
// listTodayShtj.length >= dwSum &&
// listClltjStatisAlone.length >= dwSum) {
// bMayLogin = true;
// }
if (listAllStatisData.length >= dwSum) {
bMayLogin = true;
}
if (bMayLogin && bLoginVerify) {
//重新初始化处理延时登录的变量
// bMayLogin = false;
// bPreLoading = false;
// bLoginVerify = false; //处理延时登录,判断用户名登录是否验证通过
Navigator.pushNamed(context, '/tabs', arguments: g_iIndex);
// Future.delayed(const Duration(milliseconds: 1000), () {
// });
}
}
doInit() async {
bRemmberPW = await Storage.getBool('bRemmberPW');
bRemmberPW = (null == bRemmberPW) ? false : bRemmberPW;
print('bRemmberPW = $bRemmberPW');
if (bRemmberPW) {
//取出后需解密
g_userInfo.username = await Storage.getString('username');
g_userInfo.username = EncryptUtil.aesDecode(g_userInfo.username);
g_userInfo.password = await Storage.getString('password');
g_userInfo.password = EncryptUtil.aesDecode(g_userInfo.password);
}
try_setState();
}
doLogin() async {
//测试用,临时绕过登录处理
// Navigator.pushNamed(context, '/tabs', arguments: g_iIndex);
// return;
if (!bMayLogin) {
bPreLoading = true;
try_setState();
}
if (bRemmberPW) {
Storage.setBool('bRemmberPW', bRemmberPW);
//加密保存
Storage.setString('username', EncryptUtil.aesEncode(g_userInfo.username));
Storage.setString('password', EncryptUtil.aesEncode(g_userInfo.password));
} else {
Storage.remove('username');
Storage.remove('password');
}
var api = ServicePath.loginUrl;
print(api);
try {
print('开始处理登录请求...');
print('username = ${g_userInfo.username}');
print('password = ${g_userInfo.password}');
Response response;
Dio dio = Dio();
String random = RandomBit(6); //flutter dart生成N位随机数
print('random = ${random}');
print('sign = ${GenerateMd5(APPkey + random)}');
response = await dio.post(api, data: {
"username": g_userInfo.username,
"password": g_userInfo.password,
"sign": GenerateMd5(APPkey + random),
"random": random,
});
print('response = ${response.toString()}');
//I/flutter ( 5242): {"ret":200,"data":{"is_login":true,"user_id":3,"token":"32EE57A0109A3D1D6590CFD3DEBA71820F77AB654093C1DE750347C88D1A41CF"},"msg":""}
if (response.statusCode == 200) {
// Storage.setString('userInfo', json.encode(response.data["userinfo"]));
// //Navigator.pop(context);
// Navigator.pushNamed(context, '/tabs', arguments: g_iIndex);
//print('response.data["data"]["is_login"] = ${response.data["data"]["is_login"]}');
//I/flutter ( 5242): response.data["data"]["is_login"] = true
//{
// "ret": 200,
// "data": {
// "is_login": true,
// "user_id": 1,
// "token": "B93EC91FA2FE293B7077162D4527FC4BB228CD6C0A4F24A882B9A8BBE6C3FB47"
// },
// "msg": ""
// }
print('response = ${response}');
//response = {"ret":406,"data":{},"msg":"非法请求:签名错误"}
if (true == response.data["data"]["is_login"]) {
print('登录成功');
print('response.data = ${response.data}');
//保存用户信息
Storage.setString('userInfo', json.encode(response.data["data"]));
g_userInfo.setUserInfo(theMapUserInfoRet: await getMapFromJson(response.data));
//获取用户所属分组和相应权限
// getUserGroupAll().then((value) {
// bLoginVerify = true; //处理延时登录,判断用户名登录是否验证通过
// if (bMayLogin) {
// // bMayLogin = false;
// // bPreLoading = false;
// // bLoginVerify = false; //处理延时登录,判断用户名登录是否验证通过
// Navigator.pushNamed(context, '/tabs', arguments: g_iIndex);
// }
// });
bLoginVerify = true; //处理延时登录,判断用户名登录是否验证通过
Navigator.pushNamed(context, '/tabs', arguments: g_iIndex);
} else {
print('登录失败:${response.data["data"]}');
bLoginVerify = false; //处理延时登录,判断用户名登录是否验证通过
bPreLoading = false;
Fluttertoast.showToast(
msg: '登录失败:用户名或密码不正确。',
toastLength: Toast.LENGTH_LONG,
gravity: ToastGravity.BOTTOM,
);
print('登录失败:${response.data["data"]}');
}
print('登录过程正常完成');
} else {
throw Exception('后端接口出现异常,请检测代码和服务器情况.........');
}
} catch (e) {
print('登录过程异常...');
print('ERROR:======>${e}');
Fluttertoast.showToast(
msg: 'ERROR:======>${e}',
toastLength: Toast.LENGTH_SHORT,
gravity: ToastGravity.CENTER,
);
}
return;
}
@override
Widget build(BuildContext context) {
return Scaffold(
//resizeToAvoidBottomPadding: false, //解决输入法键盘弹出越界问题-无效
backgroundColor: Colors.transparent,
body: Container(
height: widget.height,
child: Column(
children: [
Container(color: Colors.transparent, height: ScreenUtil().setHeight(45)),
Container(
color: Colors.white,
width: double.infinity,
height: ScreenUtil().setHeight(380),
padding: EdgeInsets.only(top: 10, bottom: 20, left: 20, right: 20),
child: Column(
children: <Widget>[
JdText(
height: 126,
//JdText中已经使用ScreenUtil().setHeight(126),此处不能传 ScreenUtil().setHeight(126) ,否则严重错位
title: '用户名:',
text: "请输入用户名",
onChanged: (String value) {
// print(value);
g_userInfo.username = value;
},
endBtn: 'ClearBtn',
controller: TextEditingController(text: g_userInfo.username),
),
Container(color: Colors.transparent, height: ScreenUtil().setHeight(30)),
JdText(
height: 126,
//JdText中已经使用ScreenUtil().setHeight(126),此处不能传 ScreenUtil().setHeight(126) ,否则严重错位
title: '密 码:',
text: "请输入密码",
password: true,
onChanged: (String value) {
g_userInfo.password = value;
},
endBtn: 'ShowHiddenBtn',
controller: TextEditingController(text: g_userInfo.password),
),
],
),
),
Container(color: Colors.transparent, height: ScreenUtil().setHeight(30)),
Container(
//color: Colors.transparent,
padding: EdgeInsets.all(ScreenUtil().setWidth(10)),
child: Row(
children: [
SizedBox(width: ScreenUtil().setWidth(45)),
InkWell(
onTap: () {
//Navigator.pushNamed(context, '/registerFirst');
this.setState(() {
bRemmberPW = !bRemmberPW;
});
Storage.setBool('bRemmberPW', bRemmberPW);
},
child: Container(
alignment: Alignment(1, -1),
//width: 150,
child: Row(
mainAxisAlignment: MainAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
Container(
alignment: Alignment(0, 0),
height: 22,
width: 22,
padding: EdgeInsets.only(top: ScreenUtil().setHeight(3)),
// child: Checkbox(
// value: bRemmberPW,
// activeColor: Colors.blue,
// onChanged: (bool val) {
// this.setState(() {
// bRemmberPW = !bRemmberPW;
// });
// Storage.setBool('bRemmberPW', bRemmberPW);
// },
// ),
child: bRemmberPW
? Icon(Icons.check_box, color: Colors.blue)
: Icon(Icons.check_box_outline_blank, color: Colors.white),
),
SizedBox(width: ScreenUtil().setWidth(15)),
Text('记住密码', style: TextStyle(fontSize: 17, color: Colors.white)),
],
),
),
),
],
),
),
SizedBox(height: ScreenUtil().setHeight(48)),
InkWell(
onTap: doLogin,
child: Container(
alignment: Alignment(0, 0),
margin: EdgeInsets.all(5),
padding: EdgeInsets.all(5),
width: ScreenUtil().setWidth(999),
height: ScreenUtil().setHeight(126),
decoration: BoxDecoration(
color: Color.fromRGBO(23, 176, 91, 1), borderRadius: BorderRadius.circular(10)),
child: Text(
bPreLoading ? "加载中 . . ." : "登 录",
style: TextStyle(color: Colors.white, fontSize: 18),
),
),
),
// JdButton(
// height: 126,
// //JdText中已经使用ScreenUtil().setHeight(126),此处不能传 ScreenUtil().setHeight(126) ,否则严重错位
// width: 999,
// text: "登 录",
// color: Color.fromRGBO(23, 176, 91, 1),
// onTop: doLogin,
// ),
],
),
),
);
}
}