赞
踩
Flutterweb与android原生进行交互,需要用到js作为中转(flutter知识有限,目前只知道需要js作为中转),所以需要js调用flutter,flutter调用js。
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);
}
}
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调用的方法
js.context["invokeJs"] = () {
print("Js调用到了flutter!");
};
function getSearchData(){
var result = searchData.getSearchData();
//js调用Flutter的方法
window.invokeJs();
return result;
}
使用上述两个组合,可以做到Flutter调用Js的方法,然后Js回调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);
}
}
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");
});
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。