如何使用Http或Dio从Api中获取复杂数据



Hello Guys我真的需要一些帮助,我的脑子坏了

我有复杂的嵌套Json数据需要从api取回我试图使用quicktype这使我的模型,但每次我试图获得数据它给我这个错误

Unhandled Exception: type '_InternalLinkedHashMap<String, dynamic>' is not a subtype of type 'String'

这是我的Json结构

{
"success": true,
"data": {
"sliders": [
{
"id": 4,
"title": "ترس 3",
"text": null,
"link": null,
"image": "https://trscar.com/uploads/slider/1639729426.gif"
}
],
"latest_spar_part": [
{
"id": 2269,
"merchant": 0,
"payed": 2,
"title": "طقم دبرياج ديسك واسطوانه تويوتا كورولا 1300",
"price": 1148,
"favorite": false,
"image": "https://trscar.com/uploads/products/2269/1_1640198733.jpeg"
},
{
"id": 2268,
"merchant": 0,
"payed": 2,
"title": "طقم دبرياج ديسك واسطوانه دايو و شيفروليه لانوس",
"price": 1013,
"favorite": false,
"image": "https://trscar.com/uploads/products/2268/1_1640197396.jpeg"
},
{
"id": 2267,
"merchant": 0,
"payed": 2,
"title": "ديسك دبرياج دايو نوبيرا",
"price": 527,
"favorite": false,
"image": "https://trscar.com/uploads/products/2267/1_1640197240.jpeg"
},
{
"id": 2266,
"merchant": 0,
"payed": 2,
"title": "ديسك دبرياج عربيه ميتسوبيشي لانسر بوما",
"price": 506,
"favorite": false,
"image": "https://trscar.com/uploads/products/2266/1_1640196511.jpeg"
},
{
"id": 2265,
"merchant": 0,
"payed": 2,
"title": "طقم دبرياج ديسك واسطوانه وبليه كيا سيفيا",
"price": 1215,
"favorite": false,
"image": "https://trscar.com/uploads/products/2265/1_1640194197.jpeg"
}
],
"latest_cars": [
{
"id": 2296,
"merchant": 58,
"payed": 2,
"title": "هيونداي كريتا11",
"price": 285000,
"favorite": false,
"image": "https://trscar.com/uploads/products/2296/1_1645113413."
}
],
"img_offer": "https://trscar.com/uploads/setting/1637758178.png",
"cats": [
{
"id": 2,
"title": "اطــــــارات",
"image": "https://trscar.com/uploads/categories/1638446679.png"
},
{
"id": 5,
"title": "زيوت و سوائل",
"image": "https://trscar.com/uploads/categories/1638446688.png"
},
{
"id": 6,
"title": "هياكـــل",
"image": "https://trscar.com/uploads/categories/1638446698.png"
},
{
"id": 7,
"title": "ميكانيكا",
"image": "https://trscar.com/uploads/categories/1638446713.png"
},
{
"id": 8,
"title": "اكسسوارات",
"image": "https://trscar.com/uploads/categories/1638446722.png"
},
{
"id": 9,
"title": "عفشه",
"image": "https://trscar.com/uploads/categories/1638446734.png"
},
{
"id": 10,
"title": "كهرباء",
"image": "https://trscar.com/uploads/categories/1638446742.png"
},
{
"id": 11,
"title": "بطاريات",
"image": "https://trscar.com/uploads/categories/1638446762.png"
},
{
"id": 12,
"title": "فلاتر",
"image": "https://trscar.com/uploads/categories/1638446750.png"
},
{
"id": 13,
"title": "فرامل",
"image": "https://trscar.com/uploads/categories/1638446789.png"
},
{
"id": 16,
"title": "قطع الغيار",
"image": "https://trscar.com/uploads/categories/1641893130.jpg"
},
{
"id": 17,
"title": "السيارات",
"image": "https://trscar.com/uploads/categories/1641893157.jpg"
}
],
"latest_products": [
{
"id": 2296,
"merchant": 58,
"payed": 2,
"title": "هيونداي كريتا11",
"price": 285000,
"favorite": false,
"image": "https://trscar.com/uploads/products/2296/1_1645113413."
},
{
"id": 2271,
"merchant": 38,
"payed": 2,
"title": "فرامل",
"price": 300,
"favorite": false,
"image": "https://trscar.com/uploads/products/2271/1_1641392298.png"
},
{
"id": 2269,
"merchant": 0,
"payed": 2,
"title": "طقم دبرياج ديسك واسطوانه تويوتا كورولا 1300",
"price": 1148,
"favorite": false,
"image": "https://trscar.com/uploads/products/2269/1_1640198733.jpeg"
},
{
"id": 2268,
"merchant": 0,
"payed": 2,
"title": "طقم دبرياج ديسك واسطوانه دايو و شيفروليه لانوس",
"price": 1013,
"favorite": false,
"image": "https://trscar.com/uploads/products/2268/1_1640197396.jpeg"
},
{
"id": 2267,
"merchant": 0,
"payed": 2,
"title": "ديسك دبرياج دايو نوبيرا",
"price": 527,
"favorite": false,
"image": "https://trscar.com/uploads/products/2267/1_1640197240.jpeg"
},
{
"id": 2266,
"merchant": 0,
"payed": 2,
"title": "ديسك دبرياج عربيه ميتسوبيشي لانسر بوما",
"price": 506,
"favorite": false,
"image": "https://trscar.com/uploads/products/2266/1_1640196511.jpeg"
},
{
"id": 2265,
"merchant": 0,
"payed": 2,
"title": "طقم دبرياج ديسك واسطوانه وبليه كيا سيفيا",
"price": 1215,
"favorite": false,
"image": "https://trscar.com/uploads/products/2265/1_1640194197.jpeg"
},
{
"id": 2264,
"merchant": 0,
"payed": 2,
"title": "طقم دبرياج ديسك واسطوانه وبليه شيفروليه اوبترا",
"price": 1991,
"favorite": false,
"image": "https://trscar.com/uploads/products/2264/1_1640194007.jpeg"
},
{
"id": 2263,
"merchant": 0,
"payed": 2,
"title": "طقم دبرياج ديسك واسطوانه وبليه شيفروليه سبارك",
"price": 1215,
"favorite": false,
"image": "https://trscar.com/uploads/products/2263/1_1640193872.jpeg"
},
{
"id": 2262,
"merchant": 0,
"payed": 2,
"title": "طقم دبرياج ديسك واسطوانه وبليه كيا برايد",
"price": 1080,
"favorite": false,
"image": "https://trscar.com/uploads/products/2262/1_1640193664.jpeg"
},
{
"id": 2261,
"merchant": 0,
"payed": 2,
"title": "طقم دبرياج ديسك واسطوانه وبليه سوزوكي ماروتي",
"price": 1148,
"favorite": false,
"image": "https://trscar.com/uploads/products/2261/1_1640193540.jpeg"
},
{
"id": 2260,
"merchant": 0,
"payed": 2,
"title": "طقم دبرياج ديسك واسطوانه سوزوكي فان نقل وتمنايه",
"price": 911,
"favorite": false,
"image": "https://trscar.com/uploads/products/2260/1_1640193233.jpeg"
},
{
"id": 2259,
"merchant": 0,
"payed": 2,
"title": "اسطوانه دبرياج تويوتا ميكروباص ماكينه 2L",
"price": 608,
"favorite": false,
"image": "https://trscar.com/uploads/products/2259/1_1640193079.jpeg"
},
{
"id": 2258,
"merchant": 0,
"payed": 2,
"title": "اسطوانه دبرياج تويوتا داينا",
"price": 1013,
"favorite": false,
"image": "https://trscar.com/uploads/products/2258/1_1640192930.jpeg"
},
{
"id": 2257,
"merchant": 0,
"payed": 2,
"title": "طقم دبرياج ديسك واسطوانه وبليه دبرياج دايو جوليت",
"price": 1215,
"favorite": false,
"image": "https://trscar.com/uploads/products/2257/1_1640192788.jpeg"
},
{
"id": 2256,
"merchant": 0,
"payed": 2,
"title": "ديسك دبرياج شيفروليه NKR ثلث نقل",
"price": 1148,
"favorite": false,
"image": "https://trscar.com/uploads/products/2256/1_1640192604.jpeg"
}
],
"pro_more_arr": [
{
"id": 2269,
"merchant": 0,
"payed": 2,
"title": "طقم دبرياج ديسك واسطوانه تويوتا كورولا 1300",
"price": 1148,
"favorite": false,
"image": "https://trscar.com/uploads/products/2269/1_1640198733.jpeg"
},
{
"id": 2268,
"merchant": 0,
"payed": 2,
"title": "طقم دبرياج ديسك واسطوانه دايو و شيفروليه لانوس",
"price": 1013,
"favorite": false,
"image": "https://trscar.com/uploads/products/2268/1_1640197396.jpeg"
},
{
"id": 2267,
"merchant": 0,
"payed": 2,
"title": "ديسك دبرياج دايو نوبيرا",
"price": 527,
"favorite": false,
"image": "https://trscar.com/uploads/products/2267/1_1640197240.jpeg"
},
{
"id": 784,
"merchant": 0,
"payed": 2,
"title": "فلتر هواء شيفرولية كروز",
"price": 115,
"favorite": false,
"image": "https://trscar.com/uploads/products/784/1_1635592243.jpeg"
},
{
"id": 310,
"merchant": 0,
"payed": 2,
"title": "طقم تيل فرامل امامي هيونداي النترا XD",
"price": 297,
"favorite": false,
"image": "https://trscar.com/uploads/products/310/1_1634376815.jpeg"
}
]
},
"message": "Success",
"code": 200}

Quicktype生成的模型类

//     final homeItems = homeItemsFromJson(jsonString);
import 'dart:convert';
HomeItems homeItemsFromJson(String str) => HomeItems.fromJson(json.decode(str));
String homeItemsToJson(HomeItems data) => json.encode(data.toJson());
class HomeItems {
HomeItems({
required this.success,
required this.data,
required this.message,
required this.code,
});
bool success;
DataItems data;
String message;
int code;
factory HomeItems.fromJson(Map<String, dynamic> json) => HomeItems(
success: json["success"],
data: DataItems.fromJson(json["data"]),
message: json["message"],
code: json["code"],
);
Map<String, dynamic> toJson() => {
"success": success,
"data": data.toJson(),
"message": message,
"code": code,
};
}
class DataItems {
DataItems({
required this.sliders,
required this.latestSparPart,
required this.latestCars,
required this.imgOffer,
required this.cats,
required this.latestProducts,
required this.proMoreArr,
});
List<Slider> sliders;
List<LatestCar> latestSparPart;
List<LatestCar> latestCars;
String imgOffer;
List<Cat> cats;
List<LatestCar> latestProducts;
List<LatestCar> proMoreArr;
factory DataItems.fromJson(Map<String, dynamic> json) => DataItems(
sliders:
List<Slider>.from(json["sliders"].map((x) => Slider.fromJson(x))),
latestSparPart: List<LatestCar>.from(
json["latest_spar_part"].map((x) => LatestCar.fromJson(x))),
latestCars: List<LatestCar>.from(
json["latest_cars"].map((x) => LatestCar.fromJson(x))),
imgOffer: json["img_offer"],
cats: List<Cat>.from(json["cats"].map((x) => Cat.fromJson(x))),
latestProducts: List<LatestCar>.from(
json["latest_products"].map((x) => LatestCar.fromJson(x))),
proMoreArr: List<LatestCar>.from(
json["pro_more_arr"].map((x) => LatestCar.fromJson(x))),
);
Map<String, dynamic> toJson() => {
"sliders": List<dynamic>.from(sliders.map((x) => x.toJson())),
"latest_spar_part":
List<dynamic>.from(latestSparPart.map((x) => x.toJson())),
"latest_cars": List<dynamic>.from(latestCars.map((x) => x.toJson())),
"img_offer": imgOffer,
"cats": List<dynamic>.from(cats.map((x) => x.toJson())),
"latest_products":
List<dynamic>.from(latestProducts.map((x) => x.toJson())),
"pro_more_arr": List<dynamic>.from(proMoreArr.map((x) => x.toJson())),
};
}
class Cat {
Cat({
required this.id,
required this.title,
required this.image,
});
int id;
String title;
String image;
factory Cat.fromJson(Map<String, dynamic> json) => Cat(
id: json["id"],
title: json["title"],
image: json["image"],
);
Map<String, dynamic> toJson() => {
"id": id,
"title": title,
"image": image,
};
}
class LatestCar {
LatestCar({
required this.id,
required this.merchant,
required this.payed,
required this.title,
required this.price,
required this.favorite,
required this.image,
});
int id;
int merchant;
int payed;
String title;
int price;
bool favorite;
String image;
factory LatestCar.fromJson(Map<String, dynamic> json) => LatestCar(
id: json["id"],
merchant: json["merchant"],
payed: json["payed"],
title: json["title"],
price: json["price"],
favorite: json["favorite"],
image: json["image"],
);
Map<String, dynamic> toJson() => {
"id": id,
"merchant": merchant,
"payed": payed,
"title": title,
"price": price,
"favorite": favorite,
"image": image,
};
}
class Slider {
Slider({
required this.id,
required this.title,
required this.text,
required this.link,
required this.image,
});
int id;
String title;
dynamic text;
dynamic link;
String image;
factory Slider.fromJson(Map<String, dynamic> json) => Slider(
id: json["id"],
title: json["title"],
text: json["text"],
link: json["link"],
image: json["image"],
);
Map<String, dynamic> toJson() => {
"id": id,
"title": title,
"text": text,
"link": link,
"image": image,
};
}

下面是我用

获取数据的代码
Future<HomeItems> getProducts() async {
var options = Options(
headers: {
'Accept': 'application/json',
'x-api-key': 'mwDA9w',
'Content-Language': 'ar',
'Content-Country': 1,
'Authorization': 'Bearer $bearerToken',
},
contentType: 'application/json',
);
var response = await Dio().get('$baseUrl/home', options: options);
return homeItemsFromJson(response.data);
}

我真的很感谢你花时间帮助我

也可以使用http。[https://pub.dev/packages/http]

解析json响应到模型类:https://javiercbk.github.io/json_to_dart/

http调用示例:
Future<HomeItems> getProducts() async {
var headers = {
'Accept': 'application/json',
'x-api-key': 'mwDA9w',
'Content-Language': 'ar',
'Content-Country': 1,
'Authorization': 'Bearer $bearerToken',
contentType: 'application/json',
};
var response = await http.get( Uri.parse('$baseUrl/home'), headers: headers );
HomeItems homeItems=
HomeItems.fromJson(json.decode(utf8.decode(response.bodyBytes)));
return homeItems;
}

最新更新