| | |
| | | import 'dart:convert'; |
| | | import 'dart:io'; |
| | | |
| | | import 'package:dio/dio.dart'; |
| | | import 'package:flutter/services.dart'; |
| | | import 'package:flutter/widgets.dart'; |
| | | import 'package:fluttertoast/fluttertoast.dart'; |
| | | import 'package:locations/api/http.dart' as http; |
| | | import 'package:locations/ui/map/travel.dart'; |
| | | import 'package:locations/utils/ad_util.dart'; |
| | | import 'package:locations/utils/encrypt_util.dart'; |
| | | import 'package:locations/utils/permission_util.dart'; |
| | | import 'package:locations/utils/share_utils.dart'; |
| | | import 'package:locations/utils/string_util.dart'; |
| | | import 'package:locations/utils/ui_constant.dart'; |
| | | import 'package:locations/utils/ui_utils.dart'; |
| | | import 'package:locations/utils/user_util.dart'; |
| | | import 'package:permission_handler/permission_handler.dart'; |
| | | import 'package:webview_flutter/platform_interface.dart'; |
| | | import 'package:webview_flutter/webview_flutter.dart'; |
| | | import 'package:path_provider/path_provider.dart'; |
| | | |
| | | class JavascriptInterface { |
| | | final BuildContext context; |
| | |
| | | case "toast": |
| | | toast(params); |
| | | break; |
| | | case "copyText": |
| | | copyText(params); |
| | | break; |
| | | case "getUid": |
| | | getUid(params, _callback); |
| | | break; |
| | | case "getRequestBaseParams": |
| | | getBaseRequestParams(params, _callback); |
| | | case "getAppName": |
| | | getAppName(_callback); |
| | | break; |
| | | |
| | | case "getRequestBaseParams": |
| | | getRequestBaseParams(params, _callback); |
| | | break; |
| | | case "showRewardVideoAd": |
| | | showRewardVideoAd(_callback); |
| | | break; |
| | | |
| | | case "showLoading": |
| | | showLoading(); |
| | | break; |
| | |
| | | case "finishPage": |
| | | finishPage(); |
| | | break; |
| | | case "saveImg": |
| | | String url = params["url"]; |
| | | saveImg(url); |
| | | break; |
| | | case "shareImg": |
| | | String url = params["url"]; |
| | | String type = params["type"]; |
| | | shareImg(url, int.parse(type)); |
| | | break; |
| | | } |
| | | })); |
| | | return list.toSet(); |
| | | } |
| | | |
| | | callback(String method, var params) { |
| | | callback(String method, var params, {bool finish = true}) { |
| | | _controller!.runJavascript("$method('$params')"); |
| | | _controller!.runJavascript("delete $method"); |
| | | if (finish) { |
| | | _controller!.runJavascript("delete $method"); |
| | | } |
| | | } |
| | | |
| | | //获取用户ID |
| | |
| | | } |
| | | } |
| | | |
| | | //获取用户ID |
| | | getAppName(String? callbackName) { |
| | | if (callbackName != null) { |
| | | callback(callbackName, Constant.APP_NAME); |
| | | } |
| | | } |
| | | |
| | | //toast |
| | | toast(params) { |
| | | if (params != null && params["msg"] != null) { |
| | |
| | | } |
| | | } |
| | | |
| | | copyText(params) { |
| | | if (params != null && params["content"] != null) { |
| | | Clipboard.setData(ClipboardData(text: params["content"])); |
| | | } |
| | | } |
| | | |
| | | //获取基本的网络请求参数 |
| | | getBaseRequestParams(var params, String? callbackName) { |
| | | getRequestBaseParams(var params, String? callbackName) { |
| | | var ps = {}; |
| | | if (params != null) { |
| | | ps.addAll(params); |
| | |
| | | //展示激励视频 |
| | | showRewardVideoAd(String? callbackName) { |
| | | AdUtil.getAdInfo(AdPosition.vipReward).then((value) { |
| | | AdUtil.loadReward(value, (success, msg) { |
| | | if (success) { |
| | | //成功 |
| | | if (callbackName != null) { |
| | | callback(callbackName, true); |
| | | } |
| | | } else { |
| | | if (callbackName != null) { |
| | | callback(callbackName, false); |
| | | } |
| | | 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; |
| | | } |
| | | }); |
| | | }); |
| | |
| | | Navigator.of(context).pop(); |
| | | } |
| | | |
| | | //保存图片 |
| | | saveImg(String url) { |
| | | //TODO |
| | | Future<bool> _dowloadImg(String url, String path) async { |
| | | PermissionStatus status = |
| | | await PermissionUtil.openPermission(Permission.storage, force: true); |
| | | if (status != PermissionStatus.granted) { |
| | | return false; |
| | | } |
| | | |
| | | //下载图片 |
| | | Dio dio = Dio(); |
| | | //设置连接超时时间 |
| | | dio.options.connectTimeout = 20000; |
| | | //设置数据接收超时时间 |
| | | dio.options.receiveTimeout = 20000; |
| | | Response response; |
| | | try { |
| | | response = await dio.download(url, path); |
| | | if (response.statusCode == 200) { |
| | | return true; |
| | | } else { |
| | | return false; |
| | | } |
| | | } catch (e) { |
| | | ToastUtil.toast("网络连接失败"); |
| | | return false; |
| | | } |
| | | } |
| | | |
| | | //分享图片 |
| | | //保存图片 |
| | | saveImg(String url) { |
| | | getExternalStorageDirectory().then((value) { |
| | | if (value == null) { |
| | | ToastUtil.toast("获取缓存目录失败"); |
| | | return; |
| | | } |
| | | |
| | | String doc = value.path; |
| | | String path = doc + "/" + EncryptUtil.MD5(url) + ".png"; |
| | | _dowloadImg(url, path).then((value) { |
| | | if (value) { |
| | | ToastUtil.toast("保存成功"); |
| | | } |
| | | }); |
| | | }); |
| | | } |
| | | |
| | | ///分享图片 |
| | | ///type: 1-微信 2-qq 3-新浪 |
| | | shareImg(String url, int type) { |
| | | //TODO |
| | | getTemporaryDirectory().then((value) { |
| | | String path = value.path + "/" + EncryptUtil.MD5(url) + ".png"; |
| | | _dowloadImg(url, path).then((value) { |
| | | if (value) { |
| | | //开始分享 |
| | | switch (type) { |
| | | case 1: |
| | | ShareUtil.shareImg(context, File(path), SharePlatform.wx); |
| | | break; |
| | | case 2: |
| | | ShareUtil.shareImg(context, File(path), SharePlatform.qq); |
| | | break; |
| | | case 3: |
| | | ShareUtil.shareImg(context, File(path), SharePlatform.sina); |
| | | break; |
| | | } |
| | | } |
| | | }); |
| | | }); |
| | | } |
| | | } |