login_controller.dart 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. import 'package:flutter/material.dart';
  2. import 'package:get/get.dart';
  3. import '../../../../config/translations/strings_enum.dart';
  4. import '../../../controllers/api_controller.dart';
  5. import '../../../dialog/loading/loading_dialog.dart';
  6. import '../../../routes/app_pages.dart';
  7. class LoginController extends GetxController {
  8. final _apiController = Get.find<ApiController>();
  9. final usernameController = TextEditingController();
  10. final passwordController = TextEditingController();
  11. final usernameFocusNode = FocusNode();
  12. final passwordFocusNode = FocusNode();
  13. final _isLogin = false.obs;
  14. bool get isLogin => _isLogin.value;
  15. set isLogin(bool value) {
  16. _isLogin.value = value;
  17. }
  18. @override
  19. void onInit() {
  20. super.onInit();
  21. }
  22. @override
  23. void onClose() {
  24. usernameController.dispose();
  25. passwordController.dispose();
  26. usernameFocusNode.dispose();
  27. passwordFocusNode.dispose();
  28. super.onClose();
  29. }
  30. void onBackPressed() {
  31. // 判断软键盘是否弹出
  32. if (usernameFocusNode.hasFocus || passwordFocusNode.hasFocus) {
  33. FocusManager.instance.primaryFocus?.unfocus();
  34. // 延迟100毫秒后关闭页面
  35. Future.delayed(const Duration(milliseconds: 250), () {
  36. Get.back();
  37. });
  38. } else {
  39. Get.back();
  40. }
  41. }
  42. void checkLogin() {
  43. final username = usernameController.text;
  44. final password = passwordController.text;
  45. if (validatorInputValue(username) && validatorInputValue(password)) {
  46. isLogin = true;
  47. } else {
  48. isLogin = false;
  49. }
  50. }
  51. //6-20 characters (letters or numbers)
  52. bool validatorInputValue(String value) {
  53. // 只允许字母和数字并且是6-20位
  54. return value.length >= 6 &&
  55. value.length <= 20 &&
  56. RegExp(r'^[a-zA-Z0-9]+$').hasMatch(value);
  57. }
  58. // 处理登录
  59. Future<void> handleSignUp() async {
  60. if (!isLogin) {
  61. return;
  62. }
  63. // 取消输入框焦点,关闭软键盘,防止 LoadingDialog 关闭后软键盘再次弹出
  64. FocusManager.instance.primaryFocus?.unfocus();
  65. final params = {
  66. "account": usernameController.text.trim(),
  67. "password": passwordController.text,
  68. };
  69. await LoadingDialog.show(
  70. context: Get.context!,
  71. loadingText: Strings.loggingIn.tr,
  72. successText: Strings.loginSuccessful.tr,
  73. onRequest: () async {
  74. // 执行你的异步请求
  75. await _apiController.login(params);
  76. },
  77. onSuccess: () {
  78. // 成功后的操作
  79. Get.offAllNamed(Routes.HOME);
  80. },
  81. );
  82. }
  83. }