| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154 |
- import 'dart:async';
- import 'dart:convert';
- import 'dart:io';
- import 'package:flutter/services.dart';
- import 'package:get/get.dart';
- import 'package:get/get_core/src/get_main.dart';
- import 'package:location/data/consts/build_config.dart';
- import 'package:location/data/consts/web_url.dart';
- import 'package:location/resource/assets.gen.dart';
- import 'package:location/utils/atmob_log.dart';
- import 'package:quickpass_yidun_flutter/quickpass_flutter_plugin.dart';
- class QuickLoginHelper {
- QuickLoginHelper._();
- static final String tag = 'QuickLoginHelper';
- static final String _businessId = BuildConfig.quickLoginBusinessId;
- static final String userAgreement = WebUrl.userAgreement;
- static final String privacyPolicy = WebUrl.privacyPolicy;
- static final QuickpassFlutterPlugin quickLoginPlugin =
- QuickpassFlutterPlugin();
- static Map<String, dynamic>? _configMap;
- // 新增静态变量存储 preFetchNumber 获取的 ydToken
- static String? _storedYdToken;
- static Future<void> init() {
- return quickLoginPlugin.init(_businessId).then((map) {
- bool result = map?['success'];
- AtmobLog.d(tag, 'init success:$result');
- });
- }
- static EventChannel getEventChannel() {
- return const EventChannel("yd_quicklogin_flutter_event_channel");
- }
- static void closeLoginAuthView() {
- quickLoginPlugin.closeLoginAuthView();
- }
- static Future<void> _setUiConfig() async {
- _configMap ??= await _getFileConfig();
- quickLoginPlugin.setUiConfig(_configMap);
- }
- static Future<Map<String, dynamic>> _getFileConfig() async {
- String file = "";
- if (Platform.isIOS) {
- file = Assets.config.iosQuickLoginConfig;
- } else if (Platform.isAndroid) {
- file = Assets.config.androidQuickLoginConfig;
- }
- dynamic configMap = json.decode(await rootBundle.loadString(file));
- //自定义配置
- if (Platform.isAndroid) {
- configMap = getAndroidCustomConfigSetting(configMap);
- } else if (Platform.isIOS) {
- //TODO ios需参考UI完善自定义配置
- }
- return {"uiConfig": configMap};
- }
- static dynamic getAndroidCustomConfigSetting(dynamic configMap) {
- final List<dynamic> rawWidgets = configMap['widgets'] ?? [];
- final List<Map<String, dynamic>> widgetsMap =
- rawWidgets.map((e) => Map<String, dynamic>.from(e)).toList();
- //背景图
- final Map<String, dynamic> bgHeaderMap = {};
- bgHeaderMap['viewId'] = 'bg_header';
- bgHeaderMap['type'] = 'ImageView';
- bgHeaderMap['isGravityCenter'] = true;
- bgHeaderMap['top'] = 0;
- bgHeaderMap['backgroundImgPath'] = "bg_header";
- bgHeaderMap['width'] = Get.width.toInt();
- int height = (Get.width * (648 / 1083)).toInt();
- bgHeaderMap['height'] = height;
- widgetsMap.add(bgHeaderMap);
- //自定义返回按钮
- final Map<String, dynamic> backMap = {};
- backMap['viewId'] = 'ic_back';
- backMap['type'] = 'ImageView';
- backMap['isGravityCenter'] = true;
- backMap['top'] = 16;
- backMap['left'] = 20;
- backMap['backgroundImgPath'] = "icon_common_back";
- backMap['width'] = 24;
- backMap['height'] = 24;
- backMap['action'] = 'back';
- widgetsMap.add(backMap);
- configMap['widgets'] = widgetsMap;
- return configMap;
- }
- // 在初始化方法中添加测试代码(如 initState 或单独的测试按钮
- static void preFetchNumber({
- required void Function(String token) onSuccess,
- required void Function(String? errorMsg) onError,
- }) async {
- Map<dynamic, dynamic>? map = await quickLoginPlugin.preFetchNumber();
- if (map?['success'] == true) {
- var ydToken = map?['token'];
- // 存储 ydToken 到静态变量
- _storedYdToken = ydToken;
- AtmobLog.d(tag, 'preFetchNumber success token:$ydToken');
- onSuccess(ydToken);
- } else {
- //获取预设手机号失败
- var ydToken = map?['token'];
- // 失败时清空存储的 token
- _storedYdToken = ydToken;
- var errorMsg = map?['errorMsg'];
- AtmobLog.e(tag, "preFetchNumber error token:$ydToken,errorMsg:$errorMsg");
- onError(errorMsg);
- }
- }
- static void onePassLogin({
- required void Function(String ydToken, String accessToken) onSuccess,
- required void Function(String? errorMsg) onError,
- }) async {
- try {
- await _setUiConfig();
- Map<dynamic, dynamic>? map = await quickLoginPlugin.onePassLogin();
- if (map?["success"]) {
- var accessToken = map?["accessToken"];
- var ydToken = map?["ydToken"] ?? _storedYdToken;
- AtmobLog.d(tag,
- "onePassLogin success ydToken:$ydToken, accessToken:$accessToken");
- onSuccess(ydToken, accessToken);
- } else {
- var errorMsg = map?["msg"];
- AtmobLog.e(tag, "onePassLogin error msg:$errorMsg");
- onError(errorMsg);
- closeLoginAuthView();
- }
- } catch (e) {
- onError(e.toString());
- closeLoginAuthView();
- }
- }
- static void dispose() {
- _configMap = null;
- }
- }
|