login_dialog_controller.dart 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172
  1. import 'dart:async';
  2. import 'dart:io';
  3. import 'package:flutter/cupertino.dart';
  4. import 'package:flutter_smart_dialog/flutter_smart_dialog.dart';
  5. import 'package:get/get.dart';
  6. import 'package:injectable/injectable.dart';
  7. import 'package:keyboard/base/base_controller.dart';
  8. import 'package:keyboard/data/repository/account_repository.dart';
  9. import 'package:keyboard/dialog/loading_dialog.dart';
  10. import 'package:keyboard/module/login/login_page.dart';
  11. import 'package:keyboard/utils/atmob_log.dart';
  12. import 'package:keyboard/utils/toast_util.dart';
  13. import 'package:sign_in_with_apple/sign_in_with_apple.dart';
  14. import '../../data/consts/error_code.dart';
  15. import '../../data/consts/event_report.dart';
  16. import '../../handler/event_handler.dart';
  17. import '../../handler/wechat_login_service.dart';
  18. import '../../resource/string.gen.dart';
  19. import '../../utils/error_handler.dart';
  20. import '../../utils/http_handler.dart';
  21. import '../member_agreement_dialog.dart';
  22. import '../privacy_agreement_dialog.dart';
  23. import 'login_dialog.dart';
  24. @injectable
  25. class LoginDialogController extends BaseController {
  26. final tag = "LoginDialogController";
  27. final WechatLoginService wechatLoginService;
  28. final AccountRepository accountRepository;
  29. LoginDialogController(this.wechatLoginService, this.accountRepository);
  30. final RxBool _isAgree = false.obs;
  31. bool get isAgree => _isAgree.value;
  32. clickAgree() {
  33. _isAgree.value = !_isAgree.value;
  34. }
  35. void clickWxLogin() async {
  36. EventHandler.report(EventId.event_04001);
  37. if (!_isAgree.value) {
  38. PrivacyAgreementDialog.show(
  39. btnConfirm: () async {
  40. _isAgree.value = true;
  41. clickWxLogin();
  42. },
  43. );
  44. return;
  45. }
  46. wechatLoginService.login(
  47. onSuccess: (code) {
  48. accountRepository
  49. .wechatLogin(code)
  50. .then((data) {
  51. ToastUtil.show(StringName.loginSuccess);
  52. SmartDialog.dismiss(tag: LoginDialog.TAG);
  53. EventHandler.report(EventId.event_04003);
  54. })
  55. .catchError((error) {
  56. if (error is ServerErrorException) {
  57. if (error.code == ErrorCode.verificationCodeError) {
  58. ToastUtil.show(StringName.loginVerificationCodeErrorToast);
  59. } else {
  60. ToastUtil.show(error.message);
  61. }
  62. } else {
  63. ErrorHandler.toastError(error);
  64. }
  65. EventHandler.report(EventId.event_04004);
  66. });
  67. },
  68. onError: (code, msg) {
  69. EventHandler.report(EventId.event_04004);
  70. ToastUtil.show("微信登录失败:$msg");
  71. },
  72. onCancel: () {
  73. EventHandler.report(EventId.event_04004);
  74. ToastUtil.show("用户取消登录");
  75. },
  76. );
  77. }
  78. // 苹果登录点击
  79. void clickAppleLogin() async {
  80. if (!_isAgree.value) {
  81. PrivacyAgreementDialog.show(
  82. btnConfirm: () async {
  83. _isAgree.value = true;
  84. clickAppleLogin();
  85. },
  86. );
  87. ToastUtil.show(StringName.loginAgreePrivacy);
  88. return;
  89. }
  90. CustomLoadingDialog.show();
  91. AuthorizationCredentialAppleID credential;
  92. try {
  93. credential = await SignInWithApple.getAppleIDCredential(
  94. scopes: [
  95. AppleIDAuthorizationScopes.email,
  96. AppleIDAuthorizationScopes.fullName,
  97. ],
  98. );
  99. } catch (error) {
  100. CustomLoadingDialog.hide();
  101. ToastUtil.show(StringName.loginFailedToast);
  102. return;
  103. }
  104. var userIdentity = credential.userIdentifier ?? "";
  105. var authorizationCode = credential.authorizationCode ?? "";
  106. var identityToken = credential.identityToken ?? "";
  107. accountRepository
  108. .appleLogin(userIdentity, authorizationCode, identityToken)
  109. .then((data) {
  110. CustomLoadingDialog.hide();
  111. EventHandler.report(EventId.event_04003);
  112. SmartDialog.dismiss(tag: LoginDialog.TAG);
  113. ToastUtil.show(StringName.loginSuccess);
  114. })
  115. .catchError((error) {
  116. CustomLoadingDialog.hide();
  117. EventHandler.report(EventId.event_04004);
  118. if (error is LoginTooOftenException) {
  119. ToastUtil.show(StringName.loginTooOftenToast);
  120. return;
  121. }
  122. if (error is ServerErrorException) {
  123. if (error.code == ErrorCode.verificationCodeError) {
  124. ToastUtil.show(StringName.loginVerificationCodeErrorToast);
  125. } else {
  126. ToastUtil.show(error.message);
  127. }
  128. } else {
  129. ErrorHandler.toastError(error);
  130. }
  131. });
  132. }
  133. void clickClose() {
  134. AtmobLog.d(tag, "clickClose");
  135. SmartDialog.dismiss(tag: LoginDialog.TAG);
  136. }
  137. void clickPhoneLogin() {
  138. AtmobLog.d(tag, "clickPhoneLogin");
  139. EventHandler.report(EventId.event_04002);
  140. LoginPage.start();
  141. SmartDialog.dismiss(tag: LoginDialog.TAG);
  142. }
  143. @override
  144. void onInit() {
  145. super.onInit();
  146. }
  147. @override
  148. void onClose() {
  149. super.onClose();
  150. }
  151. }