Dol*_*rma 9 dart flutter riverpod flutter-freezed
在我的示例项目中,我使用riverpod包和freezed. 在下面的代码中,我可以成功从服务器获取数据,但是当我尝试使用时model.fromJson出现此错误:
getting type 'Null' is not a subtype of type 'Map<String, dynamic>' in type cast
Run Code Online (Sandbox Code Playgroud)
服务器响应数据:
getting type 'Null' is not a subtype of type 'Map<String, dynamic>' in type cast
Run Code Online (Sandbox Code Playgroud)
login模型来转换服务器响应的数据和结构:
{
"message": "test message",
"statusCode": 1
}
Run Code Online (Sandbox Code Playgroud)
在LoginResponse类中,我定义了两个参数message,statusCode它们由服务器返回。当我尝试使用此请求时,例如:
LoginModel loginModelFromJson(Map<String, dynamic> str) => LoginModel.fromJson(str);
String loginModelToJson(LoginModel data) => json.encode(data.toJson());
@freezed
class LoginModel with _$LoginModel {
const factory LoginModel({
required LoginResponse response,
}) = _LoginModel;
factory LoginModel.fromJson(Map<String, dynamic> json) => _$LoginModelFromJson(json);
}
@freezed
class LoginResponse with _$LoginResponse {
const factory LoginResponse({
required String message,
required int statusCode,
}) = _LoginResponse;
factory LoginResponse.fromJson(Map<String, dynamic> json) => _$LoginResponseFromJson(json);
}
Run Code Online (Sandbox Code Playgroud)
我在这行方法中遇到了前面提到的错误getResponse:
return loginModelFromJson(response.data as Map<String, dynamic>);
Run Code Online (Sandbox Code Playgroud)
您的响应 JSON 为空或包含不正确的内容。这就是为什么 Dart 无法将其转换为Map<String, dynamic>. 你必须手动完成
LoginResponse _$LoginResponseFromJson(Map<String, dynamic> json) {
return LoginResponse(
message: json['message'] as String,
statusCode: json['statusCode'] as int,
);
}
Run Code Online (Sandbox Code Playgroud)
改变
return loginModelFromJson(response.data as Map<String, dynamic>);
Run Code Online (Sandbox Code Playgroud)
到
return LoginResponse.fromJson(response.data);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
31971 次 |
| 最近记录: |