Flutter中空数据如何处理?遇空值报错问题求助
Flutter JSON空值解析报错解决方法
使用可空类型适配Null Safety
把模型类中可能返回null的字段定义为可空类型,避免强制非空导致的报错:class User { final String? name; // 可空字符串类型 final int? age; // 可空数字类型 User({this.name, this.age}); factory User.fromJson(Map<String, dynamic> json) { return User( name: json['name'] as String?, age: json['age'] as int?, ); } }给空值设置默认值
如果业务上不允许字段为null,解析时可以通过??运算符给null字段赋予默认值:factory User.fromJson(Map<String, dynamic> json) { return User( name: json['name'] as String? ?? '未知名称', age: json['age'] as int? ?? 0, ); }借助json_serializable简化处理
使用json_serializable库可以自动处理空值,在模型类字段上添加注解配置:import 'package:json_annotation/json_annotation.dart'; part 'user.g.dart'; @JsonSerializable() class User { @JsonKey(defaultValue: '未知名称') final String name; @JsonKey(defaultValue: 0) final int age; User({required this.name, required this.age}); factory User.fromJson(Map<String, dynamic> json) => _$UserFromJson(json); Map<String, dynamic> toJson() => _$UserToJson(this); }执行
flutter pub run build_runner build生成解析代码后,会自动处理空值并填充默认值。手动判断空值字段
针对特定字段,解析前先判断是否存在且不为null,再进行类型转换:factory User.fromJson(Map<String, dynamic> json) { String? name; if (json.containsKey('name') && json['name'] != null) { name = json['name'] as String; } int? age; if (json.containsKey('age') && json['age'] != null) { age = json['age'] as int; } return User(name: name, age: age); }
内容的提问来源于stack exchange,提问作者Putra Budianto
相关产品推荐
相关产品推荐

