import 'package:chat/data/WebData.dart'; import 'package:chat/data/constants.dart'; import 'package:chat/generated/i18n.dart'; import 'package:chat/home/Registerpage.dart'; import 'package:chat/utils/CustomUI.dart'; import 'package:chat/utils/screen.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:oktoast/oktoast.dart'; import '../utils/OtherLogin.dart'; import '../utils/HttpUtil.dart'; import "../data/UserData.dart"; const RATE_NUM = 0.82; //const BlueColor = const Color(0xFF93C3FF); const BlueColor = Constants.BlueTextColor; class LoginPage extends StatefulWidget { LoginPage({Key key, bool flag}) : super(key: key); _LoginPageState createState() => _LoginPageState(); } class _LoginPageState extends State { String _phoneNumber = ''; String _passWorld = ''; String _selectType = UserData().language == LanguageType.Vietnamese ? phone.keys.toList()[1] : phone.keys.toList()[0]; @override Widget build(BuildContext context) { var keyHeight = MediaQuery.of(context).viewInsets.bottom; if (keyHeight > 0) { UserData().setKeyboardHeight(keyHeight); } Widget appBar = AppBar( backgroundColor: AppColors.NewAppbarBgColor, title: Text( I18n.of(context).login, textScaleFactor: 1.0, style: TextStyle(color: AppColors.NewAppbarTextColor), ), leading: CustomUI.buildCustomLeading(context), centerTitle: true, ); return Scaffold( body: SafeArea( child: Center( child: Container( height: MediaQuery.of(context).size.height, width: MediaQuery.of(context).size.width, child: _buildBody(), ), )), appBar: appBar, resizeToAvoidBottomPadding: false, ); } @override void initState() { super.initState(); print('LoginPage initState'); } @override void dispose() { super.dispose(); } Widget _buildBody() { return new Column( children: [ _buildAcountInput(), _buildPasswordInput(), _buildForgetPassWord(), SizedBox( height: 40, ), _buildLoginButton(), _buildOtherLogin(), ], ); } //构建底部第三方登陆 Widget _buildOtherLogin() { return new Expanded( child: Column( mainAxisAlignment: MainAxisAlignment.end, children: [ new Container( alignment: Alignment.bottomCenter, child: OtherLogin().builder(context), ) ], ), ); } //账号输入框 Widget _buildAcountInput() { double height = 54.5; return new Container( alignment: Alignment.center, margin: EdgeInsets.only(top: 8.5), height: height, padding: EdgeInsets.only(left: 17), decoration: BoxDecoration( color: Colors.white, border: Border( top: Constants.GreyBorderSide, bottom: Constants.GreyBorderSide)), child: Stack( children: [ Container( width: Screen.width, height: height, alignment: Alignment.centerLeft, child: Icon( Icons.phone_android, color: BlueColor, size: Constants.TextFieldIconSize, ), ), Positioned( left: 46, child: Container( padding: EdgeInsets.only(top: 5), margin: EdgeInsets.all(0), alignment: Alignment.centerLeft, child: new DropdownButtonHideUnderline( child: new DropdownButton( items: phone.keys.map((key) { return DropdownMenuItem( child: new Text(key, textScaleFactor: 1.0), value: key, ); }).toList(), onChanged: (value) { setState(() { _selectType = value; }); }, value: _selectType, elevation: 24, //设置阴影的高度 style: new TextStyle( //设置文本框里面文字的样式 color: Constants.BlackTextColor, fontSize: 12, ), iconSize: 25.0, )), ), ), Positioned( left: 90, child: Container( alignment: Alignment.center, width: Screen.width - 90, height: height, child: TextField( keyboardAppearance: Brightness.light, decoration: new InputDecoration( hintText: I18n.of(context).enter_number, hintStyle: TextStyle(fontSize: 14), border: InputBorder.none, ), maxLines: 1, style: TextStyle(textBaseline: TextBaseline.alphabetic), inputFormatters: [ WhitelistingTextInputFormatter.digitsOnly, ], onChanged: (str) { _phoneNumber = str; //_phoneNumber = str; setState(() {}); }, keyboardType: TextInputType.phone, ), ), ) ], )); } //构建密码按钮 Widget _buildPasswordInput() { return new Container( alignment: Alignment.center, child: new TextField( keyboardAppearance: Brightness.light, decoration: new InputDecoration( hintText: I18n.of(context).enter_password, hintStyle: TextStyle(fontSize: 14), icon: new Icon( Icons.lock, color: BlueColor, size: Constants.TextFieldIconSize, ), border: InputBorder.none, ), style: TextStyle(textBaseline: TextBaseline.alphabetic), maxLines: 1, obscureText: true, onChanged: (str) { _passWorld = str; setState(() {}); }, ), height: 54.5, padding: EdgeInsets.only(left: 17), decoration: BoxDecoration( color: Colors.white, border: Border(bottom: Constants.GreyBorderSide)), ); } //构建忘记密码 Widget _buildForgetPassWord() { return new Container( child: new Align( alignment: FractionalOffset.centerRight, child: new FlatButton( child: new Text( I18n.of(context).forget_password, textScaleFactor: 1.0, style: TextStyle(color: BlueColor), ), onPressed: () { Navigator.of(context).push( new MaterialPageRoute( builder: (context) { return RegisterPage( type: PageType.changePWD.index, ); }, ), ); }, ), ), ); } //构建登陆按钮 Widget _buildLoginButton() { Text text = new Text(I18n.of(context).login, textScaleFactor: 1.0, style: TextStyle( fontSize: Constants.ShaderButtonFontSize, color: Colors.white)); callback() async { if (_phoneNumber == null || _phoneNumber == "") { showToast(I18n.of(context).enter_number); return; } if (_passWorld == null || _passWorld == "") { showToast(I18n.of(context).enter_password); return; } HttpUtil().login(phone[_selectType] + _phoneNumber, _passWorld, context); } return InkWell( onTap: callback, child: Container( // margin: EdgeInsets.only(top: 40), alignment: Alignment.center, height: Constants.ShaderButtonHeight, width: Screen.width * RATE_NUM, decoration: BoxDecoration( color: Constants.ConfrimButtonColor, border: Border.all(color: const Color(0x803875E9)), borderRadius: BorderRadius.all(Radius.circular(Constants.BigButtonRadius))), child: text, ), ); } }