gpt4 book ai didi

native - 如何使用 MethodChannel 从 native 平台调用应用程序 Dart 部分中的方法?

转载 作者:IT老高 更新时间:2023-10-28 12:30:28 25 4
gpt4 key购买 nike

我正在编写一个原生插件,在某些情况下,它必须调用应用程序的 Flutter 部分中的函数,用 Dart 编写。它是如何实现的,在这里解释: https://flutter.io/platform-channels/

此外,从 native /平台部分向 Dart/非 native 调用方法的示例如下: https://github.com/flutter/plugins/tree/master/packages/quick_actions

现在,如果平台只需要调用 method,即该调用不返回任何内容/void,但如果需要调用function,即需要来自非本地/Dart 部分的返回值,我无法在 Internet 上找到示例或文档。我相信它是可以实现的,因为在原生 Java 部分,有一个方法:

public void invokeMethod(String method, Object arguments, MethodChannel.Result callback)

所以,有一个 callback 对象可能有一个来自非本地部分的返回值 - 或者,我在这里弄错了,目前没有办法从非本地部分返回一个值- 应用的原生 Dart 部分?

最佳答案

签名是void setMethodCallHandler(Future<dynamic> handler(MethodCall call)) ,所以我们需要在 Dart 端提供一个返回 Future<dynamic> 的函数,例如 _channel.setMethodCallHandler(myUtilsHandler);

然后实现处理程序。这个处理两种方法foobar分别返回Stringdouble .

  Future<dynamic> myUtilsHandler(MethodCall methodCall) async {
switch (methodCall.method) {
case 'foo':
return 'some string';
case 'bar':
return 123.0;
default:
throw MissingPluginException('notImplemented');
}
}

在 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关闭。 (未实现由 const NSObjectFlutterMethodNotImplemented 的任何参数发出信号。)

channel.invokeMethod("foo", arguments: args, result: {(r:Any?) -> () in
// this will be called with r = "some string" (or FlutterMethodNotImplemented)
})

关于native - 如何使用 MethodChannel 从 native 平台调用应用程序 Dart 部分中的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50187680/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com