quick_login_helper.dart 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. import 'dart:convert';
  2. import 'dart:io';
  3. import 'package:flutter/services.dart';
  4. import 'package:location/data/consts/app_config.dart';
  5. import 'package:location/data/consts/web_url.dart';
  6. import 'package:location/resource/assets.gen.dart';
  7. import 'package:location/utils/atmob_log.dart';
  8. import 'package:quickpass_yidun_flutter/quickpass_flutter_plugin.dart';
  9. class QuickLoginHelper {
  10. QuickLoginHelper._();
  11. static final String tag = 'QuickLoginHelper';
  12. static final String _businessId = BuildConfig.quickLoginBusinessId;
  13. static final String userAgreement = WebUrl.userAgreement;
  14. static final String privacyPolicy = WebUrl.privacyPolicy;
  15. static final QuickpassFlutterPlugin quickLoginPlugin =
  16. QuickpassFlutterPlugin();
  17. static Map<String, dynamic>? _configMap;
  18. // 新增静态变量存储 preFetchNumber 获取的 ydToken
  19. static String? _storedYdToken;
  20. static Future<void> init() {
  21. return quickLoginPlugin.init(_businessId).then((map) {
  22. bool result = map?['success'];
  23. AtmobLog.d(tag, 'init success:$result');
  24. });
  25. }
  26. static EventChannel getEventChannel() {
  27. return const EventChannel("yd_quicklogin_flutter_event_channel");
  28. }
  29. static void closeLoginAuthView() {
  30. quickLoginPlugin.closeLoginAuthView();
  31. }
  32. static Future<void> _setUiConfig() async {
  33. _configMap ??= await _getFileConfig();
  34. quickLoginPlugin.setUiConfig(_configMap);
  35. }
  36. static Future<Map<String, dynamic>> _getFileConfig() async {
  37. String file = "";
  38. if (Platform.isIOS) {
  39. file = Assets.config.iosQuickLoginConfig;
  40. } else if (Platform.isAndroid) {
  41. file = Assets.config.androidQuickLoginConfig;
  42. }
  43. return rootBundle.loadString(file).then((value) {
  44. return {"uiConfig": json.decode(value)};
  45. });
  46. }
  47. // 在初始化方法中添加测试代码(如 initState 或单独的测试按钮
  48. static void preFetchNumber({
  49. required void Function(String token) onSuccess,
  50. required void Function(String? errorMsg) onError,
  51. }) async {
  52. Map<dynamic, dynamic>? map = await quickLoginPlugin.preFetchNumber();
  53. if (map?['success'] == true) {
  54. var ydToken = map?['token'];
  55. // 存储 ydToken 到静态变量
  56. _storedYdToken = ydToken;
  57. AtmobLog.d(tag, 'preFetchNumber success token:$ydToken');
  58. onSuccess(ydToken);
  59. } else {
  60. //获取预设手机号失败
  61. var ydToken = map?['token'];
  62. // 失败时清空存储的 token
  63. _storedYdToken = ydToken;
  64. var errorMsg = map?['errorMsg'];
  65. AtmobLog.e(tag, "preFetchNumber error token:$ydToken,errorMsg:$errorMsg");
  66. onError(errorMsg);
  67. }
  68. }
  69. static void onePassLogin({
  70. required void Function(String ydToken, String accessToken) onSuccess,
  71. required void Function(String? errorMsg) onError,
  72. }) async {
  73. try {
  74. await _setUiConfig();
  75. Map<dynamic, dynamic>? map = await quickLoginPlugin.onePassLogin();
  76. if (map?["success"]) {
  77. var accessToken = map?["accessToken"];
  78. var ydToken = map?["ydToken"] ?? _storedYdToken;
  79. AtmobLog.d(tag,
  80. "onePassLogin success ydToken:$ydToken, accessToken:$accessToken");
  81. onSuccess(ydToken, accessToken);
  82. } else {
  83. var errorMsg = map?["msg"];
  84. AtmobLog.e(tag, "onePassLogin error msg:$errorMsg");
  85. onError(errorMsg);
  86. closeLoginAuthView();
  87. }
  88. } catch (e) {
  89. onError(e.toString());
  90. closeLoginAuthView();
  91. }
  92. }
  93. static void dispose() {
  94. _configMap = null;
  95. }
  96. }