Flutter Retrofit 问题,一个 API 中存在两个不同的 json 响应

问题描述 投票:0回答:1
我一直在使用Retrofit进行Api调用。在其中一个 API 中发送两个不同的响应并尝试将它们放入

Map<String, dynamic>

 但在生成的文件中它显示错误。

当我将响应类型设置为 Map 时,其中一个响应很好,但在其他响应中具有不同类型的键。当类型为

Map<String, String> 并且 Json 键具有 int 值时,会捕获异常。

一个回复

{ "count": 1, "login_type": "PASSWORD", "success": true, "type": "object", "data": { "token_type": "Bearer", "expires_in": 1200, "access_token": "1o+BYL3LWRs+JpHMK3E5", "refresh_token": "OAPwbwFORpQ0R6sg", "userId": 358 } }

其他回复

{"count":1,"type":"success","data":{"success":true,"otpEnabled":true,"message":"OTP has been sent to your mobile no 62*****32","timestamp":"","otp":572800}}

错误

type 'int' is not a subtype of type 'String' in type cast


flutter api retrofit
1个回答
0
投票

Row( children: <Widget>[ ElevatedButton( onPressed: firstAPI, child: const Text("Call First"), ), ElevatedButton( onPressed: secondAPI, child: const Text("Call Second API"), ), ], ), ),

第一次 API 调用(一个响应):

Future<void> firstAPI() async { const String path = "https://www.jsonkeeper.com/b/99ID"; // hosted One res final Response<dynamic> res = await Dio().get(path); final FirstModel firstModel = FirstModel.fromJson(res.data); log("firstAPI(): ${firstModel.toJson()}"); return Future<void>.value(); }

第二次API调用(其他响应):

Future<void> secondAPI() async { const String path = "https://www.jsonkeeper.com/b/49KW"; // hosted Other res final Response<dynamic> res = await Dio().get(path); final SecondModel secondModel = SecondModel.fromJson(res.data); log("secondAPI(): ${secondModel.toJson()}"); return Future<void>.value(); }

first_model.dart:

class FirstModel { FirstModel({this.count, this.loginType, this.success, this.type, this.data}); FirstModel.fromJson(Map<String, dynamic> json) { count = json["count"]; loginType = json["login_type"]; success = json["success"]; type = json["type"]; data = json["data"] != null ? Data.fromJson(json["data"]) : null; } int? count; String? loginType; bool? success; String? type; Data? data; Map<String, dynamic> toJson() { final Map<String, dynamic> data = <String, dynamic>{}; data["count"] = count; data["login_type"] = loginType; data["success"] = success; data["type"] = type; if (this.data != null) { data["data"] = this.data!.toJson(); } return data; } } class Data { Data({ this.tokenType, this.expiresIn, this.accessToken, this.refreshToken, this.userId, }); Data.fromJson(Map<String, dynamic> json) { tokenType = json["token_type"]; expiresIn = json["expires_in"]; accessToken = json["access_token"]; refreshToken = json["refresh_token"]; userId = json["userId"]; } String? tokenType; int? expiresIn; String? accessToken; String? refreshToken; int? userId; Map<String, dynamic> toJson() { final Map<String, dynamic> data = <String, dynamic>{}; data["token_type"] = tokenType; data["expires_in"] = expiresIn; data["access_token"] = accessToken; data["refresh_token"] = refreshToken; data["userId"] = userId; return data; } }

第二个模型.dart:

class SecondModel { SecondModel({this.count, this.type, this.data}); SecondModel.fromJson(Map<String, dynamic> json) { count = json["count"]; type = json["type"]; data = json["data"] != null ? Data.fromJson(json["data"]) : null; } int? count; String? type; Data? data; Map<String, dynamic> toJson() { final Map<String, dynamic> data = <String, dynamic>{}; data["count"] = count; data["type"] = type; if (this.data != null) { data["data"] = this.data!.toJson(); } return data; } } class Data { Data({this.success, this.otpEnabled, this.message, this.timestamp, this.otp}); Data.fromJson(Map<String, dynamic> json) { success = json["success"]; otpEnabled = json["otpEnabled"]; message = json["message"]; timestamp = json["timestamp"]; otp = json["otp"]; } bool? success; bool? otpEnabled; String? message; String? timestamp; int? otp; Map<String, dynamic> toJson() { final Map<String, dynamic> data = <String, dynamic>{}; data["success"] = success; data["otpEnabled"] = otpEnabled; data["message"] = message; data["timestamp"] = timestamp; data["otp"] = otp; return data; } }

输出:

© www.soinside.com 2019 - 2024. All rights reserved.