login_page.dart 6.0 KB

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