From 381b1afb9bbdefb52ee211329833de2e3110811c Mon Sep 17 00:00:00 2001 From: PH2 <1293456824@qq.com> Date: Thu, 15 Apr 2021 19:05:09 +0800 Subject: [PATCH] =?UTF-8?q?1=E3=80=81=E6=B7=BB=E5=8A=A0=E6=8B=BC=E5=A4=9A?= =?UTF-8?q?=E5=A4=9A=E6=8E=88=E6=9D=83=202=E3=80=81=E4=BF=AE=E6=94=B9?= =?UTF-8?q?=E9=AA=8C=E8=AF=81=E7=A0=81=E7=99=BB=E5=BD=95=203=E3=80=81?= =?UTF-8?q?=E6=8A=8A=E8=B7=B3=E8=BD=AC=E5=8E=9F=E7=94=9F=E6=8A=BD=E5=8F=96?= =?UTF-8?q?=E6=88=90=E4=B8=80=E4=B8=AA=E6=96=B9=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- assets/images/3.0x/icon_pdd.png | Bin 0 -> 27769 bytes assets/images/icon_pdd.png | Bin 0 -> 12634 bytes .../account/login_account_page.dart | 8 +- .../invite/bloc/login_invite_repository.dart | 2 + lib/util/pdd_auth/pdd_auth.dart | 52 +++ lib/util/pdd_auth/pdd_auth_dialog.dart | 86 +++++ lib/util/pdd_auth/pdd_auth_model.dart | 48 +++ lib/util/pdd_auth/pdd_auth_repository.dart | 59 ++++ lib/util/turn_chain/turn_chain_util.dart | 320 +++++++++++++----- pubspec.yaml | 1 + 10 files changed, 480 insertions(+), 96 deletions(-) create mode 100644 assets/images/3.0x/icon_pdd.png create mode 100644 assets/images/icon_pdd.png create mode 100644 lib/util/pdd_auth/pdd_auth.dart create mode 100644 lib/util/pdd_auth/pdd_auth_dialog.dart create mode 100644 lib/util/pdd_auth/pdd_auth_model.dart create mode 100644 lib/util/pdd_auth/pdd_auth_repository.dart diff --git a/assets/images/3.0x/icon_pdd.png b/assets/images/3.0x/icon_pdd.png new file mode 100644 index 0000000000000000000000000000000000000000..7b449e7d2a36d4ca3d0cbf26c67a3e3f32520f3d GIT binary patch literal 27769 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 literal 0 HcmV?d00001 diff --git a/lib/pages/login_page/account/login_account_page.dart b/lib/pages/login_page/account/login_account_page.dart index c2174d9..e1de9be 100644 --- a/lib/pages/login_page/account/login_account_page.dart +++ b/lib/pages/login_page/account/login_account_page.dart @@ -80,14 +80,14 @@ class _LoginAccountPageContianerState extends State i } /// 跳转到邀请码页面 - void _openInvitePage(String mobile) { + void _openInvitePage(String mobile, String captcha) { print('跳转到邀请码页面'); RouterUtil.hideKeyboard(context); Navigator.push( context, CupertinoPageRoute( // builder: (_) => PageFactory.create('login_invite', null) - builder: (_) => LoginInvitePage({'mobile': mobile}))); + builder: (_) => LoginInvitePage({'mobile': mobile, 'captcha': captcha}))); } /// 登陆成功页面 @@ -289,11 +289,11 @@ class _LoginAccountPageContianerState extends State i Fluttertoast.showToast(msg: '登录成功~'); _isLogging = true; - /// 打开也买 + /// 打开登录成功首页 _openLoginSuccessPage(); } else { /// 打开邀请页面 - _openInvitePage(current?.model?.mobile); + _openInvitePage(current?.model?.mobile, current?.model?.captcha); } return false; } diff --git a/lib/pages/login_page/invite/bloc/login_invite_repository.dart b/lib/pages/login_page/invite/bloc/login_invite_repository.dart index abc13db..d6b0648 100644 --- a/lib/pages/login_page/invite/bloc/login_invite_repository.dart +++ b/lib/pages/login_page/invite/bloc/login_invite_repository.dart @@ -51,6 +51,8 @@ class LoginInviteRepository { params['mobile'] = event.mobile; params['zone'] = '86'; params['parent_uid'] = event.num; + // 新版本version = 2 需要添加上一步的验证码 + // params['version'] = '2'; if(!EmptyUtil.isEmpty(data['captcha'])){ params['captcha'] = data['captcha']; diff --git a/lib/util/pdd_auth/pdd_auth.dart b/lib/util/pdd_auth/pdd_auth.dart new file mode 100644 index 0000000..805881a --- /dev/null +++ b/lib/util/pdd_auth/pdd_auth.dart @@ -0,0 +1,52 @@ +import 'package:flutter/material.dart'; +import 'package:zhiying_comm/util/dialog/loading/loading.dart'; +import 'package:zhiying_comm/util/pdd_auth/pdd_auth_dialog.dart'; +import 'package:zhiying_comm/zhiying_comm.dart'; +import 'package:flutter/cupertino.dart'; +import 'package:url_launcher/url_launcher.dart'; + +import 'pdd_auth_model.dart'; +import 'pdd_auth_repository.dart'; + +class PddAuth { + /// + /// 进行拼多多授权 (无参数授权,需要请求接口) + /// bool = true 需要授权,bool = false 不需要授权 + /// + static Future auth(BuildContext context, {String isShare = '1'}) async { + // 开启loading + Loading.show(context); + PddAuthModel model = await PddAuthRepository().fetchNetData(isShare: isShare); + Loading.dismiss(); + if (!EmptyUtil.isEmpty(model)) { + return await PddAuth.authParam(context, model.toJson()); + } + return false; + } + + /// + /// 进行拼多多授权(有参数授权) + /// + static Future authParam(context, Map data) async { + try { + if (EmptyUtil.isEmpty(context) || EmptyUtil.isEmpty(data)) return false; + PddAuthModel model = PddAuthModel.fromJson(data); + if (EmptyUtil.isEmpty(model) || EmptyUtil.isEmpty(model.noOpenAppUrl) || EmptyUtil.isEmpty(model.schemaUrl) || (model?.isPop ?? '0') == '0') return false; + bool isConfirm = await showDialog(context: context, builder: (_) => PddAuthDialog()); + /// 前往授权 + if (isConfirm) { + // 1. 判断是否安装 + bool launched = await canLaunch(model.schemaUrl); + if (launched) { + launched = await launch(model.schemaUrl); + } + if (!launched) { + RouterUtil.openWebview(model.noOpenAppUrl, context); + } + } + } catch (e, s) { + Logger.error(e, s); + } + return true; + } +} diff --git a/lib/util/pdd_auth/pdd_auth_dialog.dart b/lib/util/pdd_auth/pdd_auth_dialog.dart new file mode 100644 index 0000000..0f4521d --- /dev/null +++ b/lib/util/pdd_auth/pdd_auth_dialog.dart @@ -0,0 +1,86 @@ +import 'package:flutter/material.dart'; + +class PddAuthDialog extends StatelessWidget { + @override + Widget build(BuildContext context) { + return GestureDetector( + child: Scaffold( + backgroundColor: Colors.transparent, + body: Center( + child: GestureDetector( + child: Container( + padding: EdgeInsets.all(20), + width: 230, + height: 226, + decoration: BoxDecoration( + color: Colors.white, + borderRadius: BorderRadius.circular(13), + ), + child: Column( + children: [ + Container( + width: 62, + height: 62, + child: Image.asset( + 'assets/images/icon_pdd.png', + package: 'zhiying_comm', + ), + ), + Padding( + padding: EdgeInsets.only(top: 10, bottom: 4), + child: Text( + '申请拼多多授权', + style: TextStyle( + color: Color(0xff333333), + fontSize: 15, + ), + )), + Expanded( + child: Text( + '应平台要求,需要先进行授权\n方可获得更多搜索结果', + textAlign: TextAlign.center, + style: TextStyle( + color: Color(0xff999999), + fontSize: 12, + ), + ), + ), + GestureDetector( + child: Container( + width: 180, + height: 34, + decoration: BoxDecoration( + gradient: LinearGradient( + begin: Alignment.topCenter, + end: Alignment.bottomCenter, + colors: [ + Color(0xFFFF6D6D), + Color(0xFFFF2C2C), + ], + ), + borderRadius: BorderRadius.circular(17), + ), + child: Center( + child: Text( + '前往授权', + style: TextStyle(fontSize: 12, color: Colors.white), + ), + ), + ), + onTap: () { + Navigator.pop(context, true); + }, + ), + ], + ), + ), + onTap: () {}, + ), + ), + ), + onTap: () { + Navigator.pop(context); + }, + ); + } +} diff --git a/lib/util/pdd_auth/pdd_auth_model.dart b/lib/util/pdd_auth/pdd_auth_model.dart new file mode 100644 index 0000000..29d9f8d --- /dev/null +++ b/lib/util/pdd_auth/pdd_auth_model.dart @@ -0,0 +1,48 @@ +class PddAuthModel { + String isPop; + String noOpenAppUrl; + String openAppUrl; + String schemaUrl; + String ico; + String btnIco; + String title; + String info; + String btnStr; + + PddAuthModel( + {this.isPop, + this.noOpenAppUrl, + this.openAppUrl, + this.schemaUrl, + this.ico, + this.btnIco, + this.title, + this.info, + this.btnStr}); + + PddAuthModel.fromJson(Map json) { + isPop = json['is_pop']; + noOpenAppUrl = json['no_open_app_url']; + openAppUrl = json['open_app_url']; + schemaUrl = json['schema_url']; + ico = json['ico']; + btnIco = json['btn_ico']; + title = json['title']; + info = json['info']; + btnStr = json['btn_str']; + } + + Map toJson() { + final Map data = new Map(); + data['is_pop'] = this.isPop; + data['no_open_app_url'] = this.noOpenAppUrl; + data['open_app_url'] = this.openAppUrl; + data['schema_url'] = this.schemaUrl; + data['ico'] = this.ico; + data['btn_ico'] = this.btnIco; + data['title'] = this.title; + data['info'] = this.info; + data['btn_str'] = this.btnStr; + return data; + } +} diff --git a/lib/util/pdd_auth/pdd_auth_repository.dart b/lib/util/pdd_auth/pdd_auth_repository.dart new file mode 100644 index 0000000..cac5888 --- /dev/null +++ b/lib/util/pdd_auth/pdd_auth_repository.dart @@ -0,0 +1,59 @@ + +import 'package:flutter/cupertino.dart'; +import 'package:zhiying_comm/util/pdd_auth/pdd_auth_model.dart'; +import 'package:zhiying_comm/zhiying_comm.dart'; + +class PddAuthRepository { + /// + /// 缓存style Data + /// 多加一个goods_id 用于区分数据 + Future cacheData(String isShare) async { + try { + var result = await NetUtil.post('/api/v1/pdd/check/$isShare', + method: NetMethod.GET, + cache: true, + ); + if (NetUtil.isSuccess(result) && !EmptyUtil.isEmpty(result[GlobalConfig.HTTP_RESPONSE_KEY_DATA])) { + return true; + } + } catch (e, s) { + Logger.error(e, s); + } + return false; + } + + /// + /// 获取网络数据 + /// + Future fetchNetData({@required String isShare}) async{ + try { + var result = await NetUtil.post('/api/v1/pdd/check/$isShare', method: NetMethod.GET); + if (!EmptyUtil.isEmpty(result) && !EmptyUtil.isEmpty(result[GlobalConfig.HTTP_RESPONSE_KEY_DATA])) { + PddAuthModel model = PddAuthModel.fromJson(result[GlobalConfig.HTTP_RESPONSE_KEY_DATA]); + return model; + } + } catch (e, s) { + Logger.error(e, s); + } + return null; + } + + /// + /// 获取缓存的data + /// 多加一个goods_id 用于区分数据 + /// + Future fetchCacheData(String isShare) async { + try { + var result = await NetUtil.getRequestCachedData('/api/v1/pdd/check/$isShare'); + if (!EmptyUtil.isEmpty(result)) { + PddAuthModel model = PddAuthModel.fromJson(result); + if (!EmptyUtil.isEmpty(model)) { + return model; + } + } + } catch (e, s) { + Logger.error(e, s); + } + return null; + } +} \ No newline at end of file diff --git a/lib/util/turn_chain/turn_chain_util.dart b/lib/util/turn_chain/turn_chain_util.dart index edd4021..2aa6c09 100644 --- a/lib/util/turn_chain/turn_chain_util.dart +++ b/lib/util/turn_chain/turn_chain_util.dart @@ -12,6 +12,7 @@ import 'package:zhiying_comm/util/empty_util.dart'; import 'package:zhiying_comm/util/global_config.dart'; import 'package:zhiying_comm/util/log/let_log.dart'; import 'package:zhiying_comm/util/net_util.dart'; +import 'package:zhiying_comm/util/pdd_auth/pdd_auth.dart'; import 'package:zhiying_comm/util/taobao/taobao_auth.dart'; import 'package:zhiying_comm/util/turn_chain/turn_chain_dialog_repository.dart'; import 'package:zhiying_comm/util/turn_chain/turn_chain_style_model.dart'; @@ -56,8 +57,8 @@ class TurnChainUtil { /// 名片全能王: camcard:// /// static Future openReceiveCoupon(BuildContext context, UserInfoModel userInfoModel, String goodsId, String provider, Map data, {bool isFree = false}) async { - ///iOS 审核状态 - String is_ios_review = await SharedPreferencesUtil.getStringValue(GlobalConfig.IS_IOS_REVIEW, defaultVal: '0'); + /// iOS 审核状态 + // String is_ios_review = await SharedPreferencesUtil.getStringValue(GlobalConfig.IS_IOS_REVIEW, defaultVal: '0'); /// 1、先判断是否登陆 if (EmptyUtil.isEmpty(userInfoModel) || EmptyUtil.isEmpty(userInfoModel?.token)) { @@ -78,111 +79,239 @@ class TurnChainUtil { String appUrl = result['app_url']; String webUrl = result['no_open_app_url']; - /// 4、根据渠道进行不同的跳转 - switch (provider) { - case GlobalConfig.PROVIDER_TB: - case GlobalConfig.PROVIDER_TM: - if (!EmptyUtil.isEmpty(openAppUrl)) { - TradeResult tradeResult; - if (Platform.isAndroid) { - // print("跳转链接"+openAppUrl); - tradeResult = await FlutterAlibc.openByUrl(url: openAppUrl, backUrl: "alisdk://"); - } else if (Platform.isIOS) { - if (is_ios_review == '1') { - print('iOS审核:' + is_ios_review); - RouterUtil.openWebview(webUrl, context); - } else { - tradeResult = await FlutterAlibc.openByUrl(url: openAppUrl); - } - } - Logger.debug('taobao result = ${tradeResult.errorCode} ${tradeResult.errorMessage} '); - } else if (!EmptyUtil.isEmpty(webUrl)) { - RouterUtil.openWebview(webUrl, context); - } else { - Fluttertoast.cancel(); - Fluttertoast.showToast(msg: '购买链接不存在'); - } + bool jumpResult = await jumpNative(context, provider: provider, openAppUrl: openAppUrl, appUrl: appUrl, webUrl: webUrl); + if (!jumpResult) { + Fluttertoast.cancel(); + Fluttertoast.showToast(msg: '购买链接不存在'); + } - break; - case GlobalConfig.PROVIDER_JD: - String tempURLScheme1 = 'openapp.jdmobile://virtual?params=%'; - String tempURLScheme2 = 'openapp.jdmobile://'; - if (!EmptyUtil.isEmpty(openAppUrl) && await canLaunch(tempURLScheme1) || await canLaunch(tempURLScheme2)) { - Jdsdk.openUrl(url: openAppUrl); - } else if (!EmptyUtil.isEmpty(webUrl)) { - RouterUtil.openWebview(webUrl, context); - } else { - Fluttertoast.cancel(); - Fluttertoast.showToast(msg: '购买链接不存在'); - } - break; - case GlobalConfig.PROVIDER_KL: - case GlobalConfig.PROVIDER_PDD: - case GlobalConfig.PROVIDER_SN: - bool launchable = await canLaunch(appUrl); - if (Platform.isIOS) { - launchable = await launch(appUrl); + // /// 4、根据渠道进行不同的跳转 + // switch (provider) { + // case GlobalConfig.PROVIDER_TB: + // case GlobalConfig.PROVIDER_TM: + // if (!EmptyUtil.isEmpty(openAppUrl)) { + // TradeResult tradeResult; + // if (Platform.isAndroid) { + // // print("跳转链接"+openAppUrl); + // tradeResult = await FlutterAlibc.openByUrl(url: openAppUrl, backUrl: "alisdk://"); + // } else if (Platform.isIOS) { + // if (is_ios_review == '1') { + // print('iOS审核:' + is_ios_review); + // RouterUtil.openWebview(webUrl, context); + // } else { + // tradeResult = await FlutterAlibc.openByUrl(url: openAppUrl); + // } + // } + // Logger.debug('taobao result = ${tradeResult.errorCode} ${tradeResult.errorMessage} '); + // } else if (!EmptyUtil.isEmpty(webUrl)) { + // RouterUtil.openWebview(webUrl, context); + // } else { + // Fluttertoast.cancel(); + // Fluttertoast.showToast(msg: '购买链接不存在'); + // } + // + // break; + // case GlobalConfig.PROVIDER_JD: + // String tempURLScheme1 = 'openapp.jdmobile://virtual?params=%'; + // String tempURLScheme2 = 'openapp.jdmobile://'; + // if (!EmptyUtil.isEmpty(openAppUrl) && await canLaunch(tempURLScheme1) || await canLaunch(tempURLScheme2)) { + // Jdsdk.openUrl(url: openAppUrl); + // } else if (!EmptyUtil.isEmpty(webUrl)) { + // RouterUtil.openWebview(webUrl, context); + // } else { + // Fluttertoast.cancel(); + // Fluttertoast.showToast(msg: '购买链接不存在'); + // } + // break; + // case GlobalConfig.PROVIDER_KL: + // case GlobalConfig.PROVIDER_PDD: + // case GlobalConfig.PROVIDER_SN: + // bool launchable = await canLaunch(appUrl); + // if (Platform.isIOS) { + // launchable = await launch(appUrl); + // } + // if (launchable) { + // if (!Platform.isIOS) { + // if (appUrl.startsWith("suning")) { + // RouterUtil.openWebview(webUrl, context); + // } else { + // RouterUtil.openWebview(webUrl, context); + // } + // } + // } else if (!EmptyUtil.isEmpty(webUrl)) { + // Logger.log('打开${provider} webUrl, url = ${webUrl}'); + // RouterUtil.openWebview(webUrl, context); + // } else { + // Fluttertoast.cancel(); + // Fluttertoast.showToast(msg: '购买链接不存在'); + // } + // break; + // case GlobalConfig.PROVIDER_VIP: + // bool launchable = await canLaunch(appUrl); + // if (Platform.isIOS) { + // launchable = await launch(appUrl); + // } + // if (launchable) { + // if (!Platform.isIOS) { + // await launch(appUrl); + // } + // } else if (!EmptyUtil.isEmpty(webUrl)) { + // Logger.log('打开${provider} webUrl, url = ${webUrl}'); + // RouterUtil.openWebview(webUrl, context); + // } else { + // Fluttertoast.cancel(); + // Fluttertoast.showToast(msg: '购买链接不存在'); + // } + // break; + // default: + // if (!EmptyUtil.isEmpty(openAppUrl)) { + // bool launchable = await canLaunch(appUrl); + // if (launchable) { + // launchable = await launch(appUrl); + // } + // if (launchable) { + // if (!Platform.isIOS) { + // RouterUtil.openWebview(webUrl, context); + // } + // } else if (!EmptyUtil.isEmpty(webUrl)) { + // Logger.log('打开${provider} webUrl, url = ${webUrl}'); + // RouterUtil.openWebview(webUrl, context); + // } else { + // Fluttertoast.cancel(); + // Fluttertoast.showToast(msg: '购买链接不存在'); + // } + // } else { + // Fluttertoast.cancel(); + // Fluttertoast.showToast(msg: '购买链接不存在'); + // } + // break; + // } + } else { + Fluttertoast.cancel(); + Fluttertoast.showToast(msg: '购买链接不存在'); + } + } + + /// + /// 跳转原生或者webView打开购买链接 + /// + /// provider: 商品渠道 + /// openAppUrl: 打开商品链接 + /// appUrl: 打开商品链接,不是Http开头,类似 taobao://, opennapp.jdxxx:// + /// webUrl: 打开商品WebView链接 + /// + static Future jumpNative(BuildContext context, {String provider = GlobalConfig.PROVIDER_TB, String openAppUrl, String appUrl, String webUrl}) async { + bool rlt = false; + ///iOS 审核状态 + String isIosReview = await SharedPreferencesUtil.getStringValue(GlobalConfig.IS_IOS_REVIEW, defaultVal: '0'); + + /// 4、根据渠道进行不同的跳转 + switch (provider) { + case GlobalConfig.PROVIDER_TB: + case GlobalConfig.PROVIDER_TM: + if (!EmptyUtil.isEmpty(openAppUrl)) { + TradeResult tradeResult; + if (Platform.isAndroid) { + tradeResult = await FlutterAlibc.openByUrl(url: openAppUrl, backUrl: "alisdk://"); + rlt = true; + } else if (Platform.isIOS) { + if (isIosReview == '1') { + print('iOS审核:' + isIosReview); + RouterUtil.openWebview(webUrl, context); + rlt = true; + } else { + tradeResult = await FlutterAlibc.openByUrl(url: openAppUrl); + rlt = true; + } } - if (launchable) { - if (!Platform.isIOS) { - if (appUrl.startsWith("suning")) { - RouterUtil.openWebview(webUrl, context); - } else { - RouterUtil.openWebview(webUrl, context); - } + Logger.debug('taobao result = ${tradeResult.errorCode} ${tradeResult.errorMessage} '); + } else if (!EmptyUtil.isEmpty(webUrl)) { + RouterUtil.openWebview(webUrl, context); + rlt = true; + } else { + rlt = false; + } + break; + case GlobalConfig.PROVIDER_JD: + String tempURLScheme1 = 'openapp.jdmobile://virtual?params=%'; + String tempURLScheme2 = 'openapp.jdmobile://'; + if (!EmptyUtil.isEmpty(openAppUrl) && await canLaunch(tempURLScheme1) || await canLaunch(tempURLScheme2)) { + Jdsdk.openUrl(url: openAppUrl); + rlt = true; + } else if (!EmptyUtil.isEmpty(webUrl)) { + RouterUtil.openWebview(webUrl, context); + rlt = true; + } else { + rlt = false; + } + break; + case GlobalConfig.PROVIDER_KL: + case GlobalConfig.PROVIDER_PDD: + case GlobalConfig.PROVIDER_SN: + bool launchable = await canLaunch(appUrl); + if (Platform.isIOS) { + launchable = await launch(appUrl); + } + if (launchable) { + if (!Platform.isIOS) { + if (appUrl.startsWith("suning")) { + RouterUtil.openWebview(webUrl, context); + rlt = true; + } else { + RouterUtil.openWebview(webUrl, context); + rlt = true; } - } else if (!EmptyUtil.isEmpty(webUrl)) { - Logger.log('打开${provider} webUrl, url = ${webUrl}'); - RouterUtil.openWebview(webUrl, context); - } else { - Fluttertoast.cancel(); - Fluttertoast.showToast(msg: '购买链接不存在'); } - break; - case GlobalConfig.PROVIDER_VIP: + } else if (!EmptyUtil.isEmpty(webUrl)) { + Logger.log('打开${provider} webUrl, url = ${webUrl}'); + RouterUtil.openWebview(webUrl, context); + rlt = true; + } else { + rlt = false; + } + break; + case GlobalConfig.PROVIDER_VIP: + bool launchable = await canLaunch(appUrl); + if (Platform.isIOS) { + launchable = await launch(appUrl); + } + if (launchable) { + if (!Platform.isIOS) { + await launch(appUrl); + rlt = true; + } + } else if (!EmptyUtil.isEmpty(webUrl)) { + Logger.log('打开${provider} webUrl, url = ${webUrl}'); + RouterUtil.openWebview(webUrl, context); + rlt = true; + } else { + rlt = false; + } + break; + default: + if (!EmptyUtil.isEmpty(openAppUrl)) { bool launchable = await canLaunch(appUrl); - if (Platform.isIOS) { + if (launchable) { launchable = await launch(appUrl); } if (launchable) { if (!Platform.isIOS) { - await launch(appUrl); + RouterUtil.openWebview(webUrl, context); + rlt = true; } } else if (!EmptyUtil.isEmpty(webUrl)) { Logger.log('打开${provider} webUrl, url = ${webUrl}'); RouterUtil.openWebview(webUrl, context); + rlt = true; } else { - Fluttertoast.cancel(); - Fluttertoast.showToast(msg: '购买链接不存在'); - } - break; - default: - if (!EmptyUtil.isEmpty(openAppUrl)) { - bool launchable = await canLaunch(appUrl); - if (launchable) { - launchable = await launch(appUrl); - } - if (launchable) { - if (!Platform.isIOS) { - RouterUtil.openWebview(webUrl, context); - } - } else if (!EmptyUtil.isEmpty(webUrl)) { - Logger.log('打开${provider} webUrl, url = ${webUrl}'); - RouterUtil.openWebview(webUrl, context); - } else { - Fluttertoast.cancel(); - Fluttertoast.showToast(msg: '购买链接不存在'); - } - } else { - Fluttertoast.cancel(); - Fluttertoast.showToast(msg: '购买链接不存在'); + rlt = false; } - break; - } - } else { - Fluttertoast.cancel(); - Fluttertoast.showToast(msg: '购买链接不存在'); + } else { + rlt = false; + } + break; } + return Future.value(rlt); } /// @@ -203,11 +332,18 @@ class TurnChainUtil { } /// 2、如果是淘宝,判断是否授权 - if (provider == GlobalConfig.PROVIDER_TB && !userInfoModel.isTBAuth) { + if (provider == GlobalConfig.PROVIDER_TB || provider == GlobalConfig.PROVIDER_TM && !userInfoModel.isTBAuth) { TaobaoAuth.auth(context); return null; } + /// 2.5 如果是拼多多,判断是否需要授权 + if(provider == GlobalConfig.PROVIDER_PDD) { + // 如果为true,说明需要进行授权,停止执行。 + bool result = await PddAuth.auth(context); + if (result) return null; + } + /// 3、获取转链的结果 Map result = await getTurnChainResult(context, goodsId, provider, data, isShare: true); if (!EmptyUtil.isEmpty(result) && !EmptyUtil.isEmpty(result['open_app_url'])) { diff --git a/pubspec.yaml b/pubspec.yaml index bdd2135..6a435b7 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -129,6 +129,7 @@ flutter: # To add assets to your plugin package, add an assets section, like this: assets: - assets/images/icon_taobao.png + - assets/images/icon_pdd.png # # For details regarding assets in packages, see