|
|
|
import 'dart:async';
|
|
|
|
import 'dart:convert';
|
|
|
|
import 'dart:io';
|
|
|
|
|
|
|
|
import 'package:common_utils/common_utils.dart';
|
|
|
|
import 'package:dio/dio.dart';
|
|
|
|
import 'package:flutter/material.dart';
|
|
|
|
import 'package:flutter_screenutil/flutter_screenutil.dart';
|
|
|
|
import 'package:fluwx/fluwx.dart' as fluwx;
|
|
|
|
import 'package:fluwx/fluwx.dart';
|
|
|
|
import 'package:one_key/app.dart';
|
|
|
|
import 'package:one_key/net/dio_util.dart';
|
|
|
|
import 'package:one_key/provider/user_model.dart';
|
|
|
|
import 'package:one_key/res/colors.dart';
|
|
|
|
import 'package:one_key/utils/navigator_util.dart';
|
|
|
|
import 'package:one_key/utils/utils.dart';
|
|
|
|
import 'package:one_key/widgets/h_empty_view.dart';
|
|
|
|
import 'package:one_key/widgets/round_button.dart';
|
|
|
|
import 'package:one_key/widgets/v_empty_view.dart';
|
|
|
|
import 'package:provider/provider.dart';
|
|
|
|
import 'package:sign_in_with_apple/sign_in_with_apple.dart';
|
|
|
|
|
|
|
|
class LoginPage extends StatefulWidget {
|
|
|
|
@override
|
|
...
|
...
|
@@ -16,46 +28,64 @@ class LoginPage extends StatefulWidget { |
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
class LoginState extends State<LoginPage> with WidgetsBindingObserver{
|
|
|
|
|
|
|
|
TextEditingController _sellerCodeController=TextEditingController();
|
|
|
|
class LoginState extends State<LoginPage> with WidgetsBindingObserver {
|
|
|
|
TextEditingController _sellerCodeController = TextEditingController();
|
|
|
|
TextEditingController _accountController = TextEditingController();
|
|
|
|
final TextEditingController _pwdController = TextEditingController();
|
|
|
|
final ScrollController _scrollController=new ScrollController();
|
|
|
|
final ScrollController _scrollController = new ScrollController();
|
|
|
|
|
|
|
|
final FocusNode _sellerCodeFocusNode=new FocusNode();
|
|
|
|
final FocusNode _accountFocusNode=new FocusNode();
|
|
|
|
final FocusNode _pwdFocusNode=new FocusNode();
|
|
|
|
final FocusNode _sellerCodeFocusNode = new FocusNode();
|
|
|
|
final FocusNode _accountFocusNode = new FocusNode();
|
|
|
|
final FocusNode _pwdFocusNode = new FocusNode();
|
|
|
|
|
|
|
|
bool obscureText=true;//是否隐藏密码
|
|
|
|
bool isActivate=false;//是否激活登录
|
|
|
|
bool obscureText = true; //是否隐藏密码
|
|
|
|
bool isActivate = false; //是否激活登录
|
|
|
|
|
|
|
|
String errorText="";//错误提示
|
|
|
|
String errorText = ""; //错误提示
|
|
|
|
|
|
|
|
bool _check = true;
|
|
|
|
StreamSubscription<BaseWeChatResponse> _wxlogin;
|
|
|
|
|
|
|
|
@override
|
|
|
|
void initState(){
|
|
|
|
void initState() {
|
|
|
|
// TODO: implement initState
|
|
|
|
super.initState();
|
|
|
|
_initFluwx();
|
|
|
|
isLogin();
|
|
|
|
WidgetsBinding.instance.addObserver(this);
|
|
|
|
WidgetsBinding.instance.addPostFrameCallback((_){
|
|
|
|
final UserModel userModel=Provider.of<UserModel>(context,listen: false);
|
|
|
|
if(userModel!=null&&userModel.user!=null){
|
|
|
|
Future.delayed(Duration(milliseconds: 50),(){
|
|
|
|
_sellerCodeController.text=userModel.user.sellercode;
|
|
|
|
_accountController.text=userModel.user.account;
|
|
|
|
FocusScope.of(context).requestFocus(_pwdFocusNode);
|
|
|
|
WidgetsBinding.instance.addPostFrameCallback((_) {
|
|
|
|
final UserModel userModel =
|
|
|
|
Provider.of<UserModel>(context, listen: false);
|
|
|
|
if (userModel != null && userModel.user != null) {
|
|
|
|
Future.delayed(Duration(milliseconds: 50), () {
|
|
|
|
_sellerCodeController.text = userModel.user.sellercode;
|
|
|
|
_accountController.text = userModel.user.account;
|
|
|
|
// FocusScope.of(context).requestFocus(_pwdFocusNode);
|
|
|
|
});
|
|
|
|
}
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
handlePostFrame(_){
|
|
|
|
// _scrollController.jumpTo(_scrollController.position.maxScrollExtent);
|
|
|
|
//初始化微信SDK
|
|
|
|
_initFluwx() async {
|
|
|
|
await registerWxApi(
|
|
|
|
appId: "wx85aa3cdd0f791e65",
|
|
|
|
doOnAndroid: true,
|
|
|
|
doOnIOS: true,
|
|
|
|
universalLink: "https://xt04.colorcun.com/link/OneKey/");
|
|
|
|
var result = await isWeChatInstalled;
|
|
|
|
if (result != null && result) {
|
|
|
|
App.isInstallWx = true;
|
|
|
|
} else {
|
|
|
|
App.isInstallWx = false;
|
|
|
|
}
|
|
|
|
setState(() {});
|
|
|
|
LogUtil.v("is installed $result");
|
|
|
|
}
|
|
|
|
|
|
|
|
handlePostFrame(_) {
|
|
|
|
// _scrollController.jumpTo(_scrollController.position.maxScrollExtent);
|
|
|
|
}
|
|
|
|
|
|
|
|
@override
|
|
|
|
void didChangeMetrics() {
|
|
...
|
...
|
@@ -72,279 +102,562 @@ class LoginState extends State<LoginPage> with WidgetsBindingObserver{ |
|
|
|
}
|
|
|
|
|
|
|
|
//监听输入框,设置登录按钮状态
|
|
|
|
setActivate(){
|
|
|
|
if(_sellerCodeController.text.isNotEmpty&&_accountController.text.isNotEmpty&&_pwdController.text.isNotEmpty){
|
|
|
|
setActivate() {
|
|
|
|
if (_sellerCodeController.text.isNotEmpty &&
|
|
|
|
_accountController.text.isNotEmpty &&
|
|
|
|
_pwdController.text.isNotEmpty) {
|
|
|
|
setState(() {
|
|
|
|
errorText="";
|
|
|
|
isActivate=true;
|
|
|
|
errorText = "";
|
|
|
|
isActivate = true;
|
|
|
|
});
|
|
|
|
}else{
|
|
|
|
} else {
|
|
|
|
setState(() {
|
|
|
|
errorText="";
|
|
|
|
isActivate=false;
|
|
|
|
errorText = "";
|
|
|
|
isActivate = false;
|
|
|
|
});
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
//判断是否登录
|
|
|
|
void isLogin()async{
|
|
|
|
void isLogin() async {
|
|
|
|
await App.initSp();
|
|
|
|
UserModel userModel=Provider.of<UserModel>(context,listen: false);
|
|
|
|
UserModel userModel = Provider.of<UserModel>(context, listen: false);
|
|
|
|
userModel.initUser();
|
|
|
|
if(App.sp.getBool("isLogin")??false){
|
|
|
|
Future.delayed(Duration(milliseconds: 200),(){
|
|
|
|
if (App.sp.getBool("isLogin") ?? false) {
|
|
|
|
Future.delayed(Duration(milliseconds: 200), () {
|
|
|
|
NavigatorUtil.goHomePage(context);
|
|
|
|
});
|
|
|
|
} else {
|
|
|
|
_getWxCode();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
///微信登陆
|
|
|
|
|
|
|
|
_wxLogin() {
|
|
|
|
sendWeChatAuth(scope: "snsapi_userinfo");
|
|
|
|
}
|
|
|
|
|
|
|
|
///获取微信登录code
|
|
|
|
_getWxCode() {
|
|
|
|
_wxlogin = fluwx.weChatResponseEventHandler
|
|
|
|
.distinct((a, b) => a == b)
|
|
|
|
.listen((res) {
|
|
|
|
if (res is fluwx.WeChatAuthResponse && res.errCode == 0) {
|
|
|
|
LogUtil.v("code:" + res.code);
|
|
|
|
_getAccessToken(res.code);
|
|
|
|
} else {
|
|
|
|
// Utils.showToast(res.errStr??"登录失败,请稍后重试");
|
|
|
|
}
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
///获取微信登录access_token
|
|
|
|
_getAccessToken(String code) async {
|
|
|
|
Response response = await DioUtil.getInstance().getDio().get(
|
|
|
|
"https://api.weixin.qq.com/sns/oauth2/access_token?appid=wx85aa3cdd0f791e65&secret=87c9a23c2e6032b2da75af6b0efc5424&code=$code&grant_type=authorization_code");
|
|
|
|
LogUtil.v("access_token:${response.toString()}");
|
|
|
|
Map<String, dynamic> responseData = json.decode(response.data.toString());
|
|
|
|
if (responseData["errcode"] != null) {
|
|
|
|
// Utils.showToast(responseData["errmsg"]??"登录,请稍后重试");
|
|
|
|
} else {
|
|
|
|
App.sp.setString("openid", responseData["openid"]);
|
|
|
|
App.sp.setString("unionid", responseData["unionid"]);
|
|
|
|
|
|
|
|
//跳转至手机号绑定页面
|
|
|
|
//判断是否已经绑定手机号码 ******调用接口*******
|
|
|
|
//有,通过手机号吗或者opened查找店铺信息进行登陆
|
|
|
|
//没有,跳转至绑定手机号码页面
|
|
|
|
|
|
|
|
NavigatorUtil.goBindingPhonePage(context);
|
|
|
|
|
|
|
|
// _getUserInfo(responseData["access_token"], responseData["openid"]);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// //获取用户信息
|
|
|
|
// _getUserInfo(String access_token, String openid) async {
|
|
|
|
// Response response = await DioUtil.getInstance().getDio().get(
|
|
|
|
// "https://api.weixin.qq.com/sns/userinfo?access_token=$access_token&openid=$openid");
|
|
|
|
// LogUtil.v('userinfo:' + response.data);
|
|
|
|
// Map<String, dynamic> responseData = json.decode(response.data.toString());
|
|
|
|
// if (responseData["errcode"] != null) {
|
|
|
|
// // Utils.showToast(responseData["errmsg"]??"登录,请稍后重试");
|
|
|
|
// } else {
|
|
|
|
// App.sp.setString("nickName", responseData["nickname"]);
|
|
|
|
// App.sp.setString("headImg", responseData["headimgurl"]);
|
|
|
|
// App.sp.setString("unionid", responseData["unionid"]);
|
|
|
|
// App.sp.setBool("isLogin", true);
|
|
|
|
// // _fromTypeGo();
|
|
|
|
// String unionId = App.sp.getString("unionid");
|
|
|
|
// _getMiniOpenid(unionId);
|
|
|
|
// }
|
|
|
|
// }
|
|
|
|
// //获取绑定小程序openid
|
|
|
|
// _getMiniOpenid(String unionId) async {
|
|
|
|
// UserModel userInfoProvider = UserModel();
|
|
|
|
// // Provider.of<UserInfoProvider>(context, listen: false);
|
|
|
|
// Map<String, String> params = {"unionid": unionId};
|
|
|
|
// String miniOpenid =
|
|
|
|
// await userInfoProvider.getMiniProgramOpenid(context, params);
|
|
|
|
// if (miniOpenid == null) {
|
|
|
|
// goMiniProgramMd(unionId);
|
|
|
|
// }
|
|
|
|
// }
|
|
|
|
|
|
|
|
/*
|
|
|
|
苹果登录获取用户信息
|
|
|
|
*/
|
|
|
|
_getUserInfoIOS() async {
|
|
|
|
// Map<String, String> params = {"openid": App.sp.getString("openid")};
|
|
|
|
// UserInfoProvider userInfoProvider =
|
|
|
|
// Provider.of<UserInfoProvider>(context, listen: false);
|
|
|
|
// UseInfoItemModel useInfoItemModel =
|
|
|
|
// await userInfoProvider.getUserInfo(context, params);
|
|
|
|
|
|
|
|
// if (ObjectUtil.isNotEmpty(useInfoItemModel.openid)) {
|
|
|
|
// _hideLoading(context);
|
|
|
|
// App.sp.setString("nickName", useInfoItemModel.nickname);
|
|
|
|
// App.sp.setString("headImg", '');
|
|
|
|
// App.sp.setString("unionid", '');
|
|
|
|
// App.sp.setBool("isLogin", true);
|
|
|
|
// UserInfoProvider userInfoProvider = new UserInfoProvider();
|
|
|
|
// userInfoProvider.initPlatformState(context);
|
|
|
|
// // Loading.hideLoading(context);
|
|
|
|
// _fromTypeGo();
|
|
|
|
// } else {
|
|
|
|
// // 已经授权,但是后台库里没有数据,版本差异,重新插入数据库
|
|
|
|
// Map param = {
|
|
|
|
// 'openid': App.sp.getString("openid"),
|
|
|
|
// 'avatar': 'ios_avatar',
|
|
|
|
// 'nickname': '',
|
|
|
|
// 'gender': '1'
|
|
|
|
// };
|
|
|
|
// LoginRespository().appleLogin(context, param, () {
|
|
|
|
// _getUserInfoIOS();
|
|
|
|
// });
|
|
|
|
// }
|
|
|
|
}
|
|
|
|
|
|
|
|
///苹果登陆
|
|
|
|
_iosLogin() async {
|
|
|
|
// String info = await Utils.getDeviceInfoSystem();
|
|
|
|
// int systemInfo = info.compareTo('13');
|
|
|
|
// if (systemInfo < 0) {
|
|
|
|
// Utils.showToast('该系统版本不支持苹果登录');
|
|
|
|
// return;
|
|
|
|
// }
|
|
|
|
// final credential = await SignInWithApple.getAppleIDCredential(
|
|
|
|
// scopes: [
|
|
|
|
// AppleIDAuthorizationScopes.email,
|
|
|
|
// AppleIDAuthorizationScopes.fullName,
|
|
|
|
// ],
|
|
|
|
// webAuthenticationOptions: WebAuthenticationOptions(
|
|
|
|
// // TODO: Set the `clientId` and `redirectUri` arguments to the values you entered in the Apple Developer portal during the setup
|
|
|
|
// clientId: 'com.naji.zdap',
|
|
|
|
// redirectUri: Uri.parse(
|
|
|
|
// 'https://flutter-sign-in-with-apple-example.glitch.me/callbacks/sign_in_with_apple',
|
|
|
|
// ),
|
|
|
|
// ),
|
|
|
|
// );
|
|
|
|
// _showLoading(context);
|
|
|
|
// String mdString = Utils.generateMd5(credential.userIdentifier);
|
|
|
|
// String temp = mdString.substring(8, mdString.length - 2);
|
|
|
|
// String openid = 'IOSID_$temp';
|
|
|
|
// App.sp.setString("openid", openid);
|
|
|
|
// App.sp.setString("unionid", '');
|
|
|
|
// print(openid.length);
|
|
|
|
|
|
|
|
// // 第一次授权
|
|
|
|
// if (ObjectUtil.isNotEmpty(credential.familyName)) {
|
|
|
|
// Map param = {
|
|
|
|
// 'openid': openid,
|
|
|
|
// 'avatar': 'ios_avatar',
|
|
|
|
// 'nickname': '${credential.familyName}${credential.givenName}',
|
|
|
|
// 'gender': '1'
|
|
|
|
// };
|
|
|
|
// LoginRespository().appleLogin(context, param, () {
|
|
|
|
// _getUserInfoIOS();
|
|
|
|
// });
|
|
|
|
// } else {
|
|
|
|
// if (ObjectUtil.isNotEmpty(App.sp.getString("newUserMsg"))) {
|
|
|
|
// Map newUserMsg = jsonDecode(App.sp.getString("newUserMsg"));
|
|
|
|
// //上次失败了,这次重新传
|
|
|
|
// LoginRespository().appleLogin(context, newUserMsg, () {
|
|
|
|
// _getUserInfoIOS();
|
|
|
|
// });
|
|
|
|
// } else {
|
|
|
|
// _getUserInfoIOS();
|
|
|
|
// }
|
|
|
|
// }
|
|
|
|
}
|
|
|
|
|
|
|
|
@override
|
|
|
|
Widget build(BuildContext context) {
|
|
|
|
// TODO: implement build
|
|
|
|
ScreenUtil.init(context,width: 750,height: 1334);
|
|
|
|
final Size size=MediaQuery.of(context).size;
|
|
|
|
App.screenWidth=size.width;
|
|
|
|
App.screenHeight=size.height;
|
|
|
|
App.statusBarHeight=MediaQuery.of(context).padding.top;
|
|
|
|
App.bottomBarHeight=MediaQuery.of(context).padding.bottom;
|
|
|
|
ScreenUtil.init(context, width: 750, height: 1334);
|
|
|
|
final Size size = MediaQuery.of(context).size;
|
|
|
|
App.screenWidth = size.width;
|
|
|
|
App.screenHeight = size.height;
|
|
|
|
App.statusBarHeight = MediaQuery.of(context).padding.top;
|
|
|
|
App.bottomBarHeight = MediaQuery.of(context).padding.bottom;
|
|
|
|
|
|
|
|
final double prefixIconWidth = ScreenUtil().setWidth(24);
|
|
|
|
|
|
|
|
final double prefixIconWidth=ScreenUtil().setWidth(24);
|
|
|
|
return Scaffold(
|
|
|
|
backgroundColor: MyColours.color_ffffff,
|
|
|
|
body: Container(
|
|
|
|
width: double.infinity,
|
|
|
|
height: double.infinity,
|
|
|
|
child: SingleChildScrollView(
|
|
|
|
controller: _scrollController,
|
|
|
|
child: Column(
|
|
|
|
crossAxisAlignment: CrossAxisAlignment.center,
|
|
|
|
children: <Widget>[
|
|
|
|
VEmptyView(218-App.statusBarHeight),
|
|
|
|
Image.asset("assets/logo.png",width: ScreenUtil().setWidth(217),height: ScreenUtil().setWidth(206),),
|
|
|
|
VEmptyView(121),
|
|
|
|
Container(
|
|
|
|
height: ScreenUtil().setHeight(84),
|
|
|
|
width: ScreenUtil().setWidth(611),
|
|
|
|
padding: EdgeInsets.only(left: ScreenUtil().setWidth(20)),
|
|
|
|
alignment: Alignment.center,
|
|
|
|
decoration: BoxDecoration(
|
|
|
|
border: Border.all(color: MyColours.color_bff6f7,width: ScreenUtil().setWidth(2)),
|
|
|
|
borderRadius: BorderRadius.circular(ScreenUtil().setWidth(8))
|
|
|
|
),
|
|
|
|
child: Row(
|
|
|
|
crossAxisAlignment: CrossAxisAlignment.center,
|
|
|
|
children: <Widget>[
|
|
|
|
Image.asset("assets/icon_sellercode.png",width: prefixIconWidth,),
|
|
|
|
HEmptyView(26),
|
|
|
|
Text("商户编号",style: TextStyle(color: MyColours.color_353535,fontSize: ScreenUtil().setSp(28)),),
|
|
|
|
Expanded(
|
|
|
|
child: TextField(
|
|
|
|
controller: _sellerCodeController,
|
|
|
|
focusNode: _sellerCodeFocusNode,
|
|
|
|
autofocus: _sellerCodeController.text.isEmpty,
|
|
|
|
style: TextStyle(color: MyColours.color_353535,fontSize: ScreenUtil().setSp(28),textBaseline: TextBaseline.alphabetic),
|
|
|
|
textAlignVertical: TextAlignVertical.center,
|
|
|
|
decoration: InputDecoration(
|
|
|
|
backgroundColor: MyColours.color_ffffff,
|
|
|
|
body: Container(
|
|
|
|
width: double.infinity,
|
|
|
|
height: double.infinity,
|
|
|
|
child: SingleChildScrollView(
|
|
|
|
controller: _scrollController,
|
|
|
|
child: Column(
|
|
|
|
crossAxisAlignment: CrossAxisAlignment.center,
|
|
|
|
children: <Widget>[
|
|
|
|
VEmptyView(218 - App.statusBarHeight),
|
|
|
|
Image.asset(
|
|
|
|
"assets/logo.png",
|
|
|
|
width: ScreenUtil().setWidth(217),
|
|
|
|
height: ScreenUtil().setWidth(206),
|
|
|
|
),
|
|
|
|
VEmptyView(121),
|
|
|
|
Container(
|
|
|
|
height: ScreenUtil().setHeight(84),
|
|
|
|
width: ScreenUtil().setWidth(611),
|
|
|
|
padding: EdgeInsets.only(left: ScreenUtil().setWidth(20)),
|
|
|
|
alignment: Alignment.center,
|
|
|
|
decoration: BoxDecoration(
|
|
|
|
border: Border.all(
|
|
|
|
color: MyColours.color_bff6f7,
|
|
|
|
width: ScreenUtil().setWidth(2)),
|
|
|
|
borderRadius:
|
|
|
|
BorderRadius.circular(ScreenUtil().setWidth(8))),
|
|
|
|
child: Row(
|
|
|
|
crossAxisAlignment: CrossAxisAlignment.center,
|
|
|
|
children: <Widget>[
|
|
|
|
Image.asset(
|
|
|
|
"assets/icon_sellercode.png",
|
|
|
|
width: prefixIconWidth,
|
|
|
|
),
|
|
|
|
HEmptyView(26),
|
|
|
|
Text(
|
|
|
|
"商户编号",
|
|
|
|
style: TextStyle(
|
|
|
|
color: MyColours.color_353535,
|
|
|
|
fontSize: ScreenUtil().setSp(28)),
|
|
|
|
),
|
|
|
|
Expanded(
|
|
|
|
child: TextField(
|
|
|
|
controller: _sellerCodeController,
|
|
|
|
focusNode: _sellerCodeFocusNode,
|
|
|
|
// autofocus: _sellerCodeController.text.isEmpty,
|
|
|
|
style: TextStyle(
|
|
|
|
color: MyColours.color_353535,
|
|
|
|
fontSize: ScreenUtil().setSp(28),
|
|
|
|
textBaseline: TextBaseline.alphabetic),
|
|
|
|
textAlignVertical: TextAlignVertical.center,
|
|
|
|
decoration: InputDecoration(
|
|
|
|
hintText: "请输入6位商户编码",
|
|
|
|
hintStyle: TextStyle(color: MyColours.color_c1c1c1,fontSize: ScreenUtil().setSp(28),),
|
|
|
|
hintStyle: TextStyle(
|
|
|
|
color: MyColours.color_c1c1c1,
|
|
|
|
fontSize: ScreenUtil().setSp(28),
|
|
|
|
),
|
|
|
|
border: InputBorder.none,
|
|
|
|
contentPadding: EdgeInsets.symmetric(horizontal: 10,vertical: 14),
|
|
|
|
contentPadding: EdgeInsets.symmetric(
|
|
|
|
horizontal: 10, vertical: 14),
|
|
|
|
),
|
|
|
|
onChanged: (_) {
|
|
|
|
setActivate();
|
|
|
|
},
|
|
|
|
keyboardType: TextInputType.number,
|
|
|
|
),
|
|
|
|
onChanged: (_){
|
|
|
|
setActivate();
|
|
|
|
},
|
|
|
|
keyboardType: TextInputType.number,
|
|
|
|
)
|
|
|
|
],
|
|
|
|
)),
|
|
|
|
Container(
|
|
|
|
height: ScreenUtil().setHeight(84),
|
|
|
|
width: ScreenUtil().setWidth(611),
|
|
|
|
padding: EdgeInsets.only(left: ScreenUtil().setWidth(20)),
|
|
|
|
margin: EdgeInsets.only(top: ScreenUtil().setHeight(8)),
|
|
|
|
alignment: Alignment.center,
|
|
|
|
decoration: BoxDecoration(
|
|
|
|
border: Border.all(
|
|
|
|
color: MyColours.color_bff6f7,
|
|
|
|
width: ScreenUtil().setWidth(2)),
|
|
|
|
borderRadius:
|
|
|
|
BorderRadius.circular(ScreenUtil().setWidth(8))),
|
|
|
|
child: Row(
|
|
|
|
crossAxisAlignment: CrossAxisAlignment.center,
|
|
|
|
children: <Widget>[
|
|
|
|
Image.asset(
|
|
|
|
"assets/icon_account.png",
|
|
|
|
width: prefixIconWidth,
|
|
|
|
),
|
|
|
|
)
|
|
|
|
],
|
|
|
|
)
|
|
|
|
),
|
|
|
|
Container(
|
|
|
|
height: ScreenUtil().setHeight(84),
|
|
|
|
width: ScreenUtil().setWidth(611),
|
|
|
|
padding: EdgeInsets.only(left: ScreenUtil().setWidth(20)),
|
|
|
|
margin: EdgeInsets.only(top: ScreenUtil().setHeight(8)),
|
|
|
|
alignment: Alignment.center,
|
|
|
|
decoration: BoxDecoration(
|
|
|
|
border: Border.all(color: MyColours.color_bff6f7,width: ScreenUtil().setWidth(2)),
|
|
|
|
borderRadius: BorderRadius.circular(ScreenUtil().setWidth(8))
|
|
|
|
),
|
|
|
|
child: Row(
|
|
|
|
crossAxisAlignment: CrossAxisAlignment.center,
|
|
|
|
children: <Widget>[
|
|
|
|
Image.asset("assets/icon_account.png",width: prefixIconWidth,),
|
|
|
|
HEmptyView(26),
|
|
|
|
Text("工 号",style: TextStyle(color: MyColours.color_353535,fontSize: ScreenUtil().setSp(28)),),
|
|
|
|
Expanded(
|
|
|
|
child: TextField(
|
|
|
|
controller: _accountController,
|
|
|
|
focusNode: _accountFocusNode,
|
|
|
|
style: TextStyle(color: MyColours.color_353535,fontSize: ScreenUtil().setSp(28)),
|
|
|
|
decoration: InputDecoration(
|
|
|
|
HEmptyView(26),
|
|
|
|
Text(
|
|
|
|
"工 号",
|
|
|
|
style: TextStyle(
|
|
|
|
color: MyColours.color_353535,
|
|
|
|
fontSize: ScreenUtil().setSp(28)),
|
|
|
|
),
|
|
|
|
Expanded(
|
|
|
|
child: TextField(
|
|
|
|
controller: _accountController,
|
|
|
|
focusNode: _accountFocusNode,
|
|
|
|
style: TextStyle(
|
|
|
|
color: MyColours.color_353535,
|
|
|
|
fontSize: ScreenUtil().setSp(28)),
|
|
|
|
decoration: InputDecoration(
|
|
|
|
hintText: "请输入4位工号",
|
|
|
|
hintStyle: TextStyle(color: MyColours.color_c1c1c1,fontSize: ScreenUtil().setSp(28)),
|
|
|
|
hintStyle: TextStyle(
|
|
|
|
color: MyColours.color_c1c1c1,
|
|
|
|
fontSize: ScreenUtil().setSp(28)),
|
|
|
|
border: InputBorder.none,
|
|
|
|
contentPadding: EdgeInsets.symmetric(horizontal: 10,vertical: 14),
|
|
|
|
contentPadding: EdgeInsets.symmetric(
|
|
|
|
horizontal: 10, vertical: 14),
|
|
|
|
),
|
|
|
|
onChanged: (_) {
|
|
|
|
setActivate();
|
|
|
|
},
|
|
|
|
keyboardType: TextInputType.number,
|
|
|
|
),
|
|
|
|
onChanged: (_){
|
|
|
|
setActivate();
|
|
|
|
},
|
|
|
|
keyboardType: TextInputType.number,
|
|
|
|
)
|
|
|
|
],
|
|
|
|
)),
|
|
|
|
Container(
|
|
|
|
height: ScreenUtil().setHeight(84),
|
|
|
|
width: ScreenUtil().setWidth(611),
|
|
|
|
padding: EdgeInsets.only(
|
|
|
|
left: ScreenUtil().setWidth(20),
|
|
|
|
right: ScreenUtil().setWidth(27)),
|
|
|
|
margin: EdgeInsets.only(top: ScreenUtil().setHeight(8)),
|
|
|
|
alignment: Alignment.center,
|
|
|
|
decoration: BoxDecoration(
|
|
|
|
border: Border.all(
|
|
|
|
color: MyColours.color_bff6f7,
|
|
|
|
width: ScreenUtil().setWidth(2)),
|
|
|
|
borderRadius:
|
|
|
|
BorderRadius.circular(ScreenUtil().setWidth(8))),
|
|
|
|
child: Row(
|
|
|
|
crossAxisAlignment: CrossAxisAlignment.center,
|
|
|
|
children: <Widget>[
|
|
|
|
Image.asset(
|
|
|
|
"assets/icon_pwd.png",
|
|
|
|
width: prefixIconWidth,
|
|
|
|
),
|
|
|
|
)
|
|
|
|
],
|
|
|
|
)
|
|
|
|
),
|
|
|
|
Container(
|
|
|
|
height: ScreenUtil().setHeight(84),
|
|
|
|
width: ScreenUtil().setWidth(611),
|
|
|
|
padding: EdgeInsets.only(left: ScreenUtil().setWidth(20),right: ScreenUtil().setWidth(27)),
|
|
|
|
margin: EdgeInsets.only(top: ScreenUtil().setHeight(8)),
|
|
|
|
alignment: Alignment.center,
|
|
|
|
decoration: BoxDecoration(
|
|
|
|
border: Border.all(color: MyColours.color_bff6f7,width: ScreenUtil().setWidth(2)),
|
|
|
|
borderRadius: BorderRadius.circular(ScreenUtil().setWidth(8))
|
|
|
|
),
|
|
|
|
child: Row(
|
|
|
|
crossAxisAlignment: CrossAxisAlignment.center,
|
|
|
|
children: <Widget>[
|
|
|
|
Image.asset("assets/icon_pwd.png",width: prefixIconWidth,),
|
|
|
|
HEmptyView(26),
|
|
|
|
Text("密 码",style: TextStyle(color: MyColours.color_353535,fontSize: ScreenUtil().setSp(28)),),
|
|
|
|
Expanded(
|
|
|
|
child: TextField(
|
|
|
|
controller: _pwdController,
|
|
|
|
focusNode: _pwdFocusNode,
|
|
|
|
autofocus: _sellerCodeController.text.isNotEmpty&&_accountController.text.isNotEmpty&&_pwdController.text.isEmpty,
|
|
|
|
style: TextStyle(color: MyColours.color_353535,fontSize: ScreenUtil().setSp(28)),
|
|
|
|
decoration: InputDecoration(
|
|
|
|
HEmptyView(26),
|
|
|
|
Text(
|
|
|
|
"密 码",
|
|
|
|
style: TextStyle(
|
|
|
|
color: MyColours.color_353535,
|
|
|
|
fontSize: ScreenUtil().setSp(28)),
|
|
|
|
),
|
|
|
|
Expanded(
|
|
|
|
child: TextField(
|
|
|
|
controller: _pwdController,
|
|
|
|
focusNode: _pwdFocusNode,
|
|
|
|
// autofocus: _sellerCodeController.text.isNotEmpty &&
|
|
|
|
// _accountController.text.isNotEmpty &&
|
|
|
|
// _pwdController.text.isEmpty,
|
|
|
|
style: TextStyle(
|
|
|
|
color: MyColours.color_353535,
|
|
|
|
fontSize: ScreenUtil().setSp(28)),
|
|
|
|
decoration: InputDecoration(
|
|
|
|
hintText: "请输入密码",
|
|
|
|
hintStyle: TextStyle(color: MyColours.color_c1c1c1,fontSize: ScreenUtil().setSp(28)),
|
|
|
|
hintStyle: TextStyle(
|
|
|
|
color: MyColours.color_c1c1c1,
|
|
|
|
fontSize: ScreenUtil().setSp(28)),
|
|
|
|
border: InputBorder.none,
|
|
|
|
contentPadding: EdgeInsets.symmetric(horizontal: 10,vertical: 14),
|
|
|
|
contentPadding: EdgeInsets.symmetric(
|
|
|
|
horizontal: 10, vertical: 14),
|
|
|
|
),
|
|
|
|
onChanged: (_) {
|
|
|
|
setActivate();
|
|
|
|
},
|
|
|
|
obscureText: obscureText,
|
|
|
|
keyboardType: TextInputType.text,
|
|
|
|
),
|
|
|
|
onChanged: (_){
|
|
|
|
setActivate();
|
|
|
|
),
|
|
|
|
GestureDetector(
|
|
|
|
child: Padding(
|
|
|
|
padding: EdgeInsets.all(ScreenUtil().setWidth(10)),
|
|
|
|
child: Image.asset(
|
|
|
|
obscureText
|
|
|
|
? "assets/icon_pwd_show.png"
|
|
|
|
: "assets/icon_pwd_hide.png",
|
|
|
|
width: ScreenUtil().setWidth(35),
|
|
|
|
height: ScreenUtil().setHeight(24),
|
|
|
|
),
|
|
|
|
),
|
|
|
|
onTap: () {
|
|
|
|
setState(() {
|
|
|
|
obscureText = !obscureText;
|
|
|
|
});
|
|
|
|
},
|
|
|
|
obscureText: obscureText,
|
|
|
|
keyboardType: TextInputType.text,
|
|
|
|
)
|
|
|
|
],
|
|
|
|
)),
|
|
|
|
Container(
|
|
|
|
width: ScreenUtil().setWidth(611),
|
|
|
|
margin: EdgeInsets.only(top: ScreenUtil().setHeight(16)),
|
|
|
|
alignment: Alignment.centerLeft,
|
|
|
|
child: Text(
|
|
|
|
errorText,
|
|
|
|
style: TextStyle(
|
|
|
|
color: MyColours.color_d93535,
|
|
|
|
fontSize: ScreenUtil().setSp(16)),
|
|
|
|
),
|
|
|
|
),
|
|
|
|
Consumer<UserModel>(
|
|
|
|
builder:
|
|
|
|
(BuildContext context, UserModel value, Widget child) {
|
|
|
|
return GestureDetector(
|
|
|
|
onTap: () {
|
|
|
|
if (!isActivate) return;
|
|
|
|
if (App.sp.containsKey('unionid')) {
|
|
|
|
//微信登陆的时候,退出清空数据
|
|
|
|
App.sp.remove('openid');
|
|
|
|
App.sp.remove("unionid");
|
|
|
|
}
|
|
|
|
Map<String, String> params = {
|
|
|
|
"seller_code": "${_sellerCodeController.text}",
|
|
|
|
"alias": "ssahdahgdafgahjkhakjgh",
|
|
|
|
"account": "${_accountController.text}",
|
|
|
|
"password": "${_pwdController.text}"
|
|
|
|
};
|
|
|
|
value.login(context, params).then((value) {
|
|
|
|
setState(() {
|
|
|
|
errorText = value ?? "";
|
|
|
|
});
|
|
|
|
});
|
|
|
|
},
|
|
|
|
child: Container(
|
|
|
|
height: ScreenUtil().setHeight(80),
|
|
|
|
width: ScreenUtil().setWidth(611),
|
|
|
|
margin:
|
|
|
|
EdgeInsets.only(top: ScreenUtil().setHeight(56)),
|
|
|
|
alignment: Alignment.center,
|
|
|
|
decoration: BoxDecoration(
|
|
|
|
color: isActivate
|
|
|
|
? MyColours.color_2bb5b7
|
|
|
|
: MyColours.color_2bb5b7,
|
|
|
|
boxShadow: [
|
|
|
|
BoxShadow(
|
|
|
|
color: MyColours.color_26000000,
|
|
|
|
offset: Offset(0, ScreenUtil().setWidth(4)),
|
|
|
|
)
|
|
|
|
],
|
|
|
|
borderRadius: BorderRadius.all(
|
|
|
|
Radius.circular(ScreenUtil().setWidth(8)))),
|
|
|
|
child: Text(
|
|
|
|
"登录",
|
|
|
|
style: TextStyle(
|
|
|
|
color: MyColours.color_ffffff,
|
|
|
|
fontSize: ScreenUtil().setSp(34)),
|
|
|
|
),
|
|
|
|
),
|
|
|
|
GestureDetector(
|
|
|
|
child: Padding(padding: EdgeInsets.all(ScreenUtil().setWidth(10)),child: Image.asset(obscureText?"assets/icon_pwd_show.png":"assets/icon_pwd_hide.png",width: ScreenUtil().setWidth(35),height: ScreenUtil().setHeight(24),),),
|
|
|
|
onTap: (){
|
|
|
|
);
|
|
|
|
},
|
|
|
|
),
|
|
|
|
VEmptyView(140),
|
|
|
|
Row(
|
|
|
|
mainAxisAlignment: MainAxisAlignment.center,
|
|
|
|
children: <Widget>[
|
|
|
|
Offstage(
|
|
|
|
offstage: !App.isInstallWx,
|
|
|
|
child: InkWell(
|
|
|
|
child: Image.asset(
|
|
|
|
Utils.getImgPath('icon_wechat_login'),
|
|
|
|
width: ScreenUtil().setWidth(56)),
|
|
|
|
onTap: () {
|
|
|
|
if (!_check) {
|
|
|
|
Utils.showToast('请仔细阅读协议');
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
_wxLogin();
|
|
|
|
},
|
|
|
|
)),
|
|
|
|
Platform.isAndroid
|
|
|
|
? Text('')
|
|
|
|
: InkWell(
|
|
|
|
child: Container(
|
|
|
|
margin: EdgeInsets.only(
|
|
|
|
left: Platform.isAndroid
|
|
|
|
? ScreenUtil().setWidth(0)
|
|
|
|
: ScreenUtil().setWidth(50)),
|
|
|
|
child: Image.asset(Utils.getImgPath('apple'),
|
|
|
|
width: ScreenUtil().setWidth(46))),
|
|
|
|
onTap: () {
|
|
|
|
if (!_check) {
|
|
|
|
Utils.showToast('请仔细阅读协议');
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
_iosLogin();
|
|
|
|
}),
|
|
|
|
],
|
|
|
|
),
|
|
|
|
VEmptyView(20),
|
|
|
|
Row(
|
|
|
|
// mainAxisSize: MainAxisSize.min,
|
|
|
|
crossAxisAlignment: CrossAxisAlignment.center,
|
|
|
|
children: <Widget>[
|
|
|
|
InkWell(
|
|
|
|
onTap: () {
|
|
|
|
setState(() {
|
|
|
|
obscureText=!obscureText;
|
|
|
|
_check = !_check;
|
|
|
|
});
|
|
|
|
},
|
|
|
|
)
|
|
|
|
],
|
|
|
|
)
|
|
|
|
),
|
|
|
|
Container(
|
|
|
|
width: ScreenUtil().setWidth(611),
|
|
|
|
margin: EdgeInsets.only(top: ScreenUtil().setHeight(16)),
|
|
|
|
alignment: Alignment.centerLeft,
|
|
|
|
child: Text(errorText,style: TextStyle(color: MyColours.color_d93535,fontSize: ScreenUtil().setSp(16)),),
|
|
|
|
),
|
|
|
|
Consumer<UserModel>(
|
|
|
|
builder: (BuildContext context,UserModel value,Widget child){
|
|
|
|
return GestureDetector(
|
|
|
|
onTap: (){
|
|
|
|
if(!isActivate)return;
|
|
|
|
Map<String,String> params={
|
|
|
|
"seller_code":"${_sellerCodeController.text}",
|
|
|
|
"alias":"ssahdahgdafgahjkhakjgh",
|
|
|
|
"account":"${_accountController.text}",
|
|
|
|
"password":"${_pwdController.text}"
|
|
|
|
};
|
|
|
|
value.login(context, params).then((value){
|
|
|
|
setState(() {
|
|
|
|
errorText=value??"";
|
|
|
|
});
|
|
|
|
});
|
|
|
|
},
|
|
|
|
child: Container(
|
|
|
|
height: ScreenUtil().setHeight(80),
|
|
|
|
width: ScreenUtil().setWidth(611),
|
|
|
|
margin: EdgeInsets.only(top: ScreenUtil().setHeight(56)),
|
|
|
|
alignment: Alignment.center,
|
|
|
|
decoration: BoxDecoration(
|
|
|
|
color: isActivate?MyColours.color_2bb5b7:MyColours.color_2bb5b7,
|
|
|
|
boxShadow: [
|
|
|
|
BoxShadow(color: MyColours.color_26000000,offset: Offset(0,ScreenUtil().setWidth(4)),)
|
|
|
|
],
|
|
|
|
borderRadius: BorderRadius.all(Radius.circular(ScreenUtil().setWidth(8)))
|
|
|
|
),
|
|
|
|
child: Text("登录",style: TextStyle(color: MyColours.color_ffffff,fontSize: ScreenUtil().setSp(34)),),
|
|
|
|
child: Container(
|
|
|
|
// color: Colors.red,
|
|
|
|
// height: ScreenUtil().setWidth(34),
|
|
|
|
padding: EdgeInsets.only(
|
|
|
|
left: ScreenUtil().setWidth(102),
|
|
|
|
top: ScreenUtil().setWidth(10),
|
|
|
|
bottom: ScreenUtil().setWidth(10)),
|
|
|
|
child: Center(
|
|
|
|
child: Image.asset(
|
|
|
|
_check
|
|
|
|
? "assets/mine_radio_sel.png"
|
|
|
|
: "assets/mine_radio_nor.png",
|
|
|
|
width: ScreenUtil().setWidth(42),
|
|
|
|
height: ScreenUtil().setWidth(42)),
|
|
|
|
))),
|
|
|
|
HEmptyView(6),
|
|
|
|
Text(
|
|
|
|
'已阅读并同意',
|
|
|
|
style: TextStyle(
|
|
|
|
fontSize: ScreenUtil().setSp(24),
|
|
|
|
color: MyColours.color_353535),
|
|
|
|
),
|
|
|
|
);
|
|
|
|
},
|
|
|
|
),
|
|
|
|
VEmptyView(20),
|
|
|
|
Row(
|
|
|
|
// mainAxisSize: MainAxisSize.min,
|
|
|
|
crossAxisAlignment: CrossAxisAlignment.center,
|
|
|
|
children: <Widget>[
|
|
|
|
InkWell(
|
|
|
|
InkWell(
|
|
|
|
onTap: () {
|
|
|
|
setState(() {
|
|
|
|
_check = !_check;
|
|
|
|
});
|
|
|
|
NavigatorUtil.goWebPage(context, '软件服务协议', "xy");
|
|
|
|
},
|
|
|
|
child: Container(
|
|
|
|
// color: Colors.red,
|
|
|
|
// height: ScreenUtil().setWidth(34),
|
|
|
|
padding: EdgeInsets.only(
|
|
|
|
left: ScreenUtil().setWidth(102),
|
|
|
|
top: ScreenUtil().setWidth(10),
|
|
|
|
bottom: ScreenUtil().setWidth(10)),
|
|
|
|
child: Center(
|
|
|
|
child: Image.asset(
|
|
|
|
_check
|
|
|
|
? "assets/mine_radio_sel.png"
|
|
|
|
: "assets/mine_radio_nor.png",
|
|
|
|
width: ScreenUtil().setWidth(42),
|
|
|
|
height: ScreenUtil().setWidth(42)),
|
|
|
|
))),
|
|
|
|
HEmptyView(6),
|
|
|
|
Text(
|
|
|
|
'已阅读并同意',
|
|
|
|
style: TextStyle(
|
|
|
|
fontSize: ScreenUtil().setSp(24),
|
|
|
|
color: MyColours.color_353535),
|
|
|
|
),
|
|
|
|
InkWell(
|
|
|
|
onTap: () {
|
|
|
|
NavigatorUtil.goWebPage(context, '软件服务协议', "xy");
|
|
|
|
},
|
|
|
|
child: Text(
|
|
|
|
'《软件服务协议》',
|
|
|
|
style: TextStyle(
|
|
|
|
fontSize: ScreenUtil().setSp(24),
|
|
|
|
color: MyColours.color_2bb5b7),
|
|
|
|
child: Text(
|
|
|
|
'《软件服务协议》',
|
|
|
|
style: TextStyle(
|
|
|
|
fontSize: ScreenUtil().setSp(24),
|
|
|
|
color: MyColours.color_2bb5b7),
|
|
|
|
),
|
|
|
|
),
|
|
|
|
),
|
|
|
|
Text('及',
|
|
|
|
style: TextStyle(
|
|
|
|
fontSize: ScreenUtil().setSp(24),
|
|
|
|
color: MyColours.color_353535)),
|
|
|
|
InkWell(
|
|
|
|
onTap: () {
|
|
|
|
NavigatorUtil.goWebPage(context, '隐私政策', "zc");
|
|
|
|
},
|
|
|
|
child: Text('《隐私政策》',
|
|
|
|
Text('及',
|
|
|
|
style: TextStyle(
|
|
|
|
fontSize: ScreenUtil().setSp(24),
|
|
|
|
color: MyColours.color_2bb5b7)),
|
|
|
|
)
|
|
|
|
],
|
|
|
|
),
|
|
|
|
],
|
|
|
|
color: MyColours.color_353535)),
|
|
|
|
InkWell(
|
|
|
|
onTap: () {
|
|
|
|
NavigatorUtil.goWebPage(context, '隐私政策', "zc");
|
|
|
|
},
|
|
|
|
child: Text('《隐私政策》',
|
|
|
|
style: TextStyle(
|
|
|
|
fontSize: ScreenUtil().setSp(24),
|
|
|
|
color: MyColours.color_2bb5b7)),
|
|
|
|
)
|
|
|
|
],
|
|
|
|
),
|
|
|
|
],
|
|
|
|
),
|
|
|
|
),
|
|
|
|
),
|
|
|
|
)
|
|
|
|
);
|
|
|
|
));
|
|
|
|
}
|
|
|
|
} |
|
|
|
|
...
|
...
|
|