为什么我的Flutter代码中print()语句无输出且报int不是String子类错误
问题原因
- 目标print语句没有执行,是因为catch代码块内部在运行到这行print之前就触发了新的
int转String的类型异常,直接跳出了当前catch逻辑,所以这行代码不会被运行。 - 报错
type 'int' is not a subtype of type 'String'的常见触发场景集中在catch块内的异常信息处理逻辑:- 你直接把后端返回的int类型字段(比如状态码
statusCode、错误码code等)赋值给了String类型的变量,或者直接和字符串拼接,Dart不支持int和String类型的隐式转换 - 你解析异常返回的JSON数据时,某字段后端实际返回的是int类型,但你定义的接收变量是String类型,没有做显式转换就直接赋值
- 你直接把后端返回的int类型字段(比如状态码
排查方案
你可以先给catch块嵌套一层try-catch定位具体报错行:
try { // 原有注册请求逻辑 } catch (e) { try { // 你原有catch块内的所有逻辑 print("I can no see thiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiis"); // 其他异常处理、弹窗逻辑 } catch (innerE, stackTrace) { print("内层catch报错:$innerE"); print("报错栈:$stackTrace"); } }
定位到具体行后,把所有从异常对象、响应体里取的字段,需要用到String类型的位置,统一加toString()做显式转换即可,比如:
// 错误写法 String errMsg = "注册失败,错误码:" + error.response.statusCode; // 正确写法 String errMsg = "注册失败,错误码:${error.response?.statusCode?.toString() ?? '未知'}";
内容的提问来源于stack exchange,提问作者GoodMan
相关产品推荐
相关产品推荐

