我有一个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
上的文档:但是我不明白如何获得“该通道的编解码器定义的成功封装了平台插件的调用程序”?
最佳答案
我正在猜测,但是如果我错了,请更正我,setMethodCallHandler
不返回值,它仅设置一个稍后调用的函数。
因此,您不能将setMethodCallHandler
的返回值用于任何内容。
这实际上意味着您有一种“事件”,您想将其“转换”为将来的完成。为此,您可以使用Completer
创建并稍后完成Future
。
Future<String> fun() {
var completer = new Completer<String>();
setMethodCallHandler((MethodCall call) {
completer.complete(call.arguments["arg"]);
}
return completer.future;
}
当所有事件都来自将来或流时,使用
async
函数就可以使用,但是当您获得其他类型的事件(例如端口事件,I / O回调或计时器)并且想要将其映射回将来/流事件时,可以使用Completer
函数可以使用StreamController
完成将来的操作,也可以使用ojit_code将事件添加到流中。关于dart - 有没有办法从setMethodCallHandler获取Future?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49847513/