Flutter运行报错type 'Null' is not a subtype of type 'String'求助
错误根因
你遇到的type 'Null' is not a subtype of type 'String'异常属于Dart空安全校验触发的类型错误,核心原因是OperationModel构造逻辑中,你给一个声明为非空String类型的字段传入了null值,非空类型不允许接收空值,因此抛出异常。
排查步骤
- 首先打开
operation.dart文件定位第12行对应的字段赋值逻辑,确认是哪个String类型的字段在接收值 - 核对
operationData配置数组中对应字段:- 检查是否存在字段漏写、拼写错误(比如把
title写成titel),导致字段取值为null - 检查字段赋值是否存在动态取值为null的情况(比如取接口返回的空字段)
- 检查是否存在字段漏写、拼写错误(比如把
- 排查
HomeScreen渲染逻辑:是否在操作数据未完成加载/初始化的情况下就直接构建OperationModel,导致传入空值
修复方案
方案1:字段允许为空(适配字段可能为空的业务场景)
将OperationModel中可能为空的String字段改为可空类型,同时在OperationCard组件中使用时做判空兼容:
// OperationModel字段定义修改示例 class OperationModel { final String? title; final String? iconUrl; // 其他字段 OperationModel({this.title, this.iconUrl}); } // OperationCard使用时加默认值 Text(operation.title ?? '默认操作名称') Image.network(operation.iconUrl ?? '默认占位图地址')
方案2:构造时加非空默认值(业务要求字段不能为空的场景)
在OperationModel构造函数中给所有String类型字段设置默认空值,避免接收null时抛错:
class OperationModel { final String title; final String iconUrl; // 其他字段 OperationModel({ this.title = '', this.iconUrl = '', // 其他字段默认值 }); }
方案3:补全operationData配置
如果是配置项漏写/拼写错误导致的空值,逐行核对operationData中每一项的字段和OperationModel要求的字段完全匹配,确保所有String字段的赋值都是非空值。
快速调试技巧
你可以在OperationModel构造逻辑中加入打印语句,快速定位哪个字段是空值:
// 如果是fromJson构造的示例 factory OperationModel.fromJson(Map<String, dynamic> json) { print('title值:${json['title']}, iconUrl值:${json['iconUrl']}'); // 原有构造逻辑 }
运行后查看控制台输出,值为null的字段就是问题字段。
内容的提问来源于stack exchange,提问作者MaybeExpertDBA
相关产品推荐
相关产品推荐

