You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 02:57:07