Flutter 中 then().catchError 中未处理的异常

问题描述 投票:0回答:1
    onPressed: () {
      getName().then((value)
        {
          print(value);
          print('YNWA');
          throw('ERORRRRRR!');
        }).catchError((error){
          print('error is : ${error.toString()}');
      });
    },
  

这是一个方法

 Future<String> getName() async {
return 'Basel Elazaly';

} }

为什么会出现未处理的异常?

flutter dart error-handling unhandled-exception
1个回答
0
投票

您尚未指定您遇到的什么未处理的异常。 当我尝试使用:

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
的返回类型被推断为a
Future<Never>
,因为该回调被静态确定为never正常返回。 因此,您的
Future.
catchError
callback also must be of type
Future` 的返回类型。

如果您的回调正文是:

    print(value);
    print('YNWA');
    
    bool alwaysTrue() => true;
    if (alwaysTrue()) {
      throw ('ERORRRRRR!');
    }

那么这足以防止静态分析确定

throw
始终执行,返回类型将被推断为
Future<void>
相反,
Future.catchError
回调的返回类型将匹配,并且您不会最终出现未处理的异常。

© www.soinside.com 2019 - 2024. All rights reserved.