Hi im creating this model class Users and it look like this
class User {
int? id;
String? name;
String? username;
String? email;
Address? address;
String? phone;
String? website;
Company? company;
User(
{this.id,
this.name,
this.username,
this.email,
this.address,
this.phone,
this.website,
this.company});
User.fromJson(Map<String, dynamic> json) {
id = json['id'];
name = json['name'];
username = json['username'];
email = json['email'];
address =
json['address'] != null ? new Address.fromJson(json['address']) : null;
phone = json['phone'];
website = json['website'];
company =
json['company'] != null ? new Company.fromJson(json['company']) : null;
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['id'] = this.id;
data['name'] = this.name;
data['username'] = this.username;
data['email'] = this.email;
if (this.address != null) {
data['address'] = this.address!.toJson();
}
data['phone'] = this.phone;
data['website'] = this.website;
if (this.company != null) {
data['company'] = this.company!.toJson();
}
return data;
}
}
class Address {
String? street;
String? suite;
String? city;
String? zipcode;
Geo? geo;
Address({this.street, this.suite, this.city, this.zipcode, this.geo});
Address.fromJson(Map<String, dynamic> json) {
street = json['street'];
suite = json['suite'];
city = json['city'];
zipcode = json['zipcode'];
geo = json['geo'] != null ? new Geo.fromJson(json['geo']) : null;
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['street'] = this.street;
data['suite'] = this.suite;
data['city'] = this.city;
data['zipcode'] = this.zipcode;
if (this.geo != null) {
data['geo'] = this.geo!.toJson();
}
return data;
}
}
class Geo {
String? lat;
String? lng;
Geo({this.lat, this.lng});
Geo.fromJson(Map<String, dynamic> json) {
lat = json['lat'];
lng = json['lng'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['lat'] = this.lat;
data['lng'] = this.lng;
return data;
}
}
class Company {
String? name;
String? catchPhrase;
String? bs;
Company({this.name, this.catchPhrase, this.bs});
Company.fromJson(Map<String, dynamic> json) {
name = json['name'];
catchPhrase = json['catchPhrase'];
bs = json['bs'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['name'] = this.name;
data['catchPhrase'] = this.catchPhrase;
data['bs'] = this.bs;
return data;
}
}
and this is the json response im getting from API
[
{
"id": 1,
"name": "Leanne Graham",
"username": "Bret",
"email": "[email protected]",
"address": {
"street": "Kulas Light",
"suite": "Apt. 556",
"city": "Gwenborough",
"zipcode": "92998-3874",
"geo": {
"lat": "-37.3159",
"lng": "81.1496"
}
},
"phone": "1-770-736-8031 x56442",
"website": "hildegard.org",
"company": {
"name": "Romaguera-Crona",
"catchPhrase": "Multi-layered client-server neural-net",
"bs": "harness real-time e-markets"
}
},
{
"id": 2,
"name": "Ervin Howell",
"username": "Antonette",
"email": "[email protected]",
"address": {
"street": "Victor Plains",
"suite": "Suite 879",
"city": "Wisokyburgh",
"zipcode": "90566-7771",
"geo": {
"lat": "-43.9509",
"lng": "-34.4618"
}
},
"phone": "010-692-6593 x09125",
"website": "anastasia.net",
"company": {
"name": "Deckow-Crist",
"catchPhrase": "Proactive didactic contingency",
"bs": "synergize scalable supply-chains"
}
},
{
"id": 3,
"name": "Clementine Bauch",
"username": "Samantha",
"email": "[email protected]",
"address": {
"street": "Douglas Extension",
"suite": "Suite 847",
"city": "McKenziehaven",
"zipcode": "59590-4157",
"geo": {
"lat": "-68.6102",
"lng": "-47.0653"
}
},
"phone": "1-463-123-4447",
"website": "ramiro.info",
"company": {
"name": "Romaguera-Jacobson",
"catchPhrase": "Face to face bifurcated interface",
"bs": "e-enable strategic applications"
}
},
{
"id": 4,
"name": "Patricia Lebsack",
"username": "Karianne",
"email": "[email protected]",
"address": {
"street": "Hoeger Mall",
"suite": "Apt. 692",
"city": "South Elvis",
"zipcode": "53919-4257",
"geo": {
"lat": "29.4572",
"lng": "-164.2990"
}
},
"phone": "493-170-9623 x156",
"website": "kale.biz",
"company": {
"name": "Robel-Corkery",
"catchPhrase": "Multi-tiered zero tolerance productivity",
"bs": "transition cutting-edge web services"
}
}
]
this is the controller im using to pass the json to model class
class user_controller extends GetxController {
final user_repo repo;
user_controller({required this.repo});
List<dynamic> userList = [];
Future<void> getUserData() async {
Response response = await repo.getUserData();
if (response.statusCode == 200) {
userList.add(User.fromJson(response.body));
} else {}
}
}
but I pass the response like this it generates an error
List' is not a subtype of type 'Map<String, dynamic>'
I change the class like this User.fromJson(List<dynamic> json)
like that way I can pass the data like this id =json[0]["id"]
but it only pass the id of first element of the list
How Can I pass all the data? this list has 5 map object I want to display all this data on a listview using this model
CodePudding user response:
Your api response is a list so you need to change your controller
to this:
if (response.statusCode == 200) {
userList = (response.body as List).map((e) => User.fromJson(e)).toList();
} else {}
CodePudding user response:
you can use quicktype it will generate a model from json and give you the functions to use to turn a json to model or list or the inverse