onPressed: () {
getName().then((value)
{
print(value);
print('YNWA');
throw('ERORRRRRR!');
}).catchError((error){
print('error is : ${error.toString()}');
});
},
这是一个方法
Future<String> getName() async {
return 'Basel Elazaly';
} }
为什么会出现未处理的异常?
您尚未指定您遇到的什么未处理的异常。 当我尝试使用:
Future<String> getName() async {
return 'Basel Elazaly';
}
void main() {
getName().then((value) {
print(value);
print('YNWA');
throw ('ERORRRRRR!');
}).catchError((error) {
print('error is : ${error.toString()}');
});
}
抛出的
'ERORRRRRR!'
绳子被抓住。 但是,分析器会警告您,您的 catchError
块不正确 因为它没有返回正确的类型 ,并且该错误会导致单独的运行时错误。
“什么返回类型?”你可能想知道。 您的
Future.then
回调正文是:
print(value);
print('YNWA');
throw ('ERORRRRRR!');
这无条件会
throw ('ERORRRRRR!')
。 因此,Future
的返回类型被推断为aFuture<Never>
,因为该回调被静态确定为never正常返回。 因此,您的 Future.
catchErrorcallback also must be of type
Future` 的返回类型。
如果您的回调正文是:
print(value);
print('YNWA');
bool alwaysTrue() => true;
if (alwaysTrue()) {
throw ('ERORRRRRR!');
}
那么这足以防止静态分析确定
throw
始终执行,返回类型将被推断为 Future<void>
相反,Future.catchError
回调的返回类型将匹配,并且您不会最终出现未处理的异常。