import 'dart:convert';
|
|
import 'package:flutter/services.dart';
|
import 'package:flutter/widgets.dart';
|
import 'package:package_info/package_info.dart';
|
import 'package:webview_flutter/platform_interface.dart';
|
import 'package:webview_flutter/webview_flutter.dart';
|
|
import '../api/http.dart' as http;
|
import '../ui/widget/nav.dart';
|
import '../utils/ui_utils.dart';
|
import '../utils/user_util.dart';
|
import 'image_util.dart';
|
|
class JavascriptInterface {
|
final BuildContext context;
|
final WebViewController? _controller;
|
|
JavascriptInterface(
|
BuildContext this.context, WebViewController? this._controller);
|
|
Set<JavascriptChannel> getInterfaces() {
|
List<JavascriptChannel> list = [];
|
list.add(JavascriptChannel(
|
name: 'yestv',
|
onMessageReceived: (JavascriptMessage message) {
|
print("onMessageReceived");
|
var data = jsonDecode(message.message);
|
String method = data["method"];
|
var params = data["params"];
|
String? _callback = data["callback"];
|
switch (method) {
|
case "toast":
|
toast(params);
|
break;
|
case "copyText":
|
copyText(params);
|
break;
|
case "getUid":
|
getUid(params, _callback);
|
break;
|
case "getAppName":
|
getAppName(_callback);
|
break;
|
case "getRequestBaseParams":
|
getRequestBaseParams(params, _callback);
|
break;
|
case "showRewardVideoAd":
|
showRewardVideoAd(this.context, _callback);
|
break;
|
case "showLoading":
|
showLoading();
|
break;
|
case "hideLoading":
|
hideLoading();
|
break;
|
case "finishPage":
|
finishPage();
|
break;
|
case "saveImg":
|
String url = params["url"];
|
ImageUtil.saveImg(url,context);
|
break;
|
case "shareImg":
|
String url = params["url"];
|
String type = params["type"];
|
ImageUtil.shareImg(url, int.parse(type),context);
|
break;
|
}
|
}));
|
return list.toSet();
|
}
|
|
callback(String method, var params, {bool finish = true}) {
|
_controller!.runJavascript("$method('$params')");
|
if (finish) {
|
_controller!.runJavascript("delete $method");
|
}
|
}
|
|
//获取用户ID
|
getUid(var params, String? callbackName) {
|
if (callbackName != null) {
|
UserUtil.getUid().then((value) {
|
callback(callbackName, value != null ? value.toString() : "");
|
});
|
}
|
}
|
|
//获取用户ID
|
getAppName(String? callbackName) {
|
//
|
PackageInfo.fromPlatform().then((PackageInfo packageInfo) {
|
if (callbackName != null) {
|
callback(callbackName, packageInfo.appName);
|
}
|
});
|
}
|
|
//toast
|
toast(params) {
|
if (params != null && params["msg"] != null) {
|
ToastUtil.toast(params["msg"], context);
|
}
|
}
|
|
copyText(params) {
|
if (params != null && params["content"] != null) {
|
Clipboard.setData(ClipboardData(text: params["content"]));
|
}
|
}
|
|
//获取基本的网络请求参数
|
getRequestBaseParams(var params, String? callbackName) {
|
var ps = {};
|
if (params != null) {
|
ps.addAll(params);
|
}
|
http.HttpUtil.getBaseParams(params).then((value) {
|
String result = jsonEncode(value);
|
if (callbackName != null) {
|
callback(callbackName, result);
|
}
|
});
|
}
|
|
//展示激励视频
|
showRewardVideoAd(BuildContext context, String? callbackName) {
|
// AdUtil.getAdInfo(context, AdPosition.vipReward).then((value) {
|
// AdUtil.loadReward(value, (status, msg) {
|
// switch (status) {
|
// case RewardAdStatus.verify:
|
// callback(callbackName!, 3, finish: false);
|
// break;
|
// case RewardAdStatus.ready:
|
// callback(callbackName!, 1, finish: false);
|
// break;
|
// case RewardAdStatus.close:
|
// callback(callbackName!, 10, finish: true);
|
// break;
|
// case RewardAdStatus.click:
|
// callback(callbackName!, 2, finish: false);
|
// break;
|
// case RewardAdStatus.fail:
|
// callback(callbackName!, 0, finish: true);
|
// break;
|
// }
|
// });
|
// });
|
}
|
|
showLoading() {
|
http.showLoading(context);
|
}
|
|
hideLoading() {
|
popPage(context);
|
}
|
|
//结束页面
|
finishPage() {
|
popPage(context);
|
}
|
|
}
|