如何在函数回调中 return 来自函数的不可空类型?
How to return a non-nullable type from a Function in a function callback?
Future<int> getInt() async { // Error:
final c = Completer<int>();
await foo.bar(
callback1: (i) => c.complete(i),
callback2: (j) => c.complete(j),
error: (e) => throw e,
);
}
The body might complete normally, causing 'null' to be returned, but the return type is a potentially non-nullable type.
据我所知,这些回调之一会起作用,那么我如何告诉分析器我已经处理了所有场景?
注意:我知道我可以简单地使用 Future<int?>
但我想知道是否有其他方法可以处理这种情况?
您需要一个 return 语句:
final result = await foo.bar(
callback1: (i) => c.complete(i),
callback2: (j) => c.complete(j),
error: (e) => throw e,
);
return result;
或
...
return c;
Analyzer 就在这里,您只是没有从 getInt()
.
返回任何内容
在getInt()
的末尾添加return completer.future
。
注意:
这里使用 Completer
似乎比较奇怪,它主要用于在基于回调的 API 和基于 Future
的 API.
之间架起桥梁
Future<int> getInt() async { // Error:
final c = Completer<int>();
await foo.bar(
callback1: (i) => c.complete(i),
callback2: (j) => c.complete(j),
error: (e) => throw e,
);
}
The body might complete normally, causing 'null' to be returned, but the return type is a potentially non-nullable type.
据我所知,这些回调之一会起作用,那么我如何告诉分析器我已经处理了所有场景?
注意:我知道我可以简单地使用 Future<int?>
但我想知道是否有其他方法可以处理这种情况?
您需要一个 return 语句:
final result = await foo.bar(
callback1: (i) => c.complete(i),
callback2: (j) => c.complete(j),
error: (e) => throw e,
);
return result;
或
...
return c;
Analyzer 就在这里,您只是没有从 getInt()
.
在getInt()
的末尾添加return completer.future
。
注意:
这里使用 Completer
似乎比较奇怪,它主要用于在基于回调的 API 和基于 Future
的 API.