签名是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:
throw MissingPluginException('notImplemented');
}
}
在Java端,返回值被传递给Result
回调的success
方法.
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() {}
});
在Swift中,返回值是传递给result
闭包的Any?
.(未实现由常量NSObject
值FlutterMethodNotImplemented
的任何参数发出信号.)
channel.invokeMethod("foo", arguments: args, result: {(r:Any?) -> () in
// this will be called with r = "some string" (or FlutterMethodNotImplemented)
})