login_controller.dart 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  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 checkLogin() {
  31. final username = usernameController.text;
  32. final password = passwordController.text;
  33. if (validatorInputValue(username) && validatorInputValue(password)) {
  34. isLogin = true;
  35. } else {
  36. isLogin = false;
  37. }
  38. }
  39. //6-20 characters (letters or numbers)
  40. bool validatorInputValue(String value) {
  41. // 只允许字母和数字并且是6-20位
  42. return value.length >= 6 &&
  43. value.length <= 20 &&
  44. RegExp(r'^[a-zA-Z0-9]+$').hasMatch(value);
  45. }
  46. // 处理登录
  47. Future<void> handleSignUp() async {
  48. if (!isLogin) {
  49. return;
  50. }
  51. // 取消输入框焦点,关闭软键盘,防止 LoadingDialog 关闭后软键盘再次弹出
  52. FocusManager.instance.primaryFocus?.unfocus();
  53. final params = {
  54. "account": usernameController.text.trim(),
  55. "password": passwordController.text,
  56. };
  57. await LoadingDialog.show(
  58. context: Get.context!,
  59. loadingText: Strings.loggingIn.tr,
  60. successText: Strings.loginSuccessful.tr,
  61. onRequest: () async {
  62. // 执行你的异步请求
  63. await _apiController.login(params);
  64. },
  65. onSuccess: () {
  66. // 成功后的操作
  67. Get.offAllNamed(Routes.HOME);
  68. },
  69. );
  70. }
  71. }