前端与Flutter的跨界对话:探索JavascriptChannel的潜力

前言

Flutter 中,JavascriptChannel 是一种用于与 JavaScript 代码进行通信的机制。

它允许你从 Dart 代码调用 JavaScript 函数,或者从 JavaScript 调用 Dart 代码。

以下是如何使用 JavascriptChannel 的基本步骤:

创建

创建 JavaScriptChannel

首先,你需要创建一个 JavascriptChannel 实例,并注册它到你的 WebView 中。

注册

  late Set<JavascriptChannel> jsbridge;
  initState(){
    jsbridge = Set<JavascriptChannel>();
  }

webView中调用

WebView(
    initialUrl:yourUrl,
    onWebViewCreated: (WebViewController controller) {
      webController = controller;
    },
    javascriptMode: JavascriptMode.unrestricted,
    javascriptChannels: jsbridge,          
),

前端注册

window.flutter_inappwebview = {};
window.flutter_inappwebview.callHandler = (name, data = null) => {
  console.log('***********flutter_inappwebview************',name);
  if (data === null) data = {};
  data = {
    data: data,
    key: name + Date.now().toString()
  }
  console.log('window[name]::',window[name]);
  window[name].postMessage(JSON.stringify(data).toString());
  return new Promise((resolve, reject) => {
    let getMessage = (e) => {
      console.log("getMessage:", e.data);
      const res = e.data
      // 拿到消息后解析resolve数据
      if (res.type == "flutterCallingMessage" && res.key == data.key) {
        window.removeEventListener("message", getMessage, true);
        resolve(res.data);
      }
      // 50s 超时抛出错误
      setTimeout(() => {
        window.removeEventListener("message", getMessage, true);
        reject("timeout");
      }, 500000);
    };
    window.addEventListener("message", getMessage, true);
  });
};

flutter调用前端代码

  void callJavaScriptFunction() {
    // 调用JavaScript中的函数
    jsbridge.invokeJavascript('functionName', args: ['arg1', 'arg2']);
  }

效果如下:

前端调用flutter代码

export const loaction = () => {
  window.flutter_inappwebview.callHandler('loaction').then((e) => {
    console.log(e);
  })
}

效果如下:

总结

请注意,实际使用时,你需要根据你的具体需求调整 JavaScript 函数的名称和参数。

同时,确保 JavaScript 代码在 WebView 加载的页面中被正确执行。

– 欢迎点赞、关注、转发、收藏【我码玄黄】,各大平台同名。

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我码玄黄

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值