【Flutter】FlutterWeb与Js交互

Flutterweb与android原生进行交互,需要用到js作为中转(flutter知识有限,目前只知道需要js作为中转),所以需要js调用flutter,flutter调用js。

Flutter调用Js

  • Flutter代码
import 'dart:convert';
import 'dart:js' as js;

class Utils {
  static Map<String, dynamic> getSearchData() {
    //调用Js的方法
    var result = js.context.callMethod("getSearchData");
    return jsonDecode(result);
  }
}

  • js定义的方法
function getSearchData(){
	//searchData是android原生传递过来的namespace,
	//searchData.getSearchData()是android原生定义的方法
    var result = searchData.getSearchData();
    return result;
}

上述searchData是android原生传递过来的namespace,searchData.getSearchData()是android原生定义的方法,android原生与Js交互可以看:Flutter】Android原生WebView(非Flutter WebView)与FlutterWeb交互

Js调用Flutter

  • Flutter中的代码
    //提供给js调用的方法
    js.context["invokeJs"] = () {
       print("Js调用到了flutter!");
    };
  • Js调用该方法
function getSearchData(){
    var result = searchData.getSearchData();
    //js调用Flutter的方法
    window.invokeJs();
    return result;
}

组合

使用上述两个组合,可以做到Flutter调用Js的方法,然后Js回调Flutter的方法。

  • Flutter代码
import 'dart:convert';
import 'dart:js' as js;

typedef Success = void Function(String result);

class Utils {
  static Map<String, dynamic> getSearchData(Success success) {
    //提供给js调用的方法
    js.context["invokeJs"] = (text) {
      // print("Js调用到了flutter!");
      // success("Js调用到了flutter!");
      success.call("Js调用到了flutter!$text");
    };

    //调用Js的方法
    var result = js.context.callMethod("getSearchData");
    return jsonDecode(result);
  }
}
  • Js定义方法
function getSearchData(){
	//searchData原生定义的namespace,
	//getSearchData是@JavascriptInterface标记的方法
    var result = searchData.getSearchData();
    var text = "js入参"
    //调用Flutter定义的方法
    window.invokeJs(text);
    return result;
}
  • 使用
    var result = Utils.getSearchData((text) {
      print("Flutter内部回调:$text");
    });

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值