diff --git a/example/android/app/build.gradle b/example/android/app/build.gradle
index 42522d5..972d31e 100644
--- a/example/android/app/build.gradle
+++ b/example/android/app/build.gradle
@@ -34,7 +34,7 @@ apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle"
android {
- compileSdkVersion 28
+ compileSdkVersion 29
lintOptions {
disable 'InvalidPackage'
@@ -44,7 +44,7 @@ android {
defaultConfig {
applicationId "cn.zhios.zhiying"
minSdkVersion 21
- targetSdkVersion 28
+ targetSdkVersion 29
versionCode 1
versionName "1.0"
aaptOptions.cruncherEnabled = false
@@ -157,9 +157,33 @@ flutter {
}
dependencies {
+ implementation 'androidx.appcompat:appcompat:1.2.0'
+ implementation 'androidx.constraintlayout:constraintlayout:2.0.2'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'androidx.test:runner:1.1.1'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.1'
+
+//登陆
+ implementation 'com.ali.auth.sdk:alibabauth_core:2.0.0.11@aar'
+ implementation 'com.ali.auth.sdk:alibabauth_ui:2.0.0.11@aar'
+ implementation 'com.ali.auth.sdk:alibabauth_ext:2.0.0.11@aar'
+ //安全组件
+ implementation 'com.taobao.android:securityguardaar3:5.4.171@aar'
+ implementation 'com.taobao.android:securitybodyaar3:5.4.99@aar'
+ implementation 'com.taobao.android:avmpaar3:5.4.36@aar'
+ implementation 'com.taobao.android:sgmiddletieraar3:5.4.9@aar'
+ //Mtop
+ implementation 'com.taobao.android:mtopsdk_allinone_open:3.1.2.5@jar'
+ //applink
+ implementation 'com.alibaba.sdk.android:alibc_link_partner:4.1.15@aar'
+ //ut
+ implementation 'com.taobao.android:utdid4all:1.5.2'
+ implementation 'com.alibaba.mtl:app-monitor-sdk:2.6.4.5_for_bc'
+ // 电商基础组件
+ implementation 'com.alibaba.sdk.android:AlibcTradeCommon:4.0.0.16@aar'
+ implementation 'com.alibaba.sdk.android:AlibcTradeBiz:4.0.0.16@aar'
+ implementation 'com.alibaba.sdk.android:nb_trade:4.0.0.16@aar'
+ implementation 'com.alibaba:fastjson:1.2.41@jar'
}
diff --git a/example/android/app/src/main/AndroidManifest.xml b/example/android/app/src/main/AndroidManifest.xml
index f488c56..b5031d2 100644
--- a/example/android/app/src/main/AndroidManifest.xml
+++ b/example/android/app/src/main/AndroidManifest.xml
@@ -1,40 +1,51 @@
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
+
+
+
+
+
+
+
-
+
-
-
-
-
-
-
-
+
\ No newline at end of file
diff --git a/example/android/app/src/main/java/cn/zhios/zhiying_base_widget_example/MainActivity.java b/example/android/app/src/main/java/cn/zhios/zhiying_base_widget_example/MainActivity.java
index ad201e5..e2bb010 100644
--- a/example/android/app/src/main/java/cn/zhios/zhiying_base_widget_example/MainActivity.java
+++ b/example/android/app/src/main/java/cn/zhios/zhiying_base_widget_example/MainActivity.java
@@ -38,7 +38,8 @@ public class MainActivity extends FlutterActivity implements ZhiyingFlutterCommN
@Override
public Map getSetting() {
Map map = new HashMap();
- map.put("domain", "http://inapi.izhyin.cn"); //"http://120.76.175.204:8989");
+ //map.put("domain", "http://inapi.izhyin.cn"); //"http://120.76.175.204:8989");
+ map.put("domain", "http://192.168.0.113:5000");
map.put("master_id", "123456");
map.put("secret_key", "123456");
// map.put("token", "123465");
diff --git a/example/android/app/src/main/java/cn/zhios/zhiying_base_widget_example/TestActivity.java b/example/android/app/src/main/java/cn/zhios/zhiying_base_widget_example/TestActivity.java
new file mode 100644
index 0000000..c552dce
--- /dev/null
+++ b/example/android/app/src/main/java/cn/zhios/zhiying_base_widget_example/TestActivity.java
@@ -0,0 +1,108 @@
+package cn.zhios.zhiying_base_widget_example;
+
+import androidx.appcompat.app.AppCompatActivity;
+
+import android.app.Activity;
+import android.content.Intent;
+import android.os.Bundle;
+import android.util.Log;
+import android.view.View;
+import android.webkit.WebChromeClient;
+import android.webkit.WebView;
+import android.webkit.WebViewClient;
+import android.widget.TextView;
+import android.widget.Toast;
+
+import com.alibaba.baichuan.android.trade.AlibcTrade;
+import com.alibaba.baichuan.android.trade.AlibcTradeSDK;
+import com.alibaba.baichuan.android.trade.callback.AlibcTradeCallback;
+import com.alibaba.baichuan.android.trade.callback.AlibcTradeInitCallback;
+import com.alibaba.baichuan.android.trade.model.AlibcShowParams;
+import com.alibaba.baichuan.trade.biz.context.AlibcTradeResult;
+import com.alibaba.baichuan.trade.biz.core.taoke.AlibcTaokeParams;
+import com.alibaba.baichuan.trade.biz.login.AlibcLogin;
+import com.alibaba.baichuan.trade.biz.login.AlibcLoginCallback;
+import com.alibaba.baichuan.trade.common.utils.AlibcLogger;
+
+import java.util.HashMap;
+
+public class TestActivity extends Activity {
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_test);
+ TextView aliBcTV = findViewById(R.id.tv_aliBc);
+ AlibcTradeSDK.asyncInit(this.getApplication(), new AlibcTradeInitCallback() {
+ @Override
+ public void onSuccess() {
+ Toast.makeText(TestActivity.this, "阿里百川注册成功", Toast.LENGTH_LONG).show();
+ }
+
+ @Override
+ public void onFailure(int i, String s) {
+ Toast.makeText(TestActivity.this, "阿里百川注册失败" + s, Toast.LENGTH_LONG).show();
+ }
+ });
+
+ aliBcTV.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ AlibcLogin.getInstance().showLogin(new AlibcLoginCallback() {
+ @Override
+ public void onSuccess(int i, String s, String s1) {
+ Toast.makeText(TestActivity.this, "授权成功" + s, Toast.LENGTH_LONG).show();
+ }
+
+ @Override
+ public void onFailure(int i, String s) {
+ Toast.makeText(TestActivity.this, "登陆失败" + s, Toast.LENGTH_LONG).show();
+ }
+ });
+ }
+ });
+
+ findViewById(R.id.tv_open_detail).setOnClickListener(new View.OnClickListener() {
+ AlibcShowParams showParams = new AlibcShowParams();
+ @Override
+ public void onClick(View v) {
+// // 以显示传入url的方式打开页面(第二个参数是套件名称)
+// AlibcTrade.openByUrl(TestActivity.this, "", "http://www.izhim.com/comm/tb_callback.php?_ctrl=domain&domain_state=MTI2&domain_return_url=aHR0cDovLzE5Mi4xNjguMC4xMTM6NTAwMC9hcGkvdjEvdGFvYmFvL2F1dGgvY2FsbGJhY2s%2FdGltZT0xNjAyNDk4MjA3", new WebView(TestActivity.this),
+// new WebViewClient(), new WebChromeClient(), showParams,
+// new AlibcTaokeParams("","",""), new HashMap(), new AlibcTradeCallback() {
+// @Override
+// public void onTradeSuccess(AlibcTradeResult tradeResult) {
+// AlibcLogger.i("", "request success");
+// }
+// @Override
+// public void onFailure(int code, String msg) {
+// AlibcLogger.e("", "code=" + code + ", msg=" + msg);
+// if (code == -1) {
+// Toast.makeText(TestActivity.this, msg, Toast.LENGTH_SHORT).show();
+// }
+// }
+// });
+
+ if (!AlibcLogin.getInstance().isLogin()) {
+
+ AlibcLogin.getInstance().showLogin(new AlibcLoginCallback() {
+ @Override
+ public void onSuccess(int i, String s, String s1) {
+ startActivity(new Intent(TestActivity.this,WebActivity.class));
+ }
+
+ @Override
+ public void onFailure(int i, String s) {
+ Log.d("阿里百川授权失败",s);
+ }
+ });
+ } else {
+ startActivity(new Intent(TestActivity.this,WebActivity.class));
+ }
+
+
+ }
+ });
+
+ }
+}
\ No newline at end of file
diff --git a/example/android/app/src/main/java/cn/zhios/zhiying_base_widget_example/WebActivity.java b/example/android/app/src/main/java/cn/zhios/zhiying_base_widget_example/WebActivity.java
new file mode 100644
index 0000000..eb948a6
--- /dev/null
+++ b/example/android/app/src/main/java/cn/zhios/zhiying_base_widget_example/WebActivity.java
@@ -0,0 +1,521 @@
+package cn.zhios.zhiying_base_widget_example;
+
+import android.annotation.SuppressLint;
+import android.app.Activity;
+import android.content.ComponentName;
+import android.content.Intent;
+import android.graphics.Bitmap;
+import android.net.Uri;
+import android.net.http.SslError;
+import android.os.Bundle;
+import android.util.Log;
+import android.util.Patterns;
+import android.view.View;
+import android.webkit.GeolocationPermissions;
+import android.webkit.JavascriptInterface;
+import android.webkit.SslErrorHandler;
+import android.webkit.ValueCallback;
+import android.webkit.WebChromeClient;
+import android.webkit.WebResourceError;
+import android.webkit.WebResourceRequest;
+import android.webkit.WebSettings;
+import android.webkit.WebView;
+import android.webkit.WebViewClient;
+import android.widget.Toast;
+
+import com.alibaba.baichuan.android.trade.AlibcTrade;
+import com.alibaba.baichuan.android.trade.callback.AlibcTradeCallback;
+import com.alibaba.baichuan.android.trade.model.AlibcShowParams;
+import com.alibaba.baichuan.trade.biz.context.AlibcTradeResult;
+import com.alibaba.baichuan.trade.biz.core.taoke.AlibcTaokeParams;
+import com.alibaba.baichuan.trade.biz.login.AlibcLogin;
+import com.alibaba.baichuan.trade.biz.login.AlibcLoginCallback;
+
+import java.util.HashMap;
+import java.util.Map;
+
+public class WebActivity extends Activity {
+ WebView mainWeb;
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_web_bc);
+ mainWeb = findViewById(R.id.webview_main);
+ mainWeb.getSettings().setJavaScriptEnabled(true);
+ mainWeb.getSettings().setDomStorageEnabled(true);
+ mainWeb.getSettings().setCacheMode(WebSettings.LOAD_DEFAULT);
+ mainWeb.getSettings().setLoadWithOverviewMode(true);
+ mainWeb.getSettings().setAllowFileAccess(true);
+ mainWeb.getSettings().setDatabaseEnabled(true);
+ MyWebClient myWebClient = new MyWebClient();
+ MyWebChromeClient myWebChromeClient = new MyWebChromeClient();
+ mainWeb.setWebViewClient(myWebClient);
+ mainWeb.setWebChromeClient(myWebChromeClient);
+
+ Map exParams = new HashMap<>();//yhhpass参数
+// AlibcTaokeParams alibcTaokeParams = new AlibcTaokeParams("", "", "");
+// alibcTaokeParams.pid = SPUtils.getPrefString(mActivity, Pkey.pid, "");
+// alibcTaokeParams.adzoneid = SPUtils.getPrefString(mActivity, Pkey.APP_adzoneId, "");
+// alibcTaokeParams.extraParams = new HashMap<>();
+// alibcTaokeParams.extraParams.put("taokeAppkey", SPUtils.getPrefString(mActivity, Pkey.APP_alliance_appkey, ""));
+ AlibcShowParams showParams = new AlibcShowParams();
+ showParams.setBackUrl("alisdk://");
+ AlibcTrade.openByUrl(WebActivity.this, "", "http://www.izhim.com/comm/tb_callback.php?_ctrl=domain&domain_state=MTI2&domain_return_url=aHR0cDovLzE5Mi4xNjguMC4xMTM6NTAwMC9hcGkvdjEvdGFvYmFvL2F1dGgvY2FsbGJhY2s%2FdGltZT0xNjAyNDk4MjA3",
+ mainWeb, new MyBaichuanWebClient(), new MyWebChromeClient(), showParams,
+ new AlibcTaokeParams("", "", ""), exParams, new AlibcTradeCallback() {
+ @Override
+ public void onTradeSuccess(AlibcTradeResult alibcTradeResult) {
+
+ }
+
+ @Override
+ public void onFailure(int i, String s) {
+
+ }
+ });
+ }
+
+ //用于百川授权的简化的WebClient
+ @SuppressLint("AddJavascriptInterface")
+ private class MyBaichuanWebClient extends WebViewClient {
+ @SuppressLint("AddJavascriptInterface")
+ @Override
+ public boolean shouldOverrideUrlLoading(WebView view, final String url) {
+ Log.d("百川拦截", url);
+ //绑定会员关系时获取网页内容关闭网页
+ if (url.contains("comm/tbredirect.php") && !url.contains("oauth.m.taobao.com") && url.contains("track_id")) {
+ Log.d("百川系时获取网页内容关闭网页", url);
+ mainWeb.addJavascriptInterface(new InJavaScriptLocalObj(), "java_obj");
+
+ }
+ if (url.contains("oauth.taobao.com/authorize") || url.contains("oauth.m.taobao.com/authorize")) {
+ //渠道授权改动测试
+ Log.d("百川渠道授权改动测试", url);
+ Map exParams = new HashMap<>();//yhhpass参数
+ AlibcShowParams showParams = new AlibcShowParams();
+ showParams.setBackUrl("alisdk://");
+ AlibcTrade.openByUrl(WebActivity.this, "", url,
+ mainWeb, new MyBaichuanWebClient(), new MyWebChromeClient(), showParams,
+ new AlibcTaokeParams("", "", ""), exParams, new AlibcTradeCallback() {
+ @Override
+ public void onTradeSuccess(AlibcTradeResult alibcTradeResult) {
+ Log.d("cg", alibcTradeResult.toString());
+ }
+
+ @Override
+ public void onFailure(int i, String s) {
+ Log.d("sb", s);
+ }
+ });
+ }
+ return super.shouldOverrideUrlLoading(view, url);
+ }
+
+
+ @Override
+ public void onPageStarted(WebView view, String url, Bitmap favicon) {
+ // WebLoad.setVisibility(View.GONE);
+ mainWeb.setVisibility(View.GONE);
+ //开始加载设置为透明
+ super.onPageStarted(view, url, favicon);
+ }
+
+ @Override
+ public void onReceivedError(WebView view, WebResourceRequest request, WebResourceError error) {
+ super.onReceivedError(view, request, error);
+ }
+
+ @Override
+ public void onPageFinished(WebView view, String url) {
+ // WebLoad.setVisibility(View.GONE);
+ mainWeb.setVisibility(View.VISIBLE);
+ // 获取页面内容
+ view.loadUrl("javascript:window.java_obj.showSource("
+ + "document.documentElement.innerText);");
+
+ // 获取解析
+ view.loadUrl("javascript:window.java_obj.showDescription("
+ + "document.querySelector('meta[name=\"share-description\"]').getAttribute('content')"
+ + ");");
+ // quanyikaText();
+ super.onPageFinished(view, url);
+ }
+
+ //处理 [Android]用WebView访问证书有问题的SSL网页
+ //http://blog.sina.com.cn/s/blog_4cd978f90102vrxk.html
+ @Override
+ public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
+ handler.proceed();
+ }
+
+ }
+
+ /**
+ * 绑定渠道
+ */
+ private final class InJavaScriptLocalObj {
+ @JavascriptInterface
+ public void showSource(final String html) {
+ //获取网页内容,用于判断是否成功绑定关系id
+
+ try {
+ if (html.contains("成功")) {//成功
+ Toast.makeText(WebActivity.this, "授权成功", Toast.LENGTH_SHORT).show();
+ finish();
+ } else {//失败
+ mainWeb.setAlpha(0);
+
+ }
+
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+
+ @JavascriptInterface
+ public void showDescription(String str) {
+
+
+ }
+ }
+
+
+ public class MyWebChromeClient extends WebChromeClient {
+
+ private CustomViewCallback mCustomViewCallback;
+ // 横屏时,显示视频的view
+ private View mCustomView;
+
+ // 点击全屏按钮时,调用的方法
+ @Override
+ public void onShowCustomView(View view, CustomViewCallback callback) {
+ super.onShowCustomView(view, callback);
+ //isFullPlayVedio = true;
+ //如果view 已经存在,则隐藏
+ if (mCustomView != null) {
+ callback.onCustomViewHidden();
+ return;
+ }
+
+ mCustomView = view;
+ mCustomView.setVisibility(View.VISIBLE);
+ mCustomViewCallback = callback;
+
+
+ }
+
+ // 取消全屏调用的方法
+ @Override
+ public void onHideCustomView() {
+ super.onHideCustomView();
+
+ if (mCustomView == null) {
+ return;
+ }
+ mCustomView.setVisibility(View.GONE);
+
+ mCustomView = null;
+
+ try {
+ mCustomViewCallback.onCustomViewHidden();
+ } catch (Exception e) {
+ }
+// setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);//竖屏
+
+
+ }
+
+ @Override
+ public void onProgressChanged(WebView view, int newProgress) {
+
+ }
+
+ @Override
+ public void onReceivedTitle(WebView view, String title) {
+ super.onReceivedTitle(view, title);
+// Logger.wtf("我的url" + view.getUrl());
+ String url = view.getUrl();
+ if (Patterns.WEB_URL.matcher(title).matches()) {
+ //网址不显示为标题
+
+ } else {
+
+ //不是网址
+ if (!url.contains("api.ejiayou.com/pages/platform/soulList/index.html")) {
+
+ }
+ }
+ }
+
+ @Override
+ public void onGeolocationPermissionsShowPrompt(final String origin, final GeolocationPermissions.Callback callback) {
+
+
+ super.onGeolocationPermissionsShowPrompt(origin, callback);
+ }
+
+
+ // For Android 3.0+
+ public void openFileChooser(ValueCallback uploadMsg, String acceptType) {
+
+
+ }
+
+ // For Android < 3.0
+ public void openFileChooser(ValueCallback uploadMsg) {
+ openFileChooser(uploadMsg, "");
+ }
+
+ // For Android > 4.1.1
+ public void openFileChooser(ValueCallback uploadMsg,
+ String acceptType, String capture) {
+
+ openFileChooser(uploadMsg, acceptType);
+ }
+
+ // For Android > 5.0
+ @Override
+ public boolean onShowFileChooser(WebView webView,
+ ValueCallback filePathCallback,
+ FileChooserParams fileChooserParams) {
+
+ return true;
+ }
+
+
+ }
+
+ @SuppressLint("AddJavascriptInterface")
+ private class MyWebClient extends WebViewClient {
+
+ @SuppressLint("AddJavascriptInterface")
+ @Override
+ public boolean shouldOverrideUrlLoading(WebView view, final String url) {
+
+ if (url.startsWith("tel:")) {
+ startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(url)));
+ return true;
+ }
+ if (url.startsWith("bdnetdisk:")) {
+ return true;
+ }
+
+
+ if (url.contains("tmast://")) {
+ try {
+ Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
+ startActivity(intent);
+ } catch (Exception e) {
+
+ }
+ return true;
+ }
+ if (url.startsWith("http://ditu.amap.com") ||
+ url.startsWith("https://ditu.amap.com")) {
+ return true;
+ }
+ if (url.contains("oauth.taobao.com/authorize") || url.contains("oauth.m.taobao.com/authorize")) {
+
+// mainWeb.addJavascriptInterface(new InJavaScriptLocadeUpgralObj(), "java_obj");
+ Map exParams = new HashMap<>();//yhhpass参数
+// AlibcTaokeParams alibcTaokeParams = new AlibcTaokeParams("", "", "");
+// alibcTaokeParams.pid = SPUtils.getPrefString(mActivity, Pkey.pid, "");
+// alibcTaokeParams.adzoneid = SPUtils.getPrefString(mActivity, Pkey.APP_adzoneId, "");
+// alibcTaokeParams.extraParams = new HashMap<>();
+// alibcTaokeParams.extraParams.put("taokeAppkey", SPUtils.getPrefString(mActivity, Pkey.APP_alliance_appkey, ""));
+ AlibcShowParams showParams = new AlibcShowParams();
+ showParams.setBackUrl("alisdk://");
+ AlibcTrade.openByUrl(WebActivity.this, "", url, mainWeb, new MyBaichuanWebClient(), new MyWebChromeClient(), showParams,
+ new AlibcTaokeParams("", "", ""), exParams, new AlibcTradeCallback() {
+ @Override
+ public void onTradeSuccess(AlibcTradeResult alibcTradeResult) {
+
+ }
+
+ @Override
+ public void onFailure(int i, String s) {
+
+ }
+ });
+ }
+
+ if (url.contains("tbopen://") || url.contains("tmall://") || url.contains("taobaotravel://")) {
+ return true;
+ }
+
+
+ if (url.contains("dianping://")) {
+ return true;
+ }
+ if (url.contains("aliim:")) {
+ return true;
+ }
+ if (url.contains("?mod=appapi&act=miandan_course&ctrl=close")) {
+ finish();
+ return true;
+ }
+ if (url.contains("vipma.net/quickapp.html?")) {
+ return true;
+ }
+
+
+ // 如下方案可在非微信内部WebView的H5页面中调出微信支付
+ if (url.startsWith("weixin://wap/pay?")) {
+ try {
+ Intent intent = new Intent();
+ intent.setAction(Intent.ACTION_VIEW);
+ intent.setData(Uri.parse(url));
+ startActivity(intent);
+ return true;
+ } catch (Exception e) {
+ e.printStackTrace();
+
+ }
+ return true;
+ }
+ if (url.startsWith("weixin://")) {
+ try {
+ Intent intent = new Intent();
+ intent.setAction(Intent.ACTION_VIEW);
+ intent.setData(Uri.parse(url));
+ startActivity(intent);
+ return true;
+ } catch (Exception e) {
+ e.printStackTrace();
+
+ }
+ return true;
+ }
+ if (url.endsWith("native://wechat")) {
+ Intent intent = new Intent();
+ ComponentName cmp = new ComponentName("com.tencent.mm", "com.tencent.mm.ui.LauncherUI");
+ intent.setAction(Intent.ACTION_MAIN);
+ intent.addCategory(Intent.CATEGORY_LAUNCHER);
+ intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+ intent.setComponent(cmp);
+ startActivity(intent);
+ return true;
+ }
+ if (url.contains("navite://save#")) {
+
+ }
+ //不拦截的话绑定淘宝关系id的时候会因为下面login.m.taobao.com的拦截而唤醒手淘授权之后导致不能切换帐号
+// if (url.contains("client_id") && url.contains("login.m.taobao.com/logout.htm?")) {
+// view.loadUrl(url);
+// return true;
+// }
+ if (url.contains("client_id")) {
+ view.loadUrl(url);
+ return true;
+ }
+// if (url.contains("login.m.taobao.com")) {
+// if (!AlibcLogin.getInstance().isLogin()) {
+// AlibcLogin.getInstance().showLogin(new AlibcLoginCallback() {
+//// @Override
+//// public void onSuccess(int i) {
+//// }
+//
+// @Override
+// public void onSuccess(int i, String s, String s1) {
+//
+// }
+//
+// @Override
+// public void onFailure(int i, String s) {
+// }
+// });
+// }
+// return true;
+// }
+ if (url.contains("maliprod.alipay.com") && !url.contains("confirmGoods.do")) {
+ AlibcLogin.getInstance().showLogin(new AlibcLoginCallback() {
+ @Override
+ public void onSuccess(int i, String s, String s1) {
+
+ }
+
+ @Override
+ public void onFailure(int i, String s) {
+
+ }
+ });
+ }
+
+ if (url.contains("intent://go/ju/webview?")) {
+ return true;
+ }
+// if (url.contains("s.click.taobao.com")) {
+// Logger.wtf(SPUtils.getPrefString(WebActivity.this, Pkey.IS_OPEN_TAOBAO, ""));
+// if (SPUtils.getPrefString(WebActivity.this, Pkey.IS_OPEN_TAOBAO, "").equals("shoutao")) {
+// if (!Token.isLogin()) {
+// if (isFirst2Login) {
+// ActivityJump.toLogin(WebActivity.this);
+// }
+// isFirst2Login = false;
+// finish();
+// } else {
+// if (isInstallTaoBao(WebActivity.this)) {
+// jump2TaoBao(url);
+// finish();
+// } else {
+// view.loadUrl(url);
+// }
+// }
+// return true;
+// }
+// }
+
+
+// if (url.contains("kingcard.dgunicom.com") && url.contains("newMsg") && url.contains("fill.html")) {
+// getItf(url);
+// }
+
+
+// else {
+// Logger.wtf("123");
+// mainWeb.loadUrl(url);
+// }
+ return super.shouldOverrideUrlLoading(view, url);
+ }
+
+
+ @Override
+ public void onPageStarted(WebView view, String url, Bitmap favicon) {
+ // WebLoad.setVisibility(View.GONE);
+ //开始加载设置为透明
+ super.onPageStarted(view, url, favicon);
+ }
+
+ @Override
+ public void onReceivedError(WebView view, WebResourceRequest request, WebResourceError error) {
+ super.onReceivedError(view, request, error);
+ }
+
+ @Override
+ public void onPageFinished(WebView view, String url) {
+ // WebLoad.setVisibility(View.GONE);
+// // 获取页面内容
+ view.loadUrl("javascript:window.java_obj.showSource("
+ + "document.documentElement.innerText);");
+
+ // 获取解析
+ view.loadUrl("javascript:window.java_obj.showDescription("
+ + "document.querySelector('meta[name=\"share-description\"]').getAttribute('content')"
+ + ");");
+ // quanyikaText();
+ super.onPageFinished(view, url);
+ }
+
+ //处理 [Android]用WebView访问证书有问题的SSL网页
+ //http://blog.sina.com.cn/s/blog_4cd978f90102vrxk.html
+ @Override
+ public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
+ handler.proceed();
+ }
+
+ }
+
+}
+
+
diff --git a/example/android/app/src/main/res/drawable/bg_launcher.png b/example/android/app/src/main/res/drawable/bg_launcher.png
new file mode 100644
index 0000000..a5f9062
Binary files /dev/null and b/example/android/app/src/main/res/drawable/bg_launcher.png differ
diff --git a/example/android/app/src/main/res/drawable/launch_background.xml b/example/android/app/src/main/res/drawable/launch_background.xml
index 304732f..5d0b6a2 100644
--- a/example/android/app/src/main/res/drawable/launch_background.xml
+++ b/example/android/app/src/main/res/drawable/launch_background.xml
@@ -1,12 +1,11 @@
-
+
-
+ android:src="@drawable/bg_launcher" />
+
diff --git a/example/android/app/src/main/res/drawable/yw_1222.jpg b/example/android/app/src/main/res/drawable/yw_1222_baichuan.jpg
similarity index 100%
rename from example/android/app/src/main/res/drawable/yw_1222.jpg
rename to example/android/app/src/main/res/drawable/yw_1222_baichuan.jpg
diff --git a/example/android/app/src/main/res/layout/activity_test.xml b/example/android/app/src/main/res/layout/activity_test.xml
new file mode 100644
index 0000000..031365f
--- /dev/null
+++ b/example/android/app/src/main/res/layout/activity_test.xml
@@ -0,0 +1,26 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/example/android/app/src/main/res/layout/activity_web.xml b/example/android/app/src/main/res/layout/activity_web.xml
new file mode 100644
index 0000000..45e0243
--- /dev/null
+++ b/example/android/app/src/main/res/layout/activity_web.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/example/android/build.gradle b/example/android/build.gradle
index 36dc0b4..fce6d9c 100644
--- a/example/android/build.gradle
+++ b/example/android/build.gradle
@@ -15,6 +15,10 @@ allprojects {
repositories {
google()
jcenter()
+ maven {
+ url "http://repo.baichuan-android.taobao.com/content/groups/BaichuanRepositories/"
+ }
+
}
}
diff --git a/lib/dialog/global_dialog/intellect_search_goods_dialog/intellect_search_goods_dialog.dart b/lib/dialog/global_dialog/intellect_search_goods_dialog/intellect_search_goods_dialog.dart
index e3c30e3..c26d72d 100644
--- a/lib/dialog/global_dialog/intellect_search_goods_dialog/intellect_search_goods_dialog.dart
+++ b/lib/dialog/global_dialog/intellect_search_goods_dialog/intellect_search_goods_dialog.dart
@@ -13,6 +13,7 @@ import 'package:provider/provider.dart';
import 'package:zhiying_comm/zhiying_comm.dart';
import 'package:flutter_alibc/flutter_alibc.dart';
import 'package:flutter_alibc/alibc_model.dart';
+import 'package:flutter_alibc/alibc_const_key.dart';
class IntellectSearchGoodsDialog extends StatefulWidget {
final IntellectDialogDataModel model;
@@ -31,7 +32,6 @@ class _IntellectSearchGoodsDialogState
@override
void initState() {
-
requestStyle();
super.initState();
}
@@ -243,7 +243,10 @@ class _IntellectSearchGoodsDialogState
),
),
Text(
- widget?.model?.price ?? "",
+ (num.tryParse(widget?.model?.price ?? "0") -
+ num.tryParse(
+ widget?.model?.couponPrice ?? "0")).toString() ??
+ "",
style: TextStyle(
fontSize: 32.sp,
color: HexColor.fromHex(
@@ -281,12 +284,10 @@ class _IntellectSearchGoodsDialogState
child: Text(
(_styleModel?.moduleList?.saveBtn?.content ?? "") +
" ¥" +
- ((double.tryParse(
- widget?.model?.couponPrice ?? "0.0") ??
+ ((num.tryParse(widget?.model?.couponPrice ?? "0") ??
0) +
- double.tryParse(
+ num.tryParse(
widget?.model?.commission ?? '0'))
- .toString()
.toString(),
style: TextStyle(
color: HexColor.fromHex(
@@ -353,17 +354,26 @@ class _IntellectSearchGoodsDialogState
RouterUtil.goLogin(context);
return;
} else {
- print("平台"+widget?.model?.provider??"");
+ print("平台" + widget?.model?.provider ?? "");
+ print("链接" + widget?.model?.couponUrl ?? "");
if (widget?.model?.provider == 'taobao') {
- TradeResult result =
- await FlutterAlibc.openByUrl(url: widget?.model?.couponUrl??"");
+ TradeResult result = await FlutterAlibc.openByUrl(
+ url: widget?.model?.couponUrl ?? "",
+ openType: AlibcOpenType.AlibcOpenTypeNative,
+ backUrl: "alisdk://");
Logger.debug('${result.errorCode} ${result.errorMessage} ');
- print("链接"+widget?.model?.couponUrl??"");
- print("错误码"+result.errorCode);
- print("原因"+result.errorMessage);
-
+ print("链接" + widget?.model?.couponUrl ?? "");
+ print("错误码" + result.errorCode);
+ print("原因" + result.errorMessage);
} else {
- RouterUtil.openWebview(widget?.model?.couponUrl, context);
+ await FlutterAlibc.openByUrl(
+ url: widget?.model?.couponUrl,
+ openType: AlibcOpenType.AlibcOpenTypeNative);
+ }
+
+ ///关闭弹窗
+ if (Navigator.canPop(context)) {
+ Navigator.pop(context);
}
}
}
diff --git a/lib/dialog/global_dialog/intellect_search_goods_dialog/model/intellect_dialog_data_model.dart b/lib/dialog/global_dialog/intellect_search_goods_dialog/model/intellect_dialog_data_model.dart
index 38a98b6..5c83878 100644
--- a/lib/dialog/global_dialog/intellect_search_goods_dialog/model/intellect_dialog_data_model.dart
+++ b/lib/dialog/global_dialog/intellect_search_goods_dialog/model/intellect_dialog_data_model.dart
@@ -10,6 +10,7 @@ class IntellectDialogDataModel {
String couponUrl;
String couponPrice;
+
IntellectDialogDataModel(
{this.itemId,
this.title,
diff --git a/lib/dialog/tip_dialog/tip_dialog.dart b/lib/dialog/tip_dialog/tip_dialog.dart
new file mode 100644
index 0000000..af49407
--- /dev/null
+++ b/lib/dialog/tip_dialog/tip_dialog.dart
@@ -0,0 +1,71 @@
+import 'package:flutter/material.dart';
+import 'package:zhiying_comm/zhiying_comm.dart';
+
+class TipDialog extends StatelessWidget {
+ String title;
+
+ TipDialog({this.title = "温馨提示", this.content});
+
+ String content;
+
+ @override
+ Widget build(BuildContext context) {
+ return Scaffold(
+ backgroundColor: Colors.transparent,
+ body: Column(
+ mainAxisAlignment: MainAxisAlignment.center,
+ crossAxisAlignment: CrossAxisAlignment.center,
+ children: [
+ Container(
+ width: double.infinity,
+ decoration: BoxDecoration(
+ color: Colors.white, borderRadius: BorderRadius.circular(20)),
+ margin: EdgeInsets.only(left: 91.w, right: 91.w),
+ child: Column(
+ children: [
+ Padding(
+ padding: const EdgeInsets.only(top: 16),
+ child: Text(
+ title,
+ style: TextStyle(fontSize: 30.sp,fontWeight: FontWeight.w400),
+ ),
+ ),
+ Container(
+ margin: EdgeInsets.all(16),
+ constraints: BoxConstraints(minHeight: 100),
+ child: Text(
+ content,
+ style: TextStyle(fontSize: 26.sp),
+ ),
+ ),
+ Row(
+ children: [
+ Expanded(
+ child: Padding(
+ padding: const EdgeInsets.only(
+ left: 16, right: 16, bottom: 16),
+ child: FlatButton(
+ padding: EdgeInsets.only(top: 10, bottom: 10),
+ color: HexColor.fromHex("#FFFF4242"),
+ shape: RoundedRectangleBorder(
+ borderRadius: BorderRadius.circular(50)),
+ onPressed: () {
+ Navigator.pop(context);
+ },
+ child: Text(
+ "知道了",
+ style: TextStyle(
+ color: HexColor.fromHex("#FFFFFF"),
+ fontSize: 26.sp),
+ )),
+ ))
+ ],
+ )
+ ],
+ ),
+ )
+ ],
+ ),
+ );
+ }
+}
diff --git a/lib/pages/hot_ranking_page/hot_ranking_page.dart b/lib/pages/hot_ranking_page/hot_ranking_page.dart
index f1262af..910125c 100644
--- a/lib/pages/hot_ranking_page/hot_ranking_page.dart
+++ b/lib/pages/hot_ranking_page/hot_ranking_page.dart
@@ -1,6 +1,22 @@
+import 'dart:convert';
+
import 'package:flutter/material.dart';
+import 'package:pull_to_refresh/pull_to_refresh.dart';
+import 'package:zhiying_base_widget/pages/hot_ranking_page/hot_ranking_page_sk.dart';
+import 'package:zhiying_base_widget/pages/main_page/notifier/main_page_bg_notifier.dart';
+import 'package:zhiying_base_widget/pages/main_page/notifier/main_page_notifier.dart';
+import 'package:zhiying_base_widget/utils/contants.dart';
+import 'package:zhiying_comm/util/base_bloc.dart';
+import 'package:zhiying_comm/zhiying_comm.dart';
+import 'package:provider/provider.dart';
+
+import 'hot_ranking_page_bloc.dart';
class HotRankingPage extends StatefulWidget {
+ final Map data;
+
+ const HotRankingPage(this.data, {Key key}) : super(key: key);
+
@override
_HotRankingPageState createState() => _HotRankingPageState();
}
@@ -10,7 +26,6 @@ class _HotRankingPageState extends State {
Widget build(BuildContext context) {
print('hot_ranking_page build');
-
//
// List contentWidgets = tabs.map((item) {
// BaseTabModel model = BaseTabModel.fromJson(item);
@@ -19,6 +34,134 @@ class _HotRankingPageState extends State {
// if (_currentIndex >= contentWidgets.length) {
// _currentIndex = 0;
// }
- return Scaffold();
+ return Scaffold(
+ backgroundColor: Color(0xfff9f9f9),
+ body: MultiProvider(
+ providers: [
+ ChangeNotifierProvider.value(value: MainPageBgNotifier()),
+ ],
+ child: BlocProvider(
+ bloc: HotRankingPageBloc(),
+ child: _HotRankingPageContainer(data: widget.data),
+ ),
+ ),
+ );
+ }
+}
+
+class _HotRankingPageContainer extends StatefulWidget {
+ final Map data;
+
+ const _HotRankingPageContainer({Key key, this.data}) : super(key: key);
+
+ @override
+ __HotRankingPageContainerState createState() =>
+ __HotRankingPageContainerState();
+}
+
+class __HotRankingPageContainerState extends State<_HotRankingPageContainer> {
+ HotRankingPageBloc _bloc;
+ RefreshController _refreshController;
+ String backgroundImage;
+
+ @override
+ void initState() {
+ _refreshController = RefreshController();
+ _bloc = BlocProvider.of(context);
+ if (widget.data.containsKey(Constants.SkipIdentifierName)) {
+ _bloc.loadData(widget.data[Constants.SkipIdentifierName]);
+ }
+
+ super.initState();
+ }
+
+ @override
+ Widget build(BuildContext context) {
+ return StreamBuilder(
+ stream: _bloc.outData,
+ builder: (context, asyncSnapshot) {
+
+ var model = asyncSnapshot.data;
+ if (model == null) {
+ return HotRankingPageSkeleton();
+ }
+ for (var item in model) {
+ WidgetModel widgetModel =
+ WidgetModel.fromJson(Map.from(item));
+ if (item.containsKey("mod_name") &&
+ item['mod_name'] == "hot_rank_bg_img") {
+ _bloc.backgroundImage = json.decode(item['data'])['bg_img'];
+ break;
+ }
+ }
+ return Stack(
+ children: [
+ Container(
+ height: 293.h,
+ decoration: BoxDecoration(
+ image: DecorationImage(
+ image: CachedNetworkImageProvider(
+ _bloc.backgroundImage ?? ""),
+ fit: BoxFit.fill)),
+ ),
+ Column(
+ children: _createContent(context, model),
+ )
+ ],
+ );
+ },
+ );
+ }
+
+ //刷新
+ void _onLoading() async {}
+
+ ///构建子模块
+ _createContent(BuildContext context, List