【发布时间】:2021-05-26 16:01:09
【问题描述】:
实际上我是这个框架的新手,我想知道如何处理我们从 API 获得的不同响应。
这是我的 API 的成功响应。
{
"errors": false,
"data": {
"success": "true",
"result": {
"id": 16,
"name": "Example",
"email": "example@gmail.com",
"mobile": "9999999999",
"profile_image": "profile-1613993577.jpg",
"api_token": "b81baea1dc68ed163e16d83e53478745352a5f43a5d290e18cd",
"type": "2",
"tax": null,
"delivery_charge": null,
"max_order_qty": null,
"min_order_amount": null,
"max_order_amount": null,
"lat": null,
"lang": null,
"token": "",
"is_available": "1",
"otp": "552277",
"is_verified": "1",
"created_at": "2021-02-22T10:42:52.000000Z",
"updated_at": "2021-02-22T13:52:56.000000Z"
},
"message": "Logged in successfully"
},
"status_code": 200
}
这是我的 API 的错误响应。
{
"errors": true,
"data": {
"message": "Password Invalid",
"result": "Not Available or Invalid"
},
"status_code": 400
}
这是我使用成功响应生成的模型页面。
import 'dart:convert';
ResponseModel responseModelFromJson(String str) =>
ResponseModel.fromJson(json.decode(str));
String responseModelToJson(ResponseModel data) => json.encode(data.toJson());
// This Is the Main Model Class
class ResponseModel {
ResponseModel({
this.errors,
this.data,
this.statusCode,
});
bool errors;
Data data;
int statusCode;
factory ResponseModel.fromJson(Map<String, dynamic> json) => ResponseModel(
errors: json["errors"],
data: Data.fromJson(json["data"]),
statusCode: json["status_code"],
);
Map<String, dynamic> toJson() => {
"errors": errors,
"data": data.toJson(),
"status_code": statusCode,
};
}
//This is the Data Model Class
class Data {
Data({
this.success,
this.result,
this.message,
});
String success;
Result result;
String message;
factory Data.fromJson(Map<String, dynamic> json) => Data(
success: json["success"] == null ? null : json["success"],
result: json["result"] == null ? null : Result.fromJson(json["result"]),
message: json["message"] == null ? null : json["message"],
);
Map<String, dynamic> toJson() => {
"success": success == null ? null : success,
"result": result == null ? null : result.toJson(),
"message": message == null ? null : message,
};
}
//This is the Result Model Class
class Result {
Result({
this.id,
this.name,
this.email,
this.mobile,
this.profileImage,
this.apiToken,
this.type,
this.tax,
this.deliveryCharge,
this.maxOrderQty,
this.minOrderAmount,
this.maxOrderAmount,
this.lat,
this.lang,
this.token,
this.isAvailable,
this.otp,
this.isVerified,
this.createdAt,
this.updatedAt,
});
int id;
String name;
String email;
String mobile;
String profileImage;
String apiToken;
String type;
dynamic tax;
dynamic deliveryCharge;
dynamic maxOrderQty;
dynamic minOrderAmount;
dynamic maxOrderAmount;
dynamic lat;
dynamic lang;
String token;
String isAvailable;
String otp;
String isVerified;
DateTime createdAt;
DateTime updatedAt;
factory Result.fromJson(Map<String, dynamic> json) => Result(
id: json["id"],
name: json["name"],
email: json["email"],
mobile: json["mobile"],
profileImage: json["profile_image"],
apiToken: json["api_token"],
type: json["type"],
tax: json["tax"],
deliveryCharge: json["delivery_charge"],
maxOrderQty: json["max_order_qty"],
minOrderAmount: json["min_order_amount"],
maxOrderAmount: json["max_order_amount"],
lat: json["lat"],
lang: json["lang"],
token: json["token"],
isAvailable: json["is_available"],
otp: json["otp"],
isVerified: json["is_verified"],
createdAt: DateTime.parse(json["created_at"]),
updatedAt: DateTime.parse(json["updated_at"]),
);
Map<String, dynamic> toJson() => {
"id": id,
"name": name,
"email": email,
"mobile": mobile,
"profile_image": profileImage,
"api_token": apiToken,
"type": type,
"tax": tax,
"delivery_charge": deliveryCharge,
"max_order_qty": maxOrderQty,
"min_order_amount": minOrderAmount,
"max_order_amount": maxOrderAmount,
"lat": lat,
"lang": lang,
"token": token,
"is_available": isAvailable,
"otp": otp,
"is_verified": isVerified,
"created_at": createdAt.toIso8601String(),
"updated_at": updatedAt.toIso8601String(),
};
}
// This is the Request Model Class for the Email And Password I'm doing The Validation, No issue in this
class RequestModel {
String email;
String password;
RequestModel({
this.email,
this.password,
});
Map<String, dynamic> toJson() {
Map<String, dynamic> map = {
'email': email.trim(),
'password': password.trim(),
};
return map;
}
}
这是我未来的课程
class APIService {
Future<ResponseModel> api(RequestModel requestModel) async {
String url = "https://www.americancuisine.in/api/v1/login";
print(requestModel);
final response = await http.post(url, body: requestModel.toJson());
if (response.statusCode == 200) {
print(response.body);
return ResponseModel.fromJson(
json.decode(response.body),
);
} else if (response.statusCode == 400 || response.statusCode == 422) {
print(response.body);
return ResponseModel.fromJson(
json.decode(response.body),
);
// throw Exception('Error Exists!');
} else {
print(response);
throw Exception('Failed to load data!');
}
}
}
【问题讨论】:
-
这里一切正常,但您有什么问题?你有什么错误吗?
-
其实当我得到Error Response的时候它会抛出Exception异常发生了。 _TypeError(类型 'String' 不是类型 'Map
' 的子类型) -
我想我有问题。我现在很忙。我一定会帮助你的。保持联系。谢谢。
-
好吧,你什么时候有空请联系我。
-
你能发一下这个片段吗?因为我是这方面的新手,所以请帮助我。
标签: android api rest flutter dart