Flutter模型编写空值错误修复及DiaryTagList类List参数默认值设置方法
解决Flutter模型中List类型的空值错误
嘿,作为Flutter初学者碰到空安全的问题太正常了,我来一步步帮你搞定这个错误!
错误原因
你开启了Flutter的空安全(Null Safety),List<String>类型被默认标记为非空类型,但你的构造函数里this.tagList既没有加required修饰符(要求必须传参),也没有设置非空的默认值,所以Dart会提示你参数隐式默认值为null,不符合类型要求。
两种解决方案(重点看第一种,符合你要默认值的需求)
方案1:给tagList设置默认空列表
这是最适合你的场景,即使外部不传tagList参数,类实例也会拥有一个空的列表,彻底避免null错误。修改后的代码如下:
class DiaryTagList { List<String> tagList; // 构造函数:给tagList设置默认值为空列表(用const更高效,避免重复创建对象) DiaryTagList({this.tagList = const []}); DiaryTagList.fromJson(Map<String, dynamic> json) { // 用空合并运算符??:如果json里没有'tag_list'字段,就赋值为空列表 tagList = json['tag_list']?.cast<String>() ?? []; } Map<String, dynamic> toJson() { final Map<String, dynamic> data = new Map<String, dynamic>(); data['tag_list'] = this.tagList; return data; } }
方案2:标记tagList为必填参数(补充参考)
如果你要求外部必须传入tagList,不能省略,可以用required修饰符:
class DiaryTagList { List<String> tagList; // 构造函数:用required标记参数必须传入 DiaryTagList({required this.tagList}); DiaryTagList.fromJson(Map<String, dynamic> json) { // 依然保留空合并,避免json里没有该字段时出现null tagList = json['tag_list']?.cast<String>() ?? []; } Map<String, dynamic> toJson() { final Map<String, dynamic> data = new Map<String, dynamic>(); data['tag_list'] = this.tagList; return data; } }
关键知识点小提示
const []:创建一个不可变的空列表,作为默认值很高效,不会每次实例化都生成新的列表对象。??:空合并运算符,左边表达式为null时,就返回右边的值,确保tagList永远不会是null。required:告诉Dart这个参数必须被传入,不能省略。
内容的提问来源于stack exchange,提问作者Choi yun seok
相关产品推荐
相关产品推荐

