選択できるのは25トピックまでです。 トピックは、先頭が英数字で、英数字とダッシュ('-')を使用した35文字以内のものにしてください。
 
 
 
 
 
 

106 行
2.7 KiB

  1. import 'dart:async';
  2. import 'dart:convert';
  3. import 'package:demo001/main.dart';
  4. import 'package:demo001/scenes/public.dart';
  5. import 'package:demo001/tools/http_utils.dart';
  6. import 'package:flutter/material.dart';
  7. import 'package:flutter_easyloading/flutter_easyloading.dart';
  8. import 'package:get/get.dart';
  9. import 'package:shared_preferences/shared_preferences.dart';
  10. import 'package:demo001/tools/widgets.dart';
  11. import 'login_state.dart';
  12. /// @description:
  13. /// @author
  14. /// @date: 2025-01-11 17:25:10
  15. class LoginLogic extends GetxController {
  16. final state = LoginState();
  17. @override
  18. void onInit() {
  19. super.onInit();
  20. }
  21. @override
  22. void onReady() {
  23. super.onReady();
  24. _getLoginInfo();
  25. _checkPermission();
  26. }
  27. void _checkPermission() {
  28. state.methodChannel.invokeMethod("bluetoothPermissionRequest");
  29. }
  30. void _getLoginInfo() async {
  31. EasyLoading.show();
  32. final info = await getSharedLoginInfo();
  33. if (info != null) {
  34. state.emailContr.text = info.data?.user?.mail ?? '';
  35. Future.delayed(1.seconds, () {
  36. EasyLoading.dismiss();
  37. Get.offAll(() => IndexWidget());
  38. });
  39. } else {
  40. EasyLoading.dismiss();
  41. }
  42. }
  43. void getEmailPin() {
  44. if (state.countDown.value != 60) return;
  45. state.pinCodeTimer = Timer.periodic(1.seconds, (t) {
  46. if (state.countDown.value <= 0) {
  47. t.cancel();
  48. state.pinCodeTimer?.cancel();
  49. state.pinCodeTimer = null;
  50. state.countDown.value = 60;
  51. } else {
  52. state.countDown.value = state.countDown.value - 1;
  53. }
  54. });
  55. EasyLoading.show();
  56. ApiClient.post(
  57. url: ApiClient.getPin,
  58. param: {"addr": state.emailContr.text, "vtype": 0},
  59. onSuccess: (data) {
  60. EasyLoading.showInfo('验证码已发送,请到邮箱查看!');
  61. },
  62. onFailed: (msg) {
  63. EasyLoading.showError(msg);
  64. });
  65. }
  66. void login() {
  67. FocusScope.of(Get.context!).unfocus();
  68. if (!isEmail(state.emailContr.text)) {
  69. EasyLoading.showError('邮箱错误!');
  70. return;
  71. }
  72. if (state.pinContr.text.length != 4) {
  73. EasyLoading.showError('验证码错误!');
  74. return;
  75. }
  76. EasyLoading.show();
  77. ApiClient.post(
  78. url: ApiClient.login,
  79. param: {
  80. "mail": state.emailContr.text,
  81. "openid": "",
  82. "phone": "",
  83. "stype": 0,
  84. "vcode": state.pinContr.text
  85. },
  86. onSuccess: (data) async {
  87. EasyLoading.dismiss();
  88. final instance = await SharedPreferences.getInstance();
  89. await instance.setString('loginInfo', jsonEncode(data));
  90. Get.offAll(() => IndexWidget());
  91. },
  92. onFailed: (msg) {
  93. EasyLoading.showError(msg);
  94. });
  95. }
  96. }