最近业务有需要须要在 flutter 内应用 webview 进行内嵌 H5 进行展现,此时须要波及到 H5 与 flutter 之间额通信问题。比方发送音讯或者 H5 调用 Flutter 的相机等等
webview 选型
这里咱们应用官网保护的插件 webview_flutter
如何通信?
webview 在初始化的时候须要向容器内注册一个全局办法供 H5 进行调用
WebView(
initialUrl: 'https://flutter.dev',
javascriptMode: JavascriptMode.unrestricted,
javascriptChannels: <JavascriptChannel>{_toasterJavascriptChannel(context),
}
....
....
)
JavascriptChannel _toasterJavascriptChannel(BuildContext context) {
return JavascriptChannel(
name: 'Toaster',// 注册一个名字为 Toaster 的全局 js 办法
onMessageReceived: (JavascriptMessage message) {
// 解决业务的代码逻辑
print(message)
});
}
H5 发送音讯给 flutter
H5 发送音讯采纳 xxxx.postMessage 模式,留神这里对象须要JSON.stringify
Toaster.postMessage(
JSON.stringify({
name: 'tom',
age: 12
})
);
flutter 发送音讯给 H5
须要调用 runJavascript
办法,咱们能够在 H5 中申明一个全局 windows
办法
window.globalCallback = function (data) {console.log(data)
};
flutter 发送采纳 runJavascript
模式
WebViewController!.runJavascript('globalCallback(123)');// 如果是对象也须要 json.encode 序列化
交换群