login_page.dart 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226
  1. import 'package:deus_app/common/local/StoreHelper.dart';
  2. import 'package:deus_app/common/style/gsy_style.dart';
  3. import 'package:deus_app/common/utils/CommonUtils.dart';
  4. import 'package:deus_app/common/utils/DioUtil.dart';
  5. import 'package:deus_app/common/utils/ToastUtils.dart';
  6. import 'package:deus_app/generated/json/user_response_entity_helper.dart';
  7. import 'package:deus_app/model/login_response_entity.dart';
  8. import 'package:deus_app/model/user_response_entity.dart';
  9. import 'package:deus_app/page/home/home_page.dart';
  10. import 'package:deus_app/widget/gsy_flex_button.dart';
  11. import 'package:flutter/material.dart';
  12. import '../../common/utils/ConstantString.dart';
  13. import '../../common/utils/LoadingDialogHelper.dart';
  14. import '../../generated/json/login_response_entity_helper.dart';
  15. // import 'package:deus_app/common/utils/common_utils.dart';
  16. // import 'package:deus_app/widget/animated_background.dart';
  17. // import 'package:deus_app/widget/gsy_flex_button.dart';
  18. // import 'package:deus_app/widget/gsy_input_widget.dart';
  19. // import 'package:deus_app/widget/particle/particle_widget.dart';
  20. /// 登录页
  21. /// Created by Ocean
  22. class LoginPage extends StatefulWidget {
  23. static const String sName = "login";
  24. const LoginPage({super.key});
  25. @override
  26. State createState() {
  27. return _LoginPageState();
  28. }
  29. }
  30. class _LoginPageState extends State<LoginPage> {
  31. //TextEditingController可以使用 text 属性指定初始值
  32. final TextEditingController _usernameController = TextEditingController();
  33. final TextEditingController _passwordController = TextEditingController();
  34. String _username = '18179442077', _password = '123456';
  35. @override
  36. Widget build(BuildContext context) {
  37. StoreHelper.init();
  38. return Scaffold(
  39. appBar: AppBar(
  40. centerTitle: true,
  41. backgroundColor: Color(0xFF4875EC),
  42. title: const Text(ConstantString.loginText,style: TextStyle(fontSize: 16)),
  43. ),
  44. body: Center(
  45. child: Column(
  46. crossAxisAlignment: CrossAxisAlignment.center,
  47. mainAxisAlignment: MainAxisAlignment.center,
  48. children: <Widget>[
  49. // _getRoundImage('images/logo.png', 100.0),
  50. // SizedBox(
  51. // height: 60,
  52. // ),
  53. _getUsernameInput(),
  54. _getPasswordInput(),
  55. SizedBox(
  56. height: 10,
  57. ),
  58. _getLoginButton(),
  59. ],
  60. ),
  61. ),
  62. );
  63. }
  64. Widget _getUsernameInput() {
  65. return _getInputTextField(
  66. TextInputType.number,
  67. controller: _usernameController,
  68. decoration: InputDecoration(
  69. hintText: "输入手机号",
  70. icon: Icon(
  71. Icons.mobile_friendly_rounded,
  72. size: 20.0,
  73. ),
  74. border: InputBorder.none,
  75. //使用 GestureDetector 实现手势识别
  76. suffixIcon: GestureDetector(
  77. child: Offstage(
  78. child: Icon(Icons.clear),
  79. offstage: _username == '',
  80. ),
  81. //点击清除文本框内容
  82. onTap: () {
  83. this.setState(() {
  84. _username = '';
  85. _usernameController.clear();
  86. });
  87. },
  88. ),
  89. ),
  90. //使用 onChanged 完成双向绑定
  91. onChanged: (value) {
  92. this.setState(() {
  93. _username = value;
  94. });
  95. },
  96. );
  97. }
  98. Widget _getPasswordInput() {
  99. return _getInputTextField(
  100. TextInputType.text,
  101. obscureText: true,
  102. controller: _passwordController,
  103. decoration: InputDecoration(
  104. hintText: "输入密码",
  105. icon: Icon(
  106. Icons.lock_open,
  107. size: 20.0,
  108. ),
  109. suffixIcon: GestureDetector(
  110. child: Offstage(
  111. child: Icon(Icons.clear),
  112. offstage: _password == '',
  113. ),
  114. onTap: () {
  115. this.setState(() {
  116. _password = '';
  117. _passwordController.clear();
  118. });
  119. },
  120. ),
  121. border: InputBorder.none,
  122. ),
  123. onChanged: (value) {
  124. this.setState(() {
  125. _password = value;
  126. });
  127. },
  128. );
  129. }
  130. //省略了上述列举的代码
  131. Widget _getInputTextField(
  132. TextInputType keyboardType, {
  133. FocusNode? focusNode,
  134. controller: TextEditingController,
  135. onChanged: Function,
  136. InputDecoration? decoration,
  137. bool obscureText = false,
  138. height = 50.0,
  139. }) {
  140. return Container(
  141. height: height,
  142. margin: EdgeInsets.all(10.0),
  143. child: Column(
  144. children: [
  145. TextField(
  146. keyboardType: keyboardType,
  147. focusNode: focusNode,
  148. obscureText: obscureText,
  149. controller: controller,
  150. decoration: decoration,
  151. onChanged: onChanged,
  152. ),
  153. Divider(
  154. height: 1.0,
  155. color: Colors.grey[400],
  156. ),
  157. ],
  158. ),
  159. );
  160. }
  161. Widget _getLoginButton() {
  162. return Container(
  163. height: 50,
  164. width: double.infinity,
  165. margin: EdgeInsets.all(10),
  166. decoration: BoxDecoration(
  167. borderRadius: BorderRadius.circular(4.0),
  168. ),
  169. child: GSYFlexButton(
  170. text: ConstantString.loginText,
  171. color: Color(0xFF4875EC),
  172. textColor: GSYColors.textWhite,
  173. fontSize: 16,
  174. onPress: login,
  175. ),
  176. );
  177. }
  178. login() async {
  179. if (!CommonUtils.validationInput(_username)) {
  180. showToast(ConstantString.loginNull);
  181. } else {
  182. LoadingDialogHelper.showLoading(context);
  183. var result = await DioUtil().request('auth/login',
  184. method: DioMethod.post,
  185. data: {'username': _username, 'password': _password});
  186. LoginResponseEntity loginResponseEntity =
  187. loginResponseEntityFromJson(LoginResponseEntity(), result);
  188. if (0 == loginResponseEntity.code) {
  189. StoreHelper.putStorage(ConstantString.token, loginResponseEntity.data.token);
  190. debugPrint(loginResponseEntity.data.token);
  191. getInfo();
  192. } else {
  193. LoadingDialogHelper.dismissLoading(context);
  194. showToast(loginResponseEntity.msg);
  195. }
  196. }
  197. }
  198. getInfo() async{
  199. var result = await DioUtil().request('user/current-user',
  200. method: DioMethod.post);
  201. LoadingDialogHelper.dismissLoading(context);
  202. UserResponseEntity entity=userResponseEntityFromJson(UserResponseEntity(), result);
  203. if(entity.code==0){
  204. StoreHelper.putStorage(ConstantString.name, entity.data.name);
  205. StoreHelper.putStorage(ConstantString.orgName, entity.data.orgName);
  206. StoreHelper.putStorage(ConstantString.phone, entity.data.phone);
  207. await Navigator.pushNamed(context, HomePage.routeName);
  208. Navigator.pop(context);
  209. }else{
  210. showToast(entity.msg);
  211. }
  212. }
  213. }