login_page.dart 6.4 KB

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