import 'package:deus_app/common/local/local_storage.dart'; import 'package:deus_app/common/style/gsy_style.dart'; import 'package:deus_app/common/utils/CommonUtils.dart'; import 'package:deus_app/common/utils/DioUtil.dart'; import 'package:deus_app/common/utils/ToastUtils.dart'; import 'package:deus_app/model/login_response_entity.dart'; import 'package:deus_app/page/home/home_page.dart'; import 'package:deus_app/widget/gsy_flex_button.dart'; import 'package:flutter/material.dart'; import '../../common/utils/ConstantString.dart'; import '../../generated/json/login_response_entity_helper.dart'; // import 'package:deus_app/common/utils/common_utils.dart'; // import 'package:deus_app/widget/animated_background.dart'; // import 'package:deus_app/widget/gsy_flex_button.dart'; // import 'package:deus_app/widget/gsy_input_widget.dart'; // import 'package:deus_app/widget/particle/particle_widget.dart'; /// 登录页 /// Created by Ocean class LoginPage extends StatefulWidget { static const String sName = "login"; const LoginPage({super.key}); @override State createState() { return _LoginPageState(); } } class _LoginPageState extends State { //TextEditingController可以使用 text 属性指定初始值 final TextEditingController _usernameController = TextEditingController(); final TextEditingController _passwordController = TextEditingController(); String _username = '17327890361', _password = '123456'; @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( centerTitle: true, title: const Text(ConstantString.loginText,style: TextStyle(fontSize: 17)), ), body: Center( child: Column( crossAxisAlignment: CrossAxisAlignment.center, mainAxisAlignment: MainAxisAlignment.center, children: [ // _getRoundImage('images/logo.png', 100.0), // SizedBox( // height: 60, // ), _getUsernameInput(), _getPasswordInput(), SizedBox( height: 10, ), _getLoginButton(), ], ), ), ); } Widget _getUsernameInput() { return _getInputTextField( TextInputType.number, controller: _usernameController, decoration: InputDecoration( hintText: "输入手机号", icon: Icon( Icons.mobile_friendly_rounded, size: 20.0, ), border: InputBorder.none, //使用 GestureDetector 实现手势识别 suffixIcon: GestureDetector( child: Offstage( child: Icon(Icons.clear), offstage: _username == '', ), //点击清除文本框内容 onTap: () { this.setState(() { _username = ''; _usernameController.clear(); }); }, ), ), //使用 onChanged 完成双向绑定 onChanged: (value) { this.setState(() { _username = value; }); }, ); } Widget _getPasswordInput() { return _getInputTextField( TextInputType.text, obscureText: true, controller: _passwordController, decoration: InputDecoration( hintText: "输入密码", icon: Icon( Icons.lock_open, size: 20.0, ), suffixIcon: GestureDetector( child: Offstage( child: Icon(Icons.clear), offstage: _password == '', ), onTap: () { this.setState(() { _password = ''; _passwordController.clear(); }); }, ), border: InputBorder.none, ), onChanged: (value) { this.setState(() { _password = value; }); }, ); } //省略了上述列举的代码 Widget _getInputTextField( TextInputType keyboardType, { FocusNode? focusNode, controller: TextEditingController, onChanged: Function, InputDecoration? decoration, bool obscureText = false, height = 50.0, }) { return Container( height: height, margin: EdgeInsets.all(10.0), child: Column( children: [ TextField( keyboardType: keyboardType, focusNode: focusNode, obscureText: obscureText, controller: controller, decoration: decoration, onChanged: onChanged, ), Divider( height: 1.0, color: Colors.grey[400], ), ], ), ); } Widget _getLoginButton() { return Container( height: 50, width: double.infinity, margin: EdgeInsets.all(10), decoration: BoxDecoration( borderRadius: BorderRadius.circular(4.0), ), child: GSYFlexButton( text: ConstantString.loginText, textColor: GSYColors.textWhite, fontSize: 16, onPress: login, ), ); } login() async { if (!CommonUtils.validationInput(_username)) { showToast(ConstantString.loginNull); } else { var result = await DioUtil().request('auth/login', method: DioMethod.post, data: {'username': _username, 'password': _password}); LoginResponseEntity loginResponseEntity = loginResponseEntityFromJson(LoginResponseEntity(), result); if (0 == loginResponseEntity.code) { LocalStorage.save(ConstantString.token, loginResponseEntity.data.token); LocalStorage.save(ConstantString.name, loginResponseEntity.data.user.username); LocalStorage.save(ConstantString.userId, loginResponseEntity.data.user.userId); await Navigator.push(context, MaterialPageRoute(builder: (context) => const HomePage() )); Navigator.pop(context); } else { showToast(loginResponseEntity.msg); } } } }