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.

242 lines
7.8 KiB
Dart

import 'dart:io';
import 'package:camera/camera.dart';
import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:hyzp_ybqx02_xingwen/pages/Works/TJXX/tj_data.dart';
import 'package:hyzp_ybqx02_xingwen/widget/JdButton.dart';
import '../../components/commonFun.dart';
import '../../services/EventBus.dart';
class FaceLogin2 extends StatefulWidget {
FaceLogin2({this.arguments, Key key}) : super(key: key);
var arguments;
_LoginPageState createState() => _LoginPageState();
}
class _LoginPageState extends State<FaceLogin2> {
//try_setState(); //避免如下异常报错
try_setState() {
try {
setState(() {});
} catch (e) {
print('setState(() {})异常:${e}');
}
}
Future<void> camerasInit() async {
try {
WidgetsFlutterBinding.ensureInitialized();
cameras = await availableCameras();
print(cameras.toString());
} on CameraException catch (e) {
//logError(e.code, e.description);
}
}
@override
void initState() {
super.initState();
camerasInit();
//监听统计数据改变事件
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;
try_setState();
}
}
//监听登录页面销毁的事件
dispose() {
super.dispose();
eventBus.fire(new UserEvent('登录成功...'));
}
double _heigth = 340;
@override
Widget build(BuildContext context) {
return Scaffold(
// appBar: AppBar(
// centerTitle: true,
// title: Text('人脸验证登录'),
// ),
body: Container(
padding: EdgeInsets.only(
left: ScreenUtil().setWidth(60),
right: ScreenUtil().setWidth(60),
top: ScreenUtil().setWidth(58)),
child: ListView(
children: <Widget>[
InkWell(
child: Center(
child: Container(
//margin: EdgeInsets.only(top: ScreenUtil().setHeight(40)),
height: ScreenUtil().setHeight(_heigth), //这样在不同的手机上会变形
width: ScreenUtil().setWidth(_heigth),
// height: _heigth,
// width: _heigth,
color: Colors.black12,
child: Stack(
children: [
Align(
alignment: Alignment.center,
child: Image.asset('assets/images/图层 5.png', fit: BoxFit.cover),
),
Align(
alignment: Alignment.center,
child: Column(
children: [
SizedBox(height: ScreenUtil().setHeight(_heigth / 3)),
Container(
height: ScreenUtil().setHeight(6),
color: Color.fromRGBO(53, 136, 240, 1),
),
],
),
),
Align(
alignment: Alignment.bottomCenter,
child: Container(
height: ScreenUtil().setHeight(_heigth - _heigth / 3 - 6),
decoration: BoxDecoration(
gradient: LinearGradient(
begin: Alignment.topCenter,
end: Alignment.bottomCenter,
colors: [
Color.fromRGBO(222, 237, 255, 1),
Color.fromRGBO(255, 255, 255, 0),
],
),
),
)),
],
),
),
),
onTap: () {
if (!bMayLogin) {
return;
}
Navigator.pushNamed(context, '/faceLogin_take_pictuer', arguments: 'FaceLogin');
},
),
SizedBox(height: ScreenUtil().setHeight(40)),
Container(
height: ScreenUtil().setWidth(130),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
children: [
_getImageWidget('assets/images/形状 811.png', '正对手机'),
_getImageWidget('assets/images/形状 810.png', '光线充足'),
_getImageWidget('assets/images/形状 809.png', '放慢动作'),
],
),
),
SizedBox(height: ScreenUtil().setHeight(20)),
InkWell(
onTap: () {
if (!bMayLogin) {
return;
}
Navigator.pushNamed(context, '/faceLogin_take_pictuer', arguments: 'FaceLogin');
},
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(
bMayLogin ? "开始检测" : "加载中 . . .",
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: () {
// if (!bMayLogin) {
// return;
// }
// Navigator.pushNamed(context, '/faceLogin_take_pictuer', arguments: 'FaceLogin');
// },
// ),
],
),
),
);
}
// 定义一个图文组件
Widget _getImageWidget(String imagePath, String text) {
return Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Container(
height: ScreenUtil().setHeight(60),
child: Image.asset(imagePath, fit: BoxFit.cover),
),
Text(text, style: TextStyle(fontSize: 14)),
],
);
}
//定义一个组件显示图片
Widget _getImage(String filePath) {
if (null == filePath) {
return Text("请选择图片...");
}
File _image = File(filePath);
//return Image.file(_image);
int imageWidth;
int imageHeight;
// 预先获取图片信息
Image image = Image.file(File.fromUri(Uri.parse(filePath)));
image.image
.resolve(new ImageConfiguration())
.addListener(new ImageStreamListener((ImageInfo info, bool _) {
imageWidth = info.image.width;
imageHeight = info.image.height;
}));
return Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
//480*720
Text('宽高:${imageWidth}x${imageHeight}', style: TextStyle(fontSize: 17.0)),
Container(
width: imageWidth / 4,
height: imageHeight / 4,
decoration: BoxDecoration(
image: DecorationImage(image: AssetImage(filePath), fit: BoxFit.cover),
),
)
],
);
}
}