From 64e5a03f77d16af1f6afd51f2945648f9abac907 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=AD=8F=E5=B0=91=E9=98=B3?= <786612630@qq.com> Date: Mon, 30 Dec 2024 18:17:28 +0800 Subject: [PATCH] =?UTF-8?q?fix:=201=E3=80=81=E5=AE=8C=E6=88=90=E4=B8=80?= =?UTF-8?q?=E9=94=AE=E7=99=BB=E5=BD=95=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/login/login/starLock_login_logic.dart | 47 ++ lib/login/login/starLock_login_page.dart | 20 + lib/login/login/starLock_login_state.dart | 2 + lib/login/login/starLock_login_xhj_page.dart | 56 +-- lib/main_local.dart | 2 +- lib/network/api.dart | 1 + lib/network/api_provider.dart | 11 + lib/network/api_repository.dart | 10 + lib/tools/jverify_one_click_login.dart | 476 +++++++++++++++++++ pubspec.yaml | 2 +- 10 files changed, 597 insertions(+), 30 deletions(-) create mode 100644 lib/tools/jverify_one_click_login.dart diff --git a/lib/login/login/starLock_login_logic.dart b/lib/login/login/starLock_login_logic.dart index c7e64334..72d355e5 100755 --- a/lib/login/login/starLock_login_logic.dart +++ b/lib/login/login/starLock_login_logic.dart @@ -1,5 +1,8 @@ +import 'dart:io'; + import 'package:flutter/material.dart'; import 'package:get/get.dart'; +import 'package:jverify/jverify.dart'; import 'package:star_lock/appRouters.dart'; import 'package:star_lock/app_settings/app_settings.dart'; import 'package:star_lock/blue/blue_manage.dart'; @@ -14,6 +17,7 @@ import '../../mine/mine/starLockMine_logic.dart'; import '../../network/api_repository.dart'; import '../../tools/dateTool.dart'; import '../../tools/eventBusEventManage.dart'; +import '../../tools/jverify_one_click_login.dart'; import '../../tools/showTipView.dart'; import '../../tools/storage.dart'; import '../register/entity/checkIP_entity.dart'; @@ -73,6 +77,40 @@ class StarLockLoginLogic extends BaseGetXController { } } + Future oneClickLoginAction() async { + Map? map = await JverifyOneClickLoginManage().loginAuth(); + final int code = map!['code']; + final String content = map['message']; + // final String operator = map['operator']; + AppLog.log('1111code:$code content:$content'); + if (code == 6000) { + // final LoginEntity entity = await ApiRepository.to.oneClickLogin( + // loginType: '3', loginToken: content, deviceInfo: state.deviceInfoMap); + // if (entity.errorCode!.codeIsSuccessful) { + // UmengCommonSdk.onEvent('login_result', { + // 'account': state.emailOrPhone.value, + // 'date': DateTool().getNowDateWithType(1), + // 'login_res': '成功', + // }); + // + // Storage.saveLoginData(entity.data); + // Storage.setBool(saveIsVip, entity.data!.isVip == 1); + // eventBus.fire(MineInfoChangeRefreshUI()); + // if (Get.isRegistered()) { + // Get.find().getStarLockInfo(isUnShowLoading: true); + // } + // Get.offNamedUntil(Routers.starLockMain, (Route route) => false); + // BlueManage().scanDevices.clear(); //清除设备缓存 + // } else { + // UmengCommonSdk.onEvent('login_result', { + // 'account': state.emailOrPhone.value, + // 'date': DateTool().getNowDateWithType(1), + // 'login_res': '${entity.errorCode}--${entity.errorMsg}', + // }); + // } + } + } + Future checkIpAction() async { final CheckIPEntity entity = await ApiRepository.to.checkIpAction(ip: ''); if (entity.errorCode!.codeIsSuccessful) { @@ -110,6 +148,15 @@ class StarLockLoginLogic extends BaseGetXController { state.canNext.value = state.pwdIsOK && state.isEmailOrPhone; } + @override + Future onInit() async { + super.onInit(); + + JverifyOneClickLoginManage(); + state.isCheckVerifyEnable.value = + await JverifyOneClickLoginManage().checkVerifyEnable(); + } + @override void onClose() { state.onClose(); diff --git a/lib/login/login/starLock_login_page.dart b/lib/login/login/starLock_login_page.dart index 143ffb90..ffd99166 100755 --- a/lib/login/login/starLock_login_page.dart +++ b/lib/login/login/starLock_login_page.dart @@ -1,3 +1,4 @@ +import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; @@ -12,6 +13,7 @@ import '../../appRouters.dart'; import '../../app_settings/app_colors.dart'; import '../../common/XSConstantMacro/XSConstantMacro.dart'; import '../../tools/commonItem.dart'; +import '../../tools/jverify_one_click_login.dart'; import '../../tools/submitBtn.dart'; import '../../tools/tf_loginInput.dart'; import '../../tools/titleAppBar.dart'; @@ -234,6 +236,24 @@ class _StarLockLoginPageState extends State { } } : null)), + SizedBox(height: 20.w), + Obx(() => Visibility( + visible: state.isCheckVerifyEnable.value, + child: SubmitBtn( + btnName: '一键登录', + fontSize: 28.sp, + borderRadius: 20.w, + padding: EdgeInsets.only(top: 25.w, bottom: 25.w), + // isDisabled: state.canNext.value, + onClick: () { + if (state.agree.value == false) { + logic.showToast('请先同意用户协议及隐私政策'.tr); + return; + } else { + logic.oneClickLoginAction(); + } + }), + )), SizedBox(height: 50.w), Row( mainAxisAlignment: MainAxisAlignment.center, diff --git a/lib/login/login/starLock_login_state.dart b/lib/login/login/starLock_login_state.dart index 41bc0fef..ec224880 100755 --- a/lib/login/login/starLock_login_state.dart +++ b/lib/login/login/starLock_login_state.dart @@ -45,6 +45,8 @@ class StarLockLoginState { 'deviceType': 0 }.obs; + RxBool isCheckVerifyEnable = false.obs; + void onClose() { // emailOrPhoneController.dispose(); // pwdController.dispose(); diff --git a/lib/login/login/starLock_login_xhj_page.dart b/lib/login/login/starLock_login_xhj_page.dart index 8138db92..e389fa08 100755 --- a/lib/login/login/starLock_login_xhj_page.dart +++ b/lib/login/login/starLock_login_xhj_page.dart @@ -184,21 +184,17 @@ class _StarLockLoginPageState extends State { width: Get.width, child: ElevatedButton( onPressed: () async { - final dynamic data = - await Get.toNamed(Routers.starLockRegisterPage); - if (data != null) { - state.emailOrPhoneController.text = - data['phoneOrEmailStr']; - logic.checkNext(state.emailOrPhoneController); - state.pwdController.text = data['pwd']; - logic.checkNext(state.pwdController); - setState(() {}); + if (state.agree.value == false) { + logic.showToast('请先同意用户协议及隐私政策'.tr); + return; + } else { + logic.oneClickLoginAction(); } }, style: ElevatedButton.styleFrom( backgroundColor: AppColors.mainColor), child: Text( - '注册'.tr, + '一键登录'.tr, style: TextStyle(fontSize: 22.sp, color: Colors.white), ), @@ -229,25 +225,29 @@ class _StarLockLoginPageState extends State { child: SizedBox( width: 10.sp, )), - if (F.isLite) - Container() - else - GestureDetector( - child: SizedBox( - // width: 150.w, - height: 50.h, - // color: Colors.red, - child: Center( - child: Text('演示模式'.tr, - style: TextStyle( - fontSize: 22.sp, - color: AppColors.mainColor)), - ), + GestureDetector( + child: SizedBox( + // width: 150.w, + height: 50.h, + // color: Colors.red, + child: Center( + child: Text('注册'.tr, + style: TextStyle( + fontSize: 22.sp, + color: AppColors.mainColor)), ), - onTap: () { - Get.toNamed(Routers.demoModeLockDetailPage); - }, - ) + ), + onTap: () async { + final dynamic data = + await Get.toNamed(Routers.starLockRegisterPage); + state.emailOrPhoneController.text = + data['phoneOrEmailStr']; + logic.checkNext(state.emailOrPhoneController); + state.pwdController.text = data['pwd']; + logic.checkNext(state.pwdController); + setState(() {}); + }, + ) ], ), ], diff --git a/lib/main_local.dart b/lib/main_local.dart index bd256362..9e30d007 100755 --- a/lib/main_local.dart +++ b/lib/main_local.dart @@ -4,7 +4,7 @@ import 'flavors.dart'; import 'main.dart' as runner; Future main() async { - F.appFlavor = Flavor.sky; + F.appFlavor = Flavor.xhj; // AppLog.log('local调用了main函数'); await runner.main(); } diff --git a/lib/network/api.dart b/lib/network/api.dart index 09ec5b51..0cd68027 100755 --- a/lib/network/api.dart +++ b/lib/network/api.dart @@ -5,6 +5,7 @@ abstract class Api { final String getSliderVerifyImgUrl = '/user/getSliderVerifyImg'; final String checkImgUrl = '/user/isSliderValid'; final String loginUrl = '/user/login'; + final String oneClickLoginUrl = '/user/quickLogin'; // 一键登录 final String resetPasswordURL = '/user/resetPassword'; //重置密码 final String getCountryRegionURL = '/system/listCountry'; //获取国家或地区 final String electronicKeyListURL = '/key/listUser'; //电子钥匙列表 diff --git a/lib/network/api_provider.dart b/lib/network/api_provider.dart index 76677fa1..f4638713 100755 --- a/lib/network/api_provider.dart +++ b/lib/network/api_provider.dart @@ -80,6 +80,17 @@ class ApiProvider extends BaseProvider { 'deviceInfo': deviceInfo, })); + Future oneClickLogin( + String loginType, String loginToken, Map deviceInfo) => + post( + oneClickLoginUrl.toUrl, + jsonEncode({ + 'loginType': loginType, + 'platId': '2', + 'loginToken': loginToken, + 'deviceInfo': deviceInfo, + })); + Future resetPassword( String countryCode, String account, diff --git a/lib/network/api_repository.dart b/lib/network/api_repository.dart index 1f793ff0..e57c63c7 100755 --- a/lib/network/api_repository.dart +++ b/lib/network/api_repository.dart @@ -145,6 +145,16 @@ class ApiRepository { return LoginEntity.fromJson(res.body); } + //登录 + Future oneClickLogin( + {required String loginType, + required String loginToken, + required Map deviceInfo}) async { + final res = + await apiProvider.oneClickLogin(loginType, loginToken, deviceInfo); + return LoginEntity.fromJson(res.body); + } + //重置密码 Future resetPassword( String countryCode, diff --git a/lib/tools/jverify_one_click_login.dart b/lib/tools/jverify_one_click_login.dart new file mode 100644 index 00000000..8bdc9d6f --- /dev/null +++ b/lib/tools/jverify_one_click_login.dart @@ -0,0 +1,476 @@ +import 'package:jverify/jverify.dart'; + +import '../app_settings/app_settings.dart'; +import '../flavors.dart'; + +class JverifyOneClickLoginManage { + factory JverifyOneClickLoginManage() => shareManager()!; + + JverifyOneClickLoginManage._init() { + _initSDK(); + } + + static JverifyOneClickLoginManage? _manager; + + static JverifyOneClickLoginManage? shareManager() { + _manager ??= JverifyOneClickLoginManage._init(); + return _manager; + } + + JverifyOneClickLoginManage? get manager => shareManager(); + Jverify jverify = Jverify(); + + /// 统一 key + String f_result_key = 'result'; + + /// 错误码 + String f_code_key = 'code'; + + /// 回调的提示信息,统一返回 flutter 为 message + String f_msg_key = 'message'; + + /// 运营商信息 + String f_opr_key = 'operator'; + + Future _initSDK() async { + await initPlatformState(); + + isInitSuccess(); + + getToken(); + + preLogin(); + } + + Future initPlatformState() async { + // 初始化 SDK 之前添加监听 + jverify.addSDKSetupCallBackListener((JVSDKSetupEvent event) { + print('receive sdk setup call back event :${event.toMap()}'); + }); + + jverify.setDebugMode(true); // 打开调试模式 + jverify.setCollectionAuth(true); + if (F.isSKY) { + jverify.setup( + appKey: '7ff37d174c1a568a89e98dad', //"你自己应用的 AppKey", + channel: 'devloper-default'); // 初始化sdk, appKey 和 channel 只对ios设置有效 + AppLog.log('appKey:7ff37d174c1a568a89e98dad'); + } else { + jverify.setup( + appKey: '251fc8074820d122b6de58d2', //"你自己应用的 AppKey", + channel: 'devloper-default'); // 初始化sdk, appKey 和 channel 只对ios设置有效 + AppLog.log('appKey:251fc8074820d122b6de58d2'); + } + + // If the widget was removed from the tree while the asynchronous platform + // message was in flight, we want to discard the reply rather than calling + // setState to update our non-existent appearance. + // if (!mounted) return; + + /// 授权页面点击时间监听 + jverify.addAuthPageEventListener((JVAuthPageEvent event) { + print('receive auth page event :${event.toMap()}'); + }); + } + + /// sdk 初始化是否完成 + void isInitSuccess() { + jverify.isInitSuccess().then((map) { + final bool result = map[f_result_key]; + AppLog.log('sdk 初始化结果:$map'); + if (result) { + AppLog.log('sdk 初始化成功'); + } else { + AppLog.log('sdk 初始化失败'); + } + }); + } + + /// 判断当前网络环境是否可以发起认证 + Future checkVerifyEnable() async { + final Map map = await jverify.checkVerifyEnable(); + final bool result = map[f_result_key]; + return result; + // state.jverify.checkVerifyEnable().then((map) { + // final bool result = map[f_result_key]; + // if (result) { + // AppLog.log('当前网络环境【支持认证】!'); + // } else { + // AppLog.log('当前网络环境【不支持认证】!'); + // } + // return result; + // }); + } + + void getToken() { + jverify.checkVerifyEnable().then((map) { + final bool result = map[f_result_key]; + if (result) { + jverify.getToken().then((map) { + final int code = map[f_code_key]; + final String token = map[f_msg_key]; + final String operator = map[f_opr_key]; + AppLog.log('getToken code:$code token:$token operator:$operator'); + }); + } else { + AppLog.log('[2016],msg = 当前网络环境不支持认证'); + } + }); + } + + /// 登录预取号 + void preLogin() { + jverify.checkVerifyEnable().then((map) { + final bool result = map[f_result_key]; + if (result) { + jverify.preLogin().then((map) { + AppLog.log('预取号接口回调:${map.toString()}'); + final int code = map[f_code_key]; + final String message = map[f_msg_key]; + }); + } else { + AppLog.log('[2016],msg = 当前网络环境不支持认证'); + } + }); + } + + /// SDK 请求授权一键登录 + Future loginAuth() async { + Map map = await jverify.checkVerifyEnable(); + final bool result = map[f_result_key]; + print('checkVerifyEnable $map'); + //需要使用sms的时候不检查result + if (result) { + return await jverify.loginAuth(true); + // jverify.loginAuth(true).then((map) { + // /// 再,在回调里获取 loginAuth 接口异步返回数据(如果是通过添加 JVLoginAuthCallBackListener 监听来获取返回数据,则忽略此步骤) + // final int code = map[f_code_key]; + // final String content = map[f_msg_key]; + // final String operator = map[f_opr_key]; + // AppLog.log( + // '通过接口异步返回,获取到 loginAuth 接口返回数据,code=$code,message = $content,operator = $operator'); + // return map; + // }); + } + return null; + // .then((map) { + // final bool result = map[f_result_key]; + // print('checkVerifyEnable $map'); + // //需要使用sms的时候不检查result + // if (result) { + // // if (true) { + // jverify.loginAuth(true).then((map) { + // /// 再,在回调里获取 loginAuth 接口异步返回数据(如果是通过添加 JVLoginAuthCallBackListener 监听来获取返回数据,则忽略此步骤) + // final int code = map[f_code_key]; + // final String content = map[f_msg_key]; + // final String operator = map[f_opr_key]; + // AppLog.log( + // '通过接口异步返回,获取到 loginAuth 接口返回数据,code=$code,message = $content,operator = $operator'); + // return map; + // }); + +// // final screenSize = MediaQuery.of(context).size; +// // final screenWidth = screenSize.width; +// // final screenHeight = screenSize.height; +// final bool isiOS = Platform.isIOS; +// +// /// 自定义授权的 UI 界面,以下设置的图片必须添加到资源文件里, +// /// android项目将图片存放至drawable文件夹下,可使用图片选择器的文件名,例如:btn_login.xml,入参为"btn_login"。 +// /// ios项目存放在 Assets.xcassets。 +// /// +// final JVUIConfig uiConfig = JVUIConfig(); +// // uiConfig.authBGGifPath = "main_gif"; +// // uiConfig.authBGVideoPath="main_vi"; +// uiConfig.authBGVideoPath = +// 'http://clips.vorwaerts-gmbh.de/big_buck_bunny.mp4'; +// uiConfig.authBGVideoImgPath = 'main_v_bg'; +// +// uiConfig.navHidden = !isiOS; +// // uiConfig.navColor = Colors.red.value; +// // uiConfig.navText = "登录"; +// // uiConfig.navTextColor = Colors.blue.value; +// // uiConfig.navReturnImgPath = "return_bg"; //图片必须存在 +// +// uiConfig.logoWidth = 100; +// uiConfig.logoHeight = 80; +// //uiConfig.logoOffsetX = isiOS ? 0 : null;//(screenWidth/2 - uiConfig.logoWidth/2).toInt(); +// uiConfig.logoOffsetY = 10; +// uiConfig.logoVerticalLayoutItem = JVIOSLayoutItem.ItemSuper; +// uiConfig.logoHidden = false; +// uiConfig.logoImgPath = 'logo'; +// +// uiConfig.numberFieldWidth = 200; +// uiConfig.numberFieldHeight = 40; +// //uiConfig.numFieldOffsetX = isiOS ? 0 : null;//(screenWidth/2 - uiConfig.numberFieldWidth/2).toInt(); +// uiConfig.numFieldOffsetY = isiOS ? 20 : 120; +// uiConfig.numberVerticalLayoutItem = JVIOSLayoutItem.ItemLogo; +// uiConfig.numberColor = Colors.blue.value; +// uiConfig.numberSize = 18; +// +// uiConfig.sloganOffsetY = isiOS ? 20 : 160; +// uiConfig.sloganVerticalLayoutItem = JVIOSLayoutItem.ItemNumber; +// uiConfig.sloganTextColor = Colors.black.value; +// uiConfig.sloganTextSize = 15; +// // uiConfig.slogan +// //uiConfig.sloganHidden = 0; +// +// uiConfig.logBtnWidth = 220; +// uiConfig.logBtnHeight = 50; +// //uiConfig.logBtnOffsetX = isiOS ? 0 : null;//(screenWidth/2 - uiConfig.logBtnWidth/2).toInt(); +// uiConfig.logBtnOffsetY = isiOS ? 20 : 230; +// uiConfig.logBtnVerticalLayoutItem = JVIOSLayoutItem.ItemSlogan; +// uiConfig.logBtnText = '登录按钮'; +// uiConfig.logBtnTextColor = Colors.brown.value; +// uiConfig.logBtnTextSize = 16; +// uiConfig.logBtnTextBold = true; +// uiConfig.loginBtnNormalImage = 'login_btn_normal'; //图片必须存在 +// uiConfig.loginBtnPressedImage = 'login_btn_press'; //图片必须存在 +// uiConfig.loginBtnUnableImage = 'login_btn_unable'; //图片必须存在 +// +// uiConfig.privacyHintToast = +// true; //only android 设置隐私条款不选中时点击登录按钮默认显示toast。 +// +// uiConfig.privacyState = false; //设置默认勾选 +// uiConfig.privacyCheckboxSize = 20; +// uiConfig.checkedImgPath = 'check_image'; //图片必须存在 +// uiConfig.uncheckedImgPath = 'uncheck_image'; //图片必须存在 +// uiConfig.privacyCheckboxInCenter = true; +// uiConfig.privacyCheckboxHidden = false; +// uiConfig.isAlertPrivacyVc = true; +// +// //uiConfig.privacyOffsetX = isiOS ? (20 + uiConfig.privacyCheckboxSize) : null; +// uiConfig.privacyOffsetY = 15; // 距离底部距离 +// uiConfig.privacyVerticalLayoutItem = JVIOSLayoutItem.ItemSuper; +// uiConfig.clauseName = '协议1'; +// uiConfig.clauseUrl = 'http://www.baidu.com'; +// uiConfig.clauseBaseColor = Colors.black.value; +// uiConfig.clauseNameTwo = '协议二'; +// uiConfig.clauseUrlTwo = 'http://www.hao123.com'; +// uiConfig.clauseColor = Colors.red.value; +// uiConfig.privacyText = ['1极', '4证']; +// uiConfig.privacyTextSize = 13; +// uiConfig.privacyItem = [ +// JVPrivacy('自定义协议1', 'http://www.baidu.com', +// beforeName: '==', afterName: '++', separator: '*'), +// JVPrivacy('自定义协议2', 'http://www.baidu.com', separator: '、'), +// JVPrivacy('自定义协议3', 'http://www.baidu.com', separator: '、'), +// JVPrivacy('自定义协议4', 'http://www.baidu.com', separator: '、'), +// JVPrivacy('自定义协议5', 'http://www.baidu.com', separator: '、') +// ]; +// uiConfig.textVerAlignment = 1; +// //uiConfig.privacyWithBookTitleMark = true; +// //uiConfig.privacyTextCenterGravity = false; +// uiConfig.authStatusBarStyle = JVIOSBarStyle.StatusBarStyleDarkContent; +// uiConfig.privacyStatusBarStyle = JVIOSBarStyle.StatusBarStyleDefault; +// uiConfig.modelTransitionStyle = +// JVIOSUIModalTransitionStyle.CrossDissolve; +// +// uiConfig.statusBarColorWithNav = true; +// // uiConfig.virtualButtonTransparent = true; +// +// uiConfig.privacyStatusBarColorWithNav = true; +// uiConfig.privacyVirtualButtonTransparent = true; +// +// uiConfig.needStartAnim = true; +// uiConfig.needCloseAnim = true; +// uiConfig.enterAnim = 'activity_slide_enter_bottom'; +// uiConfig.exitAnim = 'activity_slide_exit_bottom'; +// +// uiConfig.privacyNavColor = Colors.red.value; +// uiConfig.privacyNavTitleTextColor = Colors.blue.value; +// uiConfig.privacyNavTitleTextSize = 16; +// +// uiConfig.privacyNavTitleTitle = 'ios lai le'; //only ios +// uiConfig.privacyNavReturnBtnImage = 'back'; //图片必须存在; +// +// //协议二次弹窗内容设置 -iOS +// uiConfig.isAlertPrivacyVc = true; +// uiConfig.agreementAlertViewTitleTexSize = 18; +// uiConfig.agreementAlertViewTitleTextColor = Colors.red.value; +// uiConfig.agreementAlertViewContentTextAlignment = +// JVTextAlignmentType.center; +// uiConfig.agreementAlertViewContentTextFontSize = 16; +// uiConfig.agreementAlertViewLoginBtnNormalImagePath = 'login_btn_normal'; +// uiConfig.agreementAlertViewLoginBtnPressedImagePath = 'login_btn_press'; +// uiConfig.agreementAlertViewLoginBtnUnableImagePath = 'login_btn_unable'; +// uiConfig.agreementAlertViewLogBtnTextColor = Colors.black.value; +// +// //协议二次弹窗内容设置 -Android +// final JVPrivacyCheckDialogConfig privacyCheckDialogConfig = +// JVPrivacyCheckDialogConfig(); +// // privacyCheckDialogConfig.width = 250; +// // privacyCheckDialogConfig.height = 100; +// privacyCheckDialogConfig.title = '测试协议标题'; +// privacyCheckDialogConfig.offsetX = 0; +// privacyCheckDialogConfig.offsetY = 0; +// privacyCheckDialogConfig.logBtnText = '同11意'; +// privacyCheckDialogConfig.titleTextSize = 22; +// privacyCheckDialogConfig.gravity = 'center'; +// privacyCheckDialogConfig.titleTextColor = Colors.black.value; +// privacyCheckDialogConfig.contentTextGravity = 'left'; +// privacyCheckDialogConfig.contentTextSize = 14; +// privacyCheckDialogConfig.logBtnImgPath = 'login_btn_normal'; +// privacyCheckDialogConfig.logBtnTextColor = Colors.black.value; +// privacyCheckDialogConfig.logBtnMarginT = 20; +// privacyCheckDialogConfig.logBtnMarginB = 20; +// privacyCheckDialogConfig.logBtnMarginL = 10; +// privacyCheckDialogConfig.logBtnWidth = 140; +// privacyCheckDialogConfig.logBtnHeight = 40; +// +// /// 添加自定义的 控件 到dialog +// final List dialogWidgetList = []; +// const String btn_dialog_widgetId = +// 'jv_add_custom_dialog_button'; // 标识控件 id +// final JVCustomWidget buttonDialogWidget = +// JVCustomWidget(btn_dialog_widgetId, JVCustomWidgetType.button); +// buttonDialogWidget.title = '取消'; +// buttonDialogWidget.left = 163; +// buttonDialogWidget.top = 142; +// buttonDialogWidget.width = 140; +// buttonDialogWidget.height = 40; +// buttonDialogWidget.textAlignment = JVTextAlignmentType.center; +// buttonDialogWidget.btnNormalImageName = 'main_btn_other'; +// buttonDialogWidget.btnPressedImageName = 'main_btn_other'; +// // buttonDialogWidget.backgroundColor = Colors.yellow.value; +// //buttonWidget.textAlignment = JVTextAlignmentType.left; +// +// // 添加点击事件监听 +// jverify.addClikWidgetEventListener(btn_dialog_widgetId, (eventId) { +// AppLog.log('receive listener - click dialog widget event :$eventId'); +// if (btn_dialog_widgetId == eventId) { +// AppLog.log('receive listener - 点击【新加 dialog button】'); +// } +// }); +// dialogWidgetList.add(buttonDialogWidget); +// privacyCheckDialogConfig.widgets = dialogWidgetList; +// uiConfig.privacyCheckDialogConfig = privacyCheckDialogConfig; +// +// //sms +// final JVSMSUIConfig smsConfig = JVSMSUIConfig(); +// smsConfig.smsPrivacyBeanList = [ +// JVPrivacy('自定义协议1', 'http://www.baidu.com', +// beforeName: '==', afterName: '++', separator: '*') +// ]; +// smsConfig.enableSMSService = true; +// uiConfig.smsUIConfig = smsConfig; +// +// uiConfig.setIsPrivacyViewDarkMode = false; //协议页面是否支持暗黑模式 +// +// //弹框模式 +// // JVPopViewConfig popViewConfig = JVPopViewConfig(); +// // popViewConfig.width = (screenWidth - 100.0).toInt(); +// // popViewConfig.height = (screenHeight - 150.0).toInt(); +// +// // uiConfig.popViewConfig = popViewConfig; +// +// /// 添加自定义的 控件 到授权界面 +// final List widgetList = []; +// +// const String text_widgetId = 'jv_add_custom_text'; // 标识控件 id +// final JVCustomWidget textWidget = +// JVCustomWidget(text_widgetId, JVCustomWidgetType.textView); +// textWidget.title = '新加 text view 控件'; +// textWidget.left = 20; +// textWidget.top = 360; +// textWidget.width = 200; +// textWidget.height = 40; +// textWidget.backgroundColor = Colors.yellow.value; +// textWidget.isShowUnderline = true; +// textWidget.textAlignment = JVTextAlignmentType.center; +// textWidget.isClickEnable = true; +// +// // 添加点击事件监听 +// jverify.addClikWidgetEventListener(text_widgetId, (eventId) { +// AppLog.log('receive listener - click widget event :$eventId'); +// if (text_widgetId == eventId) { +// AppLog.log('receive listener - 点击【新加 text】'); +// } +// }); +// widgetList.add(textWidget); +// +// const String btn_widgetId = 'jv_add_custom_button'; // 标识控件 id +// final JVCustomWidget buttonWidget = +// JVCustomWidget(btn_widgetId, JVCustomWidgetType.button); +// buttonWidget.title = '新加 button 控件'; +// buttonWidget.left = 100; +// buttonWidget.top = 400; +// buttonWidget.width = 150; +// buttonWidget.height = 40; +// buttonWidget.isShowUnderline = true; +// buttonWidget.backgroundColor = Colors.brown.value; +// //buttonWidget.btnNormalImageName = ""; +// //buttonWidget.btnPressedImageName = ""; +// //buttonWidget.textAlignment = JVTextAlignmentType.left; +// +// // 添加点击事件监听 +// jverify.addClikWidgetEventListener(btn_widgetId, (eventId) { +// AppLog.log('receive listener - click widget event :$eventId'); +// if (btn_widgetId == eventId) { +// AppLog.log('receive listener - 点击【新加 button】'); +// } +// }); +// widgetList.add(buttonWidget); +// +// // 设置iOS的二次弹窗按钮 +// uiConfig.agreementAlertViewWidgets = dialogWidgetList; +// uiConfig.agreementAlertViewUIFrames = { +// 'superViewFrame': [10, 60, 280, 300], +// 'alertViewFrame': [0, 0, 280, 300], +// 'titleFrame': [10, 10, 260, 40], +// 'contentFrame': [15, 60, 250, 110], +// 'buttonFrame': [10, 200, 100, 40] +// }; +// +// /// 步骤 1:调用接口设置 UI +// jverify.setCustomAuthorizationView(true, uiConfig, +// landscapeConfig: uiConfig, widgets: widgetList); +// if (!isSms) { +// /// 步骤 2:调用一键登录接口 +// jverify.loginAuthSyncApi2( +// autoDismiss: true, +// enableSms: true, +// loginAuthcallback: (event) { +// AppLog.log( +// '获取到 loginAuthSyncApi 接口返回数据,code=${event.code},message = ${event.message},operator = ${event.operator}'); +// }); +// } else { +// /// 步骤 2:调用短信登录接口 +// jverify.smsAuth( +// autoDismiss: true, +// smsCallback: (event) { +// AppLog.log( +// '获取到 smsAuth 接口返回数据,code=${event.code},message = ${event.message},phone = ${event.phone}'); +// }); +// } +// } else { + /* 弹框模式 + JVPopViewConfig popViewConfig = JVPopViewConfig(); + popViewConfig.width = (screenWidth - 100.0).toInt(); + popViewConfig.height = (screenHeight - 150.0).toInt(); + + uiConfig.popViewConfig = popViewConfig; + */ + + /* + + /// 方式二:使用异步接口 (如果想使用异步接口,则忽略此步骤,看方式二) + + /// 先,执行异步的一键登录接口 + jverify.loginAuth(true).then((map) { + + /// 再,在回调里获取 loginAuth 接口异步返回数据(如果是通过添加 JVLoginAuthCallBackListener 监听来获取返回数据,则忽略此步骤) + int code = map[f_code_key]; + String content = map[f_msg_key]; + String operator = map[f_opr_key]; + setState(() { + _hideLoading(); + _result = "接口异步返回数据:[$code] message = $content"; + }); + print("通过接口异步返回,获取到 loginAuth 接口返回数据,code=$code,message = $content,operator = $operator"); + }); + + */ + // } + // }); + } +} diff --git a/pubspec.yaml b/pubspec.yaml index 2d34dcf6..482cbeb2 100755 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -250,7 +250,7 @@ dependencies: open_filex: ^4.4.0 umeng_common_sdk: 1.2.7 - + jverify: 3.0.0 dependency_overrides: #强制设置google_maps_flutter_ios 为 2.5.2 google_maps_flutter_ios: 2.5.2