Home > Software design >  How do I display user's profile in flutter?
How do I display user's profile in flutter?

Time:04-03

I am fetching one row from a database and sending it to flutter where I decode it to receive the following response using var userProfile = json.decode(response.body);

[{id: 1, first_name: First, last_name: Last, name: david, email: [email protected], phone_number: 12, user_image: null, email_verification_code: null, email_verification_time: null, created_at: 2022-03-24T17:37:17.000000Z, updated_at: 2022-03-29T07:16:25.000000Z}]

I have a UserProfile class

class UserProfile {
final int id;
final String firstName;
final String lastName;
final String email;
final String phoneNumber;

UserProfile({
required this.id,
required this.firstName,
required this.lastName,
required this.email,
required this.phoneNumber,
});

factory UserProfile.fromJson(Map<String, dynamic> json) {
return UserProfile(
  id: json["id"],
  firstName: json["first_name"],
  lastName: json["first_name"],
  email: json["email"],
  phoneNumber: json["phone_number"],
);
}
}

I am using the following code to find a suitable way to display the data

  UserProfile? userProfile;
if (response.statusCode == 200) {
  var userProfile = json.decode(response.body);
  List<UserProfile> myProfile = [];
  for (var k in userProfile) {
    myProfile.add(UserProfile.fromJson(userProfile));
  }
} else {
  // If the server did not return a 200 OK response,
  // then throw an exception.
  throw Exception('Failed to load user data');
}

I am getting the error below

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

How do I handle the error?

CodePudding user response:

You have to change your model class a little bit.

Error: List<dynamic> is not a subtype of type Map<String, dynamic>

Above link will helpful to you.

CodePudding user response:

You are passing whole list instead of value. Try this.

var userProfile = json.decode(response.body);
    List<UserProfile> myProfile = [];
    for (var k in userProfile) {
      myProfile.add(UserProfile.fromJson(k));
    }

CodePudding user response:

You will try like this way

const myJson = """
[
{
  "id": 1,
  "first_name": "First",
  "last_name": "Last",
  "name": "david",
  "email": "[email protected]",
  "phone_number": "12",
  "user_image": null,
  "email_verification_code": null,
  "email_verification_time": null,
  "created_at": "2022-03-24T17:37:17.000000Z",
  "updated_at": "2022-03-29T07:16:25.000000Z"
  }
  ]
 """;

 class UserProfile {
   UserProfile({
    this.id,
    this.firstName,
    this.lastName,
    this.name,
    this.email,
    this.phoneNumber,
    this.userImage,
    this.emailVerificationCode,
    this.emailVerificationTime,
    this.createdAt,
    this.updatedAt,
});

int? id;
String? firstName;
String? lastName;
String? name;
String? email;
String? phoneNumber;
dynamic userImage;
dynamic emailVerificationCode;
dynamic emailVerificationTime;
DateTime? createdAt;
DateTime? updatedAt;

factory UserProfile.fromMap(Map<String, dynamic> json) => UserProfile(
    id: json["id"],
    firstName: json["first_name"],
    lastName: json["last_name"],
    name: json["name"],
    email: json["email"],
    phoneNumber: json["phone_number"],
    userImage: json["user_image"],
    emailVerificationCode: json["email_verification_code"],
    emailVerificationTime: json["email_verification_time"],
    createdAt: DateTime.parse(json["created_at"]),
    updatedAt: DateTime.parse(json["updated_at"]),
);
}

 void main() {
  final userData = List.from(json.decode(myJson));
  print(userData[0]['id']);
  print(userData[0]['name']);
 }
  • Related