login_page.dart 11.9 KB
import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:one_key/app.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/widgets/h_empty_view.dart';
import 'package:one_key/widgets/v_empty_view.dart';
import 'package:provider/provider.dart';

class LoginPage extends StatefulWidget {
  @override
  State<StatefulWidget> createState() {
    // TODO: implement createState
    return new LoginState();
  }
}

class LoginState extends State<LoginPage> with WidgetsBindingObserver{

  TextEditingController _sellerCodeController=TextEditingController();
  TextEditingController _accountController = TextEditingController();
  final TextEditingController _pwdController = TextEditingController();
  final ScrollController _scrollController=new ScrollController();

  final FocusNode _sellerCodeFocusNode=new FocusNode();
  final FocusNode _accountFocusNode=new FocusNode();
  final FocusNode _pwdFocusNode=new FocusNode();

  bool obscureText=true;//是否隐藏密码
  bool isActivate=false;//是否激活登录

  String errorText="";//错误提示

  @override
  void initState(){
    // TODO: implement initState
    WidgetsBinding.instance.addObserver(this);
    super.initState();
    isLogin();
  }

  handlePostFrame(_){
    _scrollController.jumpTo(_scrollController.position.maxScrollExtent);
  }


  @override
  void didChangeMetrics() {
    // TODO: implement didChangeMetrics
    WidgetsBinding.instance.addPostFrameCallback(handlePostFrame);
    super.didChangeDependencies();
  }

  @override
  void dispose() {
    // TODO: implement dispose
    WidgetsBinding.instance.removeObserver(this);
    super.dispose();
  }

  //监听输入框,设置登录按钮状态
  setActivate(){
    if(_sellerCodeController.text.isNotEmpty&&_accountController.text.isNotEmpty&&_pwdController.text.isNotEmpty){
      setState(() {
        errorText="";
        isActivate=true;
      });
    }else{
      setState(() {
        errorText="";
        isActivate=false;
      });
    }
  }

  //判断是否登录
  void isLogin()async{
    await App.initSp();
    UserModel userModel=Provider.of<UserModel>(context,listen: false);
    userModel.initUser();
    if(App.sp.getBool("isLogin")??false){
      NavigatorUtil.goHomePage(context);
    }
  }

  @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;

    final UserModel userModel=Provider.of<UserModel>(context);
    if(userModel!=null&&userModel.user!=null){
//      _sellerCodeController.text=userModel.user.sellercode;
      _accountController.text=userModel.user.account;
      
      _sellerCodeController=TextEditingController.fromValue(TextEditingValue(text:userModel.user.sellercode,selection: TextSelection.fromPosition(TextPosition(affinity: TextAffinity.downstream,offset: userModel.user.sellercode.length))));
    }

    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(26)),),
                      Expanded(
                        child: TextField(
                          controller: _sellerCodeController,
                          focusNode: _sellerCodeFocusNode,
                          autofocus: _sellerCodeController.text.isEmpty,
                          decoration: InputDecoration(
                              hintText: "请输入6位商户编码",
                              hintStyle: TextStyle(color: MyColours.color_c1c1c1,fontSize: ScreenUtil().setSp(26)),
                              border: InputBorder.none,
                              contentPadding: EdgeInsets.all(10)
                          ),
                          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,),
                      HEmptyView(26),
                      Text("工        号",style: TextStyle(color: MyColours.color_353535,fontSize: ScreenUtil().setSp(26)),),
                      Expanded(
                        child: TextField(
                          controller: _accountController,
                          focusNode: _accountFocusNode,
                          decoration: InputDecoration(
                              hintText: "请输入4位工号",
                              hintStyle: TextStyle(color: MyColours.color_c1c1c1,fontSize: ScreenUtil().setSp(26)),
                              border: InputBorder.none,
                              contentPadding: EdgeInsets.all(10)
                          ),
                          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,),
                      HEmptyView(26),
                      Text("密        码",style: TextStyle(color: MyColours.color_353535,fontSize: ScreenUtil().setSp(26)),),
                      Expanded(
                        child: TextField(
                          controller: _pwdController,
                          focusNode: _pwdFocusNode,
                          autofocus: _sellerCodeController.text.isNotEmpty&&_accountController.text.isNotEmpty&&_pwdController.text.isEmpty,
                          decoration: InputDecoration(
                              hintText: "请输入密码",
                              hintStyle: TextStyle(color: MyColours.color_c1c1c1,fontSize: ScreenUtil().setSp(26)),
                              border: InputBorder.none,
                              contentPadding: EdgeInsets.all(10)
                          ),
                          onChanged: (_){
                            setActivate();
                          },
                          obscureText: obscureText,
                          keyboardType: TextInputType.text,
                        ),
                      ),
                      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;
                          });
                        },
                      )
                    ],
                  )
              ),
              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(84),
                      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(30)),),
                    ),
                  );
                },
              )
            ],
          ),
        ),
      )
    );
  }
}