Error on Stateful Widget when import Modal class - flutter

The code work fine when I am not importing the modal file.
When I import a modal dart file, the Stateful widget become warning line that make me cant build project.
Below is my modal.dart
class Merchant {
int id;
String type;
String name;
String image;
String address1;
String address2;
String address3;
String city;
String stateCode;
String postcode;
String countryCode;
int priority;
String createdAt;
String updatedAt;
String deletedAt;
String email;
String contact;
String slug;
String emailFinance;
int isEmailFinance;
String legalName;
String legalRegistrationNumber;
String bankSwiftCode;
String bankAccountNumber;
String imageUrl;
String address;
String merchantType;
List<Currencies> currencies;
State state;
Country country;
Merchant(
{this.id,
this.type,
this.name,
this.image,
this.address1,
this.address2,
this.address3,
this.city,
this.stateCode,
this.postcode,
this.countryCode,
this.priority,
this.createdAt,
this.updatedAt,
this.deletedAt,
this.email,
this.contact,
this.slug,
this.emailFinance,
this.isEmailFinance,
this.legalName,
this.legalRegistrationNumber,
this.bankSwiftCode,
this.bankAccountNumber,
this.imageUrl,
this.address,
this.merchantType,
this.currencies,
this.state,
this.country});
Merchant.fromJson(Map<String, dynamic> json) {
id = json['id'];
type = json['type'];
name = json['name'];
image = json['image'];
address1 = json['address1'];
address2 = json['address2'];
address3 = json['address3'];
city = json['city'];
stateCode = json['state_code'];
postcode = json['postcode'];
countryCode = json['country_code'];
priority = json['priority'];
createdAt = json['created_at'];
updatedAt = json['updated_at'];
deletedAt = json['deleted_at'];
email = json['email'];
contact = json['contact'];
slug = json['slug'];
emailFinance = json['email_finance'];
isEmailFinance = json['is_email_finance'];
legalName = json['legal_name'];
legalRegistrationNumber = json['legal_registration_number'];
bankSwiftCode = json['bank_swift_code'];
bankAccountNumber = json['bank_account_number'];
imageUrl = json['image_url'];
address = json['address'];
merchantType = json['merchant_type'];
if (json['currencies'] != null) {
currencies = new List<Currencies>();
json['currencies'].forEach((v) {
currencies.add(new Currencies.fromJson(v));
});
}
state = json['state'] != null ? new State.fromJson(json['state']) : null;
country =
json['country'] != null ? new Country.fromJson(json['country']) : null;
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['id'] = this.id;
data['type'] = this.type;
data['name'] = this.name;
data['image'] = this.image;
data['address1'] = this.address1;
data['address2'] = this.address2;
data['address3'] = this.address3;
data['city'] = this.city;
data['state_code'] = this.stateCode;
data['postcode'] = this.postcode;
data['country_code'] = this.countryCode;
data['priority'] = this.priority;
data['created_at'] = this.createdAt;
data['updated_at'] = this.updatedAt;
data['deleted_at'] = this.deletedAt;
data['email'] = this.email;
data['contact'] = this.contact;
data['slug'] = this.slug;
data['email_finance'] = this.emailFinance;
data['is_email_finance'] = this.isEmailFinance;
data['legal_name'] = this.legalName;
data['legal_registration_number'] = this.legalRegistrationNumber;
data['bank_swift_code'] = this.bankSwiftCode;
data['bank_account_number'] = this.bankAccountNumber;
data['image_url'] = this.imageUrl;
data['address'] = this.address;
data['merchant_type'] = this.merchantType;
if (this.currencies != null) {
data['currencies'] = this.currencies.map((v) => v.toJson()).toList();
}
if (this.state != null) {
data['state'] = this.state.toJson();
}
if (this.country != null) {
data['country'] = this.country.toJson();
}
return data;
}
}
class Currencies {
int id;
int merchantId;
String code;
String name;
String createdAt;
String updatedAt;
Null deletedAt;
String balanceCacheType;
Currencies(
{this.id,
this.merchantId,
this.code,
this.name,
this.createdAt,
this.updatedAt,
this.deletedAt,
this.balanceCacheType});
Currencies.fromJson(Map<String, dynamic> json) {
id = json['id'];
merchantId = json['merchant_id'];
code = json['code'];
name = json['name'];
createdAt = json['created_at'];
updatedAt = json['updated_at'];
deletedAt = json['deleted_at'];
balanceCacheType = json['balance_cache_type'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['id'] = this.id;
data['merchant_id'] = this.merchantId;
data['code'] = this.code;
data['name'] = this.name;
data['created_at'] = this.createdAt;
data['updated_at'] = this.updatedAt;
data['deleted_at'] = this.deletedAt;
data['balance_cache_type'] = this.balanceCacheType;
return data;
}
}
class State {
int id;
String iso;
String iso3;
String name;
String nameAlternate;
String type;
String code;
State(
{this.id,
this.iso,
this.iso3,
this.name,
this.nameAlternate,
this.type,
this.code});
State.fromJson(Map<String, dynamic> json) {
id = json['id'];
iso = json['iso'];
iso3 = json['iso3'];
name = json['name'];
nameAlternate = json['name_alternate'];
type = json['type'];
code = json['code'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['id'] = this.id;
data['iso'] = this.iso;
data['iso3'] = this.iso3;
data['name'] = this.name;
data['name_alternate'] = this.nameAlternate;
data['type'] = this.type;
data['code'] = this.code;
return data;
}
}
class Country {
int id;
String iso;
String name;
String iso3;
int numcode;
int phonecode;
Country(
{this.id, this.iso, this.name, this.iso3, this.numcode, this.phonecode});
Country.fromJson(Map<String, dynamic> json) {
id = json['id'];
iso = json['iso'];
name = json['name'];
iso3 = json['iso3'];
numcode = json['numcode'];
phonecode = json['phonecode'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['id'] = this.id;
data['iso'] = this.iso;
data['name'] = this.name;
data['iso3'] = this.iso3;
data['numcode'] = this.numcode;
data['phonecode'] = this.phonecode;
return data;
}
}
I have few modal class. But only this one will gain error when I import it other dart file. I have try to find out the error but couldn't figure it out. Can someone help me to solve this problem? Thank you so much.

I suggest you to separate you class in different file. Put Merchant in a dart file,
Currencies in another dart file and so one.

Related

Format Exception: Unexpected Character (at character 1)Instance of 'VerifyData'

Why does this code give me this error? In the emulator, I have this problem Format Exception: Unexpected Character (at character 1)Instance of 'VerifyData'. I don't know resolve of this.
static VerifyData? fromObject(Object? data) {
try {
if (data != null) {
var jsonObject = json.decode(data.toString());
return VerifyData.fromJson(jsonObject);
}
} catch (e) {
return null;
}
}
this is class VerifyData and json. what's wrong in this my code? because I think it is in accordance with the contents of the API that I have made
class VerifyData {
int? id;
String? user;
String? name;
String? level;
String? photo;
String? email;
String? phone;
String? address;
String? time;
String? v;
int? iat;
int? exp;
VerifyData(
{this.id,
this.user,
this.name,
this.level,
this.photo,
this.email,
this.phone,
this.address,
this.time,
this.v,
this.iat,
this.exp});
VerifyData.fromJson(Map<String, dynamic> json) {
id = json['id'];
user = json['user'];
name = json['name'];
level = json['level'];
photo = json['photo'];
email = json['email'];
phone = json['phone'];
address = json['address'];
time = json['time'];
v = json['v'];
iat = json['iat'];
exp = json['exp'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['id'] = this.id;
data['user'] = this.user;
data['name'] = this.name;
data['level'] = this.level;
data['photo'] = this.photo;
data['email'] = this.email;
data['phone'] = this.phone;
data['address'] = this.address;
data['time'] = this.time;
data['v'] = this.v;
data['iat'] = this.iat;
data['exp'] = this.exp;
return data;
}
I/flutter ( 5881): Data : {"id":1,"user":"admin","name":"Admin","level":"employee","photo":null,"email":"admin#gmail.com","phone":null,"address":"Jl. Asem Daerah","time":"2022-10-11T02:34:55.138Z","v":"p","iat":1122355694,"exp":1122259294}
You might want to check this out: https://docs.flutter.dev/development/data-and-backend/json

Problem with mapping list of images inside the products list using woocommerce api in flutter

class ProductModel {
late String name;
late int id;
late String status;
late String price;
late List<Images> images;
ProductModel(
this.name,
this.id,
this.status,
this.images,
this.price,
);
ProductModel.fromJson(Map<String, dynamic> json) {
name = json['name'];
id = json['id'];
status = json['status'];
//images = json['images'];
images = json['image'];
if (json['images'] != null) {
images = new List<Images>(); // error on List<Images>() "The default 'List' constructor //isn't available when null safety is enabled.
json['images'].forEach((v) {
images.add(new Images.fromJson(v));
});
}
price = json['price'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['name'] = this.name;
data['id'] = this.id;
data['status'] = this.status;
if (this.images != null) {
data['images'] = this.images.map((v) => v.toJson()).toList();
}
data['price'] = this.price;
return data;
}
}
// ignore: camel_case_types
class Images {
late int id;
late String src;
late String title;
Images({
this.id = 0,
this.src = "",
this.title = "",
});
Images.fromJson(Map<String, dynamic> json) {
id = json['id'];
src = json['src'];
title = json['title'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['id'] = this.id;
data['src'] = this.src;
data['title'] = this.title;
return data;
}
}
I want to list the products of my Woocommerce site in the Flutter app, But getting an error mentioned in the code, please help. Please guide me the best way to model the JSON into Dart class. Tried converting online using https://javiercbk.github.io/json_to_dart/ but this gives lots of errors
Well it seems you are initializing the List incorrectly.
It should be:
images = <Images>[];
Also, you do not need to initialize with the new keyword anymore.

I want to save list item with future bool is it possible?

Future<bool> login({username, password}) async {
var api = API();
_status = LoginStatus.loading;
notifyListeners();
var url = Uri.parse(api.baseUrl + api.auth);
final response = await http.post(
url,
body: jsonEncode({
"identifier": "$username",
"password": "$password",
}),
headers: <String, String>{
'Content-Type': 'application/json; charset=UTF-8',
},
);
if (response.statusCode == 200) {
final parsed = jsonDecode(response.body).cast<Map<String, dynamic>>();
parsed
.map<UserModel>((json) => UserModel.fromJson(json))
.toList();
final token = jsonDecode(response.body)['jwt'];
print(token);
await saveToken(token);
return true;
} else {
_status = LoginStatus.error;
_error = response.body;
notifyListeners();
return false;
}
}
Code Screen Shot
How Should I save this parsed JSON to UserModel? I have encountered many problems and figured out many things on my own but I am not yet able to add data to the model.
By the way I am using strapi as a back end and every api is working. And I amso use a website called json to dart converter so that my models are correct(As I Assume).
Please help !!!!!!!!!!!!
UserModel
class UserModel {
User user;
UserModel({this.user});
UserModel.fromJson(Map<String, dynamic> json) {
user = json['user'] != null ? new User.fromJson(json['user']) : null;
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
if (this.user != null) {
data['user'] = this.user.toJson();
}
return data;
}
}
class User {
int id;
String username;
String email;
String provider;
bool confirmed;
bool blocked;
Role role;
String displayName;
String createdAt;
String updatedAt;
Avatar avatar;
List<UserCategories> userCategories;
User(
{this.id,
this.username,
this.email,
this.provider,
this.confirmed,
this.blocked,
this.role,
this.displayName,
this.createdAt,
this.updatedAt,
this.avatar,
this.userCategories});
User.fromJson(Map<String, dynamic> json) {
id = json['id'];
username = json['username'];
email = json['email'];
provider = json['provider'];
confirmed = json['confirmed'];
blocked = json['blocked'];
role = json['role'] != null ? new Role.fromJson(json['role']) : null;
displayName = json['displayName'];
createdAt = json['created_at'];
updatedAt = json['updated_at'];
avatar =
json['avatar'] != null ? new Avatar.fromJson(json['avatar']) : null;
if (json['user_categories'] != null) {
userCategories = new List<UserCategories>();
json['user_categories'].forEach((v) {
userCategories.add(new UserCategories.fromJson(v));
});
}
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['id'] = this.id;
data['username'] = this.username;
data['email'] = this.email;
data['provider'] = this.provider;
data['confirmed'] = this.confirmed;
data['blocked'] = this.blocked;
if (this.role != null) {
data['role'] = this.role.toJson();
}
data['displayName'] = this.displayName;
data['created_at'] = this.createdAt;
data['updated_at'] = this.updatedAt;
if (this.avatar != null) {
data['avatar'] = this.avatar.toJson();
}
if (this.userCategories != null) {
data['user_categories'] =
this.userCategories.map((v) => v.toJson()).toList();
}
return data;
}
}
class Role {
int id;
String name;
String description;
String type;
Role({this.id, this.name, this.description, this.type});
Role.fromJson(Map<String, dynamic> json) {
id = json['id'];
name = json['name'];
description = json['description'];
type = json['type'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['id'] = this.id;
data['name'] = this.name;
data['description'] = this.description;
data['type'] = this.type;
return data;
}
}
class Avatar {
int id;
String name;
String alternativeText;
String caption;
int width;
int height;
Formats formats;
String hash;
String ext;
String mime;
double size;
String url;
Null previewUrl;
String provider;
Null providerMetadata;
String createdAt;
String updatedAt;
Avatar(
{this.id,
this.name,
this.alternativeText,
this.caption,
this.width,
this.height,
this.formats,
this.hash,
this.ext,
this.mime,
this.size,
this.url,
this.previewUrl,
this.provider,
this.providerMetadata,
this.createdAt,
this.updatedAt});
Avatar.fromJson(Map<String, dynamic> json) {
id = json['id'];
name = json['name'];
alternativeText = json['alternativeText'];
caption = json['caption'];
width = json['width'];
height = json['height'];
formats =
json['formats'] != null ? new Formats.fromJson(json['formats']) : null;
hash = json['hash'];
ext = json['ext'];
mime = json['mime'];
size = json['size'];
url = json['url'];
previewUrl = json['previewUrl'];
provider = json['provider'];
providerMetadata = json['provider_metadata'];
createdAt = json['created_at'];
updatedAt = json['updated_at'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['id'] = this.id;
data['name'] = this.name;
data['alternativeText'] = this.alternativeText;
data['caption'] = this.caption;
data['width'] = this.width;
data['height'] = this.height;
if (this.formats != null) {
data['formats'] = this.formats.toJson();
}
data['hash'] = this.hash;
data['ext'] = this.ext;
data['mime'] = this.mime;
data['size'] = this.size;
data['url'] = this.url;
data['previewUrl'] = this.previewUrl;
data['provider'] = this.provider;
data['provider_metadata'] = this.providerMetadata;
data['created_at'] = this.createdAt;
data['updated_at'] = this.updatedAt;
return data;
}
}
class Formats {
Thumbnail thumbnail;
Formats({this.thumbnail});
Formats.fromJson(Map<String, dynamic> json) {
thumbnail = json['thumbnail'] != null
? new Thumbnail.fromJson(json['thumbnail'])
: null;
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
if (this.thumbnail != null) {
data['thumbnail'] = this.thumbnail.toJson();
}
return data;
}
}
class Thumbnail {
String name;
String hash;
String ext;
String mime;
int width;
int height;
double size;
Null path;
String url;
Thumbnail(
{this.name,
this.hash,
this.ext,
this.mime,
this.width,
this.height,
this.size,
this.path,
this.url});
Thumbnail.fromJson(Map<String, dynamic> json) {
name = json['name'];
hash = json['hash'];
ext = json['ext'];
mime = json['mime'];
width = json['width'];
height = json['height'];
size = json['size'];
path = json['path'];
url = json['url'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['name'] = this.name;
data['hash'] = this.hash;
data['ext'] = this.ext;
data['mime'] = this.mime;
data['width'] = this.width;
data['height'] = this.height;
data['size'] = this.size;
data['path'] = this.path;
data['url'] = this.url;
return data;
}
}
class UserCategories {
int id;
String categoryName;
int usersPermissionsUser;
String publishedAt;
String createdAt;
String updatedAt;
UserCategories(
{this.id,
this.categoryName,
this.usersPermissionsUser,
this.publishedAt,
this.createdAt,
this.updatedAt});
UserCategories.fromJson(Map<String, dynamic> json) {
id = json['id'];
categoryName = json['categoryName'];
usersPermissionsUser = json['users_permissions_user'];
publishedAt = json['published_at'];
createdAt = json['created_at'];
updatedAt = json['updated_at'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['id'] = this.id;
data['categoryName'] = this.categoryName;
data['users_permissions_user'] = this.usersPermissionsUser;
data['published_at'] = this.publishedAt;
data['created_at'] = this.createdAt;
data['updated_at'] = this.updatedAt;
return data;
}
}
The UserModel.fromJson method will only work if the response.body content is a User, so to fix your issue, instead of using UserModel.fromJson on the response.body json decoded variable, rather use the fromJson() function on data that you are sure will conform to your class definition.
For example:
class User{
final String name;
final String surname;
final String email;
User({this.name, this.surname, this.email});
factory User.fromJson(Map<String,dynamic> json){
return User(
'name': json['name'],
'surname': json['surname'],
'email': json['email']
);
}
}
The json response that is recieved from the api:
{
"name" : "John",
"surname": "Smith",
"email": "johnsmith#mail.com"
}
In your function, decode response and cast to the User model class:
final parsed = jsonDecode(response.body); // or Map<String,dynamic> parsed = jsonDecode(response.body);
User user = User.fromJson(parsed)

snapshot.data is NULL flutter

I'm starter in flutter . I would like to fetch data from Complex json using API . Using postman my response body contain publication object and inside it i have i list of objects. . firstly i created Publication model and i try to use it for fetching data but snapshot.data is still NULL . any help please ??
#override
void initState() {
getproduct(widget.idproduct);
super.initState();
}
Future<Publication> getproduct(int id) async {
var response = await Network().getData('/publication/show/$id');
return Publication.fromJson(json.decode(response.body['publication']));
}
child: SingleChildScrollView(
child: FutureBuilder<Publication>(
future: getproduct(widget.idproduct),
builder: (BuildContext context, AsyncSnapshot snapshot) {
inspect(snapshot.data);
if (snapshot.hasData) {
return Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
for (int i = 0;
i < snapshot.data.publication.length;
i++)
CommentsList(
comment: snapshot.data.publication[i].comment,
)
],
);
}
and this my Publication Class:
class Publication {
int id;
int userId;
String name;
String description;
String category;
int quantity;
String size;
String brand;
String forWho;
String color;
String delivery;
String price;
int progression;
String discount;
int visibility;
String status;
int softdelete;
String createdAt;
String updatedAt;
String picture1;
String picture2;
String picture3;
Null picture4;
String picture5;
List<Comment> comment;
String ownerpicture;
Publication(
{this.id,
this.userId,
this.name,
this.description,
this.category,
this.quantity,
this.size,
this.brand,
this.forWho,
this.color,
this.delivery,
this.price,
this.progression,
this.discount,
this.visibility,
this.status,
this.softdelete,
this.createdAt,
this.updatedAt,
this.picture1,
this.picture2,
this.picture3,
this.picture4,
this.picture5,
this.comment,
this.ownerpicture});
Publication.fromJson(Map<String, dynamic> json) {
id = json['id'];
userId = json['user_id'];
name = json['name'];
description = json['description'];
category = json['category'];
quantity = json['quantity'];
size = json['size'];
brand = json['brand'];
forWho = json['for_who'];
color = json['color'];
delivery = json['delivery'];
price = json['price'];
progression = json['progression'];
discount = json['discount'];
visibility = json['visibility'];
status = json['status'];
softdelete = json['softdelete'];
createdAt = json['created_at'];
updatedAt = json['updated_at'];
picture1 = json['picture1'];
picture2 = json['picture2'];
picture3 = json['picture3'];
picture4 = json['picture4'];
picture5 = json['picture5'];
if (json['comment'] != null) {
comment = new List<Comment>();
json['comment'].forEach((v) {
comment.add(new Comment.fromJson(v));
});
}
ownerpicture = json['ownerpicture'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['id'] = this.id;
data['user_id'] = this.userId;
data['name'] = this.name;
data['description'] = this.description;
data['category'] = this.category;
data['quantity'] = this.quantity;
data['size'] = this.size;
data['brand'] = this.brand;
data['for_who'] = this.forWho;
data['color'] = this.color;
data['delivery'] = this.delivery;
data['price'] = this.price;
data['progression'] = this.progression;
data['discount'] = this.discount;
data['visibility'] = this.visibility;
data['status'] = this.status;
data['softdelete'] = this.softdelete;
data['created_at'] = this.createdAt;
data['updated_at'] = this.updatedAt;
data['picture1'] = this.picture1;
data['picture2'] = this.picture2;
data['picture3'] = this.picture3;
data['picture4'] = this.picture4;
data['picture5'] = this.picture5;
if (this.comment != null) {
data['comment'] = this.comment.map((v) => v.toJson()).toList();
}
data['ownerpicture'] = this.ownerpicture;
return data;
}
}
I got the following error when i print (snapshot) :
and i got this error when inspect(snapshot);
It has error, use snapshot.hasError to handle and show the errorMessage,
and error is in your model/Pojo class, something declared as int but it is String. Please check & compare your response and pojo/model.
Check at 60:58 of the PetDetail.dart file
This might help you
https://api.flutter.dev/flutter/widgets/FutureBuilder-class.html#widgets.FutureBuilder.1
in order this line to work
snapshot.data.publication.length;
this line must return an object which must have publication and that must be a list
getproduct(widget.idproduct);

Unhandled Exception: type '(dynamic) => Null' is not a subtype of type '(String, dynamic) => void' of 'f' in the Data model

I am getting this Error Unhandled Exception: type '(dynamic) => Null' is not a subtype of type '(String, dynamic) => void' of 'f' decoding a json from an API, I believe the problem may be from the Data class in the model but i don't know how to solve it.
The model class
class UserLogin {
bool success;
int statusCode;
String code;
String message;
List<Data> data;
UserLogin({
this.code,
this.success,
this.message,
this.statusCode,
this.data,
});
UserLogin.fromJson(Map<String, dynamic>json){
success = json['success'];
statusCode = json['statusCode'];
code = json['code'];
message = json['message'];
//data = json['data'] != null ? new Data.fromJson(json['data']) : null;
if(json['data'] != null) {
data = new List<Data>();
json['data'].forEach((v){
data.add(new Data.fromJson(v));
});
}
}
Map<String, dynamic> toJson(){
final Map<String, dynamic> data = new Map<String, dynamic>();
data['success'] = this.success;
data['statuCode'] = this.statusCode;
data['code'] = this.code;
data['message'] = this.message;
if(this.data != null) {
data['data'] = this.data.toList();
}
return data;
}
#override toString() => this.toJson().toString();
}
class Data {
String token;
int id;
String email;
String nicename;
String firstname;
String lastname;
String displayName;
Data(
{this.token,
this.id,
this.email,
this.nicename,
this.firstname,
this.lastname,
this.displayName});
Data.fromJson(Map<String, dynamic> json){
token = json['token'];
id = json['id'];
email = json['email'];
nicename = json['nicename'];
firstname = json['firstname'];
displayName = json['displayName'];
}
Map<String, dynamic> toJson(){
final Map<String, dynamic> data = new Map<String, dynamic>();
data['token'] = this.token;
data['id'] = this.id;
data['email'] = this.email;
data['nicename'] = this.nicename;
data['firstname'] = this.firstname;
data['displayName'] = this.displayName;
return data;
}
}
The async function calling the api
Future<UserLogin> loginCustomer(String username, String password ) async {
//List<UserLogin> model = new List<UserLogin>();
UserLogin model;
try {
var response = await Dio().post(
Config.tokenURL,
data: {
"username" : username,
"password" : password,
},
options: new Options(
headers: {
HttpHeaders.contentTypeHeader: "application/x-www-form-urlencoded",
},
),
);
if(response.statusCode == 200) {
print(response.data);
model = UserLogin.fromJson(response.data);
}
} on DioError catch (e) {
print(e.message);
}
return model;
}
Response from Api
{success: true, statusCode: 200, code: jwt_auth_valid_credential, message: Credential is valid, data: {token:***, id: 1, email: ***, nicename: ***, firstName: ***, lastName: ***, displayName: ****}}
Updated Code
class UserLogin {
bool success;
int statusCode;
String code;
String message;
Data data;
UserLogin({
this.code,
this.success,
this.message,
this.statusCode,
this.data,
});
UserLogin.fromJson(Map<String, dynamic>json){
success = json['success'];
statusCode = json['statusCode'];
code = json['code'];
message = json['message'];
data = json['data'] != null ? new Data.fromJson(json['data']) : null;
}
Map<String, dynamic> toJson(){
final Map<String, dynamic> data = new Map<String, dynamic>();
data['success'] = this.success;
data['statuCode'] = this.statusCode;
data['code'] = this.code;
data['message'] = this.message;
if(this.data != null) {
data['data'] = this.data.toJson();
}
return data;
}
#override toString() => this.toJson().toString();
}
class Data {
String token;
int id;
String email;
String nicename;
String firstname;
String lastname;
String displayName;
Data(
{this.token,
this.id,
this.email,
this.nicename,
this.firstname,
this.lastname,
this.displayName});
Data.fromJson(Map<String, dynamic> json){
token = json['token'];
id = json['id'];
email = json['email'];
nicename = json['nicename'];
firstname = json['firstname'];
displayName = json['displayName'];
}
Map<String, dynamic> toJson(){
final Map<String, dynamic> data = new Map<String, dynamic>();
data['token'] = this.token;
data['id'] = this.id;
data['email'] = this.email;
data['nicename'] = this.nicename;
data['firstname'] = this.firstname;
data['displayName'] = this.displayName;
return data;
}
}
Based on the response.data, your data is an object, but you defined it as List in UserLogin model class, which is wrong.
The correct should beData data;