flutter 为什么在dart中收到异常消息时会出现“Exception:“?

lmvvr0a8  于 2022-11-30  发布在  Flutter
关注(0)|答案(4)|浏览(162)

大家好,我是dart和flutter框架的新手。
我从调用API的服务类中抛出如下错误。

if(res["status"]!=200) throw new Exception("Invalid User");

并在演示者类中接收(如下所示)和打印

.catchError((Object error){
      print(error);

});

我希望得到的结果是“无效用户”,但我得到了额外的词,如“异常:用户””无效.您能解释一下为什么会出现“Exception”这个附加词吗?以及如何才能只获取正在传递得字符串.

uplii1fm

uplii1fm1#

令人惊讶的是,这就是异常toString代码的编写方式。

String toString() {
    if (message == null) return "Exception";
    return "Exception: $message";  // your message will be appended after exception. 
  }

如果你想避免这种情况,那么你必须创建自定义例外如下:

class HttpException implements Exception {
  final String message;

  HttpException(this.message);  // Pass your message in constructor. 

  @override
  String toString() {
    return message;
  }
}
snz8szmq

snz8szmq2#

您可以使用Exception objectmessage属性

.catchError((error){
  print(error.message);

});

这应该输出Invalid User
我希望这是你要找的。

bxjv4tth

bxjv4tth3#

快速解决方案:

.catchError((error){
  print(
    error.toString().substring(11)
  );
});

您剪切了前11个消息字符,即“Exception:“.

yb3bgrhw

yb3bgrhw4#

您可以在dart中创建扩展函数

extension FormattedMessage on Exception {
  String get getMessage {
    if (this.toString().startsWith("Exception: ")) {
      return this.toString().substring(11);
    }else {
      return this.toString();
    }
  }
}

之后,您只需调用

exception.getMessage;

以获取扩展消息,而不必实现Extension类或向用户显示异常是如何成为子字符串的。

相关问题