admin
2022-01-12 8327000a0cce5e47226372e0e25c1e6faec497e7
lib/utils/jsinterface.dart
@@ -1,12 +1,24 @@
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;
@@ -29,17 +41,21 @@
            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;
@@ -49,14 +65,25 @@
            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
@@ -68,6 +95,13 @@
    }
  }
  //获取用户ID
  getAppName(String? callbackName) {
    if (callbackName != null) {
        callback(callbackName, Constant.APP_NAME);
    }
  }
  //toast
  toast(params) {
    if (params != null && params["msg"] != null) {
@@ -75,8 +109,14 @@
    }
  }
  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);
@@ -92,16 +132,23 @@
  //展示激励视频
  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;
        }
      });
    });
@@ -120,13 +167,72 @@
    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;
          }
        }
      });
    });
  }
}