用户模型将空数据发送到 api

User model sends null data to the api

我有一个 api 可以获取我的用户数据。我制作了一个用户模型,它在解码后保存用户的数据。在对 api 中的用户资源(例如配置文件名称)进行一些更改和 POST 之后,用户模型的 toJson() 方法将其他用户对象作为空值发送到 api,不包括更新的字段。

预期行为: toJson() 方法应该检查空对象并将其替换为从 api 获取的先前数据,而不是将空对象发送到 api.

有没有办法让用户模型在发送到 api 时保留用户值?

这是我的用户模型class

String userModelToJson(UserModel 数据) => jsonEncode(数据);

@JsonSerializable()
class UserModel {
  UserModel({
    this.type,
    this.bio,
    this.name,
    this.interests,
    this.presentation,
    this.links,
    this.location,
    this.school,
    this.occupation,
    this.createdAt,
    this.lastUpdatedAt,
  });

  final String? type;
  final String? bio;
  final String? name;
  final List<dynamic>? interests;
  final Presentation? presentation;
  final Links? links;
  final Location? location;
  final School? school;
  final Occupation? occupation;
  final int? createdAt;
  final int? lastUpdatedAt;

  factory UserModel.fromJson(Map<String, dynamic> json) =>
      _$UserModelFromJson(json);

  Map<String, dynamic> toJson() => _$UserModelToJson(this);
}

json_serializable 用户模型

UserModel _$UserModelFromJson(Map<String, dynamic> json) => UserModel(
      type: json['type'] as String?,
      bio: json['bio'] as String?,
      name: json['name'] as String?,
      interests: json['interests'] as List<dynamic>?,
      presentation: json['presentation'] == null
          ? null
          : Presentation.fromJson(json['presentation'] as Map<String, dynamic>),
      links: json['links'] == null
          ? null
          : Links.fromJson(json['links'] as Map<String, dynamic>),
      location: json['location'] == null
          ? null
          : Location.fromJson(json['location'] as Map<String, dynamic>),
      school: json['school'] == null
          ? null
          : School.fromJson(json['school'] as Map<String, dynamic>),
      occupation: json['occupation'] == null
          ? null
          : Occupation.fromJson(json['occupation'] as Map<String, dynamic>),
      createdAt: json['createdAt'] as int?,
      lastUpdatedAt: json['lastUpdatedAt'] as int?,
    );

Map<String, dynamic> _$UserModelToJson(UserModel instance) => <String, dynamic>{
      'type': instance.type,
      'bio': instance.bio,
      'name': instance.name,
      'interests': instance.interests,
      'presentation': instance.presentation,
      'links': instance.links,
      'location': instance.location,
      'school': instance.school,
      'occupation': instance.occupation,
    };

Get user method 

  Future<UserModel> getUserData() async {
    UserModel? user;
    final token = await _storage.getKey("Token");
    ApiService.client.options.headers['Authorization'] = 'Bearer $token';
    final response = await ApiService.client.get(ApiEndpoint.profile);
    if (response.statusCode == 200 || response.statusCode == 201) {
      user = UserModel.fromJson(response.data);
      return user;
    } else {
      throw "Couldn't load user";
    }
  }

创建文件static_variable.dart

class StaticVariable {
  static UserModel? user;
}

user 数据保存到 StaticVariable

Future<UserModel> getUserData() async {
    UserModel? user;
    final token = await _storage.getKey("Token");
    ApiService.client.options.headers['Authorization'] = 'Bearer $token';
    final response = await ApiService.client.get(ApiEndpoint.profile);
    if (response.statusCode == 200 || response.statusCode == 201) {
      user = UserModel.fromJson(response.data);
      StaticVariable.user = user; //save user variable to StaticVariable
      return user;
    } else {
      throw "Couldn't load user";
    }
  }

使用??操作检查空值

Map<String, dynamic> _$UserModelToJson(UserModel instance) => <String, dynamic>{
      'type': instance.type ?? StaticVariable!.user.type,
      'bio': instance.bio ?? StaticVariable!.user.bio,
      'name': instance.name ?? StaticVariable!.user.name,
      'interests': instance.interests ?? StaticVariable!.user.interests,
      'presentation': instance.presentation ?? StaticVariable!.user.presentation,
      'links': instance.links ?? StaticVariable!.user.links,
      'location': instance.location ?? StaticVariable!.user.location,
      'school': instance.school ?? StaticVariable!.user.school,
      'occupation': instance.occupation ?? StaticVariable!.user.ccupation,
    };

'type': instance.type ?? "",意思是:

if(instance.type == null){
  'type': StaticVariable.user.type
} else {
  'type': instance.type
}