329 lines
12 KiB
Dart
329 lines
12 KiB
Dart
import 'dart:convert';
|
||
import 'dart:io';
|
||
|
||
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/components/UserAuthority.dart';
|
||
import 'package:hyzp_ybqx/pages/Works/TJXX/tj_data.dart';
|
||
|
||
import '../../components/EncryptUtil.dart';
|
||
import '../../components/commonFun.dart';
|
||
import '../../config/Config.dart';
|
||
import '../../config/service_url.dart';
|
||
import '../../services/EventBus.dart';
|
||
import '../../services/Storage.dart';
|
||
import '../../widget/JdButton.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位随机数
|
||
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);
|
||
}
|
||
});
|
||
} 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,
|
||
// ),
|
||
],
|
||
),
|
||
),
|
||
);
|
||
}
|
||
}
|