gpt4 book ai didi

dart - 有没有办法从 setMethodCallHandler 获取 Future?

转载 作者:IT王子 更新时间:2023-10-29 06:51:56 27 4
gpt4 key购买 nike

我有一个 setMethodCallHandler,它从我的 Java 代码运行回调,我希望它设置一个包含结果的 Future。有点像

Future<String> fun() async {

return setMethodCallHandler((MethodCall call) {
return () async {return call.arguments["arg"];}();
});
}

我希望能够做的是如果 call.argument 将返回“abc”,

var a = await fun();

a 将等于“abc”

我找到的唯一信息是有关setMethodCallHandler 的文档:

If the future returned by the handler completes with a result, that value is sent back to the platform plugin caller wrapped in a success envelope as defined by the codec of this channel. If the future completes with a PlatformException, the fields of that exception will be used to populate an error envelope which is sent back instead.

但我不明白如何才能获得“包装在由该 channel 的编解码器定义的成功信封中的平台插件调用者”?

最佳答案

我在猜测,但如果我错了请纠正我,setMethodCallHandler 不会返回值,它只会设置一个稍后调用的函数。因此,您不能将 setMethodCallHandler 的返回值用于任何事情。

这实际上意味着您有一种“事件”,您希望将其“转换”为 future 的完成。为此,您使用 Completer 创建并稍后完成 Future

Future<String> fun() {
var completer = new Completer<String>();
setMethodCallHandler((MethodCall call) {
completer.complete(call.arguments["arg"]);
}
return completer.future;
}

当您的事件全部来自 futures 或流时,使用 async 函数是有效的,但是当您获得其他类型的事件(如端口事件、I/O 回调或计时器)并且您想要映射它时回到 future /流事件,您可以使用 Completer 来完成 future 或使用 StreamController 将事件添加到流中。

关于dart - 有没有办法从 setMethodCallHandler 获取 Future?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49847513/

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