用户模型将空数据发送到 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
}
我有一个 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
}