mar*_*337 13 flutter flutter-web
我有独立的 Android 应用程序。然后我开发了较小的网络应用程序Flutter
并将其导出到网络服务器。它WebView
作为 Android 版 Kotlin 中该独立应用程序的一部分加载到内部。
Android 支持 postmessaging,我可以WebView
通过渠道直接发送数据。我的问题是如何在 Flutter Dart 代码中(在我的 Web 应用程序中)收听这些消息?
这是我在 Kotlin Android App 中使用的代码:
private var port: WebMessagePort? = null
@TargetApi(Build.VERSION_CODES.M)
private fun initPostMessagePort(){
val channelsAvailable = webView.createWebMessageChannel()
port = channelsAvailable.firstOrNull()
port?.apply {
setWebMessageCallback(object : WebMessageCallback() {
override fun onMessage(port: WebMessagePort, message: WebMessage) {
//TODO do something with message
}
})
}?:kotlin.run {
App.log("Port initialization failed - channels not available")
}
}
@TargetApi(Build.VERSION_CODES.M)
private fun sendMessageToPort(message: String){
port?.let { p->
webView.postWebMessage(WebMessage(message, arrayOf(p)), Uri.EMPTY)
}?:kotlin.run {
App.log("Port not initialized")
}
}
Run Code Online (Sandbox Code Playgroud)
所以有我的 Flutter Web App 启动代码:
void main() async {
WidgetsFlutterBinding.ensureInitialized();
await di.init();
//listen to message from mobile app, then run code below
runApp(MyApp());
bloc.dispatch(GetUserProfile());
}
Run Code Online (Sandbox Code Playgroud)
使用dart:htmlflutter web
库,我们可以在应用程序与其主机 android之间建立通信通道WebView
:
import 'dart:html' as html;
//...
html.window.onMessage.listen((event) {
// do something with received data
myController.text = event.data;
// return a response
event.ports[0].postMessage("response data");
});
Run Code Online (Sandbox Code Playgroud)
android端对应的Kotlin代码:
val webView = findViewById<WebView>(R.id.webview)
val (receiver, sender) = webView.createWebMessageChannel()
receiver.setWebMessageCallback(object : WebMessagePort.WebMessageCallback() {
override fun onMessage(port: WebMessagePort, message: WebMessage) {
Log.i("example", "Received ${message.data}")
}
})
val message = WebMessage("Original message", arrayOf(sender))
webView.postWebMessage(message, Uri.EMPTY)
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2053 次 |
最近记录: |