Flutter 中如何将Callback 转为Future
2021-11-04 本文已影响0人
哦呵呵y
Future<void> callback(ValueChanged<String> block) async {
await Future.delayed(const Duration(seconds: 5));
block("value");
}
// 调用
callback((value) {
print(value);
});
在上面的代码中,由于函数callback
将返回值通过block回调给外部,所以外部无法使用 await
拿到返回值。
如果在不想修改callback
函数的前提下,想要通过await
的方式拿到返回值,可以通过以下方法实现
Future<String> wrapCallBack() {
Completer<String> c = Completer();
callback((value) {
c.complete(value);
});
return c.future;
}
// 调用
var res = await wrapCallBack();
Log.v(res);