我有一個顫動的應用程式在某個時候檢索一個串列/或任何事情,如果請求有任何問題,則會收到不同的回應。
例如:
{
"status" : "success",
"message":
[
{
"updated_on" : "2022-01-09 14:26:07"
}
]
}
對于失敗:
{
"status" : "error",
"message" : "Query not found"
}
使用quicktype.io,我創建了如下類:
class ResponseList {
ResponseList({
required this.status,
required this.message,
});
String status;
List<dynamic> message;
factory ResponseList.fromJson(Map<String, dynamic> json) => ResponseList(
status: json["status"],
message: List<dynamic>.from(json["message"].map((x) => CLASSNAME.fromJson(x))),
);
Map<String, dynamic> toJson() => {
"status": status,
"message": List<dynamic>.from(message.map((x) => x.toJson())),
};
}
ResponseList responseAllFromJson(String str) => ResponseList.fromJson(json.decode(str)); 現在,問題是,失敗時,當我嘗試呼叫exeption 所說的位置時,這會引發例外
[ERROR:flutter/lib/ui/ui_dart_state.cc(209)] Unhandled Exception: type 'String' is not a subtype of type 'List<dynamic>'。
我希望有一個方法首先檢查狀態,無論是成功還是失敗,然后決議 json 的剩余部分(in message)或決議整個 json 并回傳適當的回應(失敗時的文本和成功時的物件串列)。
注意:我想要一個可重用的代碼,這樣我就可以將回應傳遞給方法并從我的應用程式中的任何位置檢索它。例如:
static bool responseStatus(dynamic response) {
if (response != null) {
if (responseListFromJson(response).status.trim().toLowerCase() == 'success') {
return true;
}
}
return false;
}
目前,上面對失敗提出了例外,但在成功時作業順利。
uj5u.com熱心網友回復:
您可以在決議時嘗試這種方式。
class MainResponse {
String status;
dynamic message;
MainResponse({this.status, this.message});
MainResponse.fromJson(Map<String, dynamic> json) {
status = json['status'];
if(json['message'] is String) {
message = json['message'];
}else {
message = <Message>[];
json['message'].forEach((v) {
message.add(new Message.fromJson(v));
});
}
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['status'] = this.status;
if (this.message != null) {
if(this.message is String) {
data['message'] = this.message;
}else {
data['message'] = this.message.map((v) => v.toJson()).toList();
}
}
return data;
}
}
class Message {
String updatedOn;
Message({this.updatedOn});
Message.fromJson(Map<String, dynamic> json) {
updatedOn = json['updated_on'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['updated_on'] = this.updatedOn;
return data;
}
}
并這樣稱呼:
MainResponse mainResponse = MainResponse.fromJson(response);
還有這個 :
if(mainResponse.message is String) {
var data = mainResponse.message as String;
print('parsed String $data');
}else {
var list = mainResponse.message as List<Message>;
print('parsed ${list[0].updatedOn }');
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/410066.html
標籤:
