signup_controller.dart 2.2 KB

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