我正在编写一个原生插件,在某些情况下,必须在应用程序的颤动部分调用函数,用Dart编写。 它是如何实现的,在这里解释: https://flutter.io/platform-channels/
此外,从本机/平台部分向Dart /非本机调用方法的示例如下: https://github.com/flutter/plugins/tree/master/packages/quick_actions
现在,这个例子非常好,以防平台只需要调用method
,即该调用不返回/ void
,但是如果它需要调用function
,即需要来自非本机/ Dart部分的返回值,我无法在互联网上找到示例或文档。我相信它可以实现,因为在本机Java部分,有一个方法:
public void invokeMethod(String method,Object arguments, MethodChannel.Result回调)
所以,有一个callback
对象可以从非本机部分返回值 - 或者,我在这里弄错了,并且目前无法从非本机Dart返回值应用程序的一部分?
答案 0 :(得分:11)
签名为void setMethodCallHandler(Future<dynamic> handler(MethodCall call))
,因此我们需要在Dart端提供一个返回Future<dynamic>
的函数,例如_channel.setMethodCallHandler(myUtilsHandler);
然后实现处理程序。这个处理两个方法foo
和bar
分别返回String
和double
。
Future<dynamic> myUtilsHandler(MethodCall methodCall) async {
switch (methodCall.method) {
case 'foo':
return 'some string';
case 'bar':
return 123.0;
default:
// todo - throw not implemented
}
}
在Java端,返回值将传递给success
回调的Result
方法。
channel.invokeMethod("foo", arguments, new Result() {
@Override
public void success(Object o) {
// this will be called with o = "some string"
}
@Override
public void error(String s, String s1, Object o) {}
@Override
public void notImplemented() {}
});