Подпись 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() {}
});
В Swift возвращаемое значение представляет собой Any?
, переданное закрытию result
. (Не реализовано, сигнализируется любым параметром, являющимся постоянным NSObject
значением FlutterMethodNotImplemented
.)
channel.invokeMethod("foo", arguments: args, result: {(r:Any?) -> () in
// this will be called with r = "some string" (or FlutterMethodNotImplemented)
})