【发布时间】:2021-04-02 01:14:59
【问题描述】:
对于 Webview 相关功能,我使用方法通道通过原生 Android 和 iOS 代码打开 Webview,并且我正在其中打开一个网站,我正在从 JS 回调到移动平台中的原生代码。 对于 Android,我提供了一个从 JS 调用其方法的类, 它看起来像这样:
webView.settings.javaScriptEnabled = true
webView.addJavascriptInterface(WebAppInterface(this), "nativeCommunicator")
webView.loadUrl("SOME_URL")
…
class WebAppInterface(private val mContext: Activity) {
@JavascriptInterface
fun postMessage(text: String) {
println("WebAppInterface.message($text)")
//send back to flutter
}
}
从 js 到我的代码的回调似乎很简单。
现在我正在尝试在 Flutter Web 中执行此操作 我通过调用打开了网站
import 'package:js/js.dart';
...
js.context.callMethod('open', 'SOME_URL', '_self');
效果很好,现在我正在尝试通过创建此类来获取回调
@JS()
library native_communicator;
import 'package:js/js.dart';
@JS('nativeCommunicator')
class NativeCommunicator{
@JS('postMessage')
external static set _postMessage(void Function(String text) f);
@JS()
external static void postMessage();
}
void setJSCallbackFunction(void Function(String text) postMessageFunction) {
NativeCommunicator._postMessage = allowInterop(postMessageFunction);
}
我正在调用 setJSCallbackFunction 并将我的函数作为参数传递,但它不断给我运行时错误 它找不到'postMessage',我尝试了其他一些导致找不到'nativeCommunicator'错误的方法, 谁能指出如何正确地做到这一点? 我需要从 js 中调用一个 dart 方法。
【问题讨论】:
标签: javascript flutter flutter-web