Необработанное исключение: ошибка преобразования объекта в кодируемый объект: _link HashMap

#flutter #dart #flutter-layout #flutter-dependencies #flutter-animation

#трепетание #дротик #флаттер-макет #зависимости от флаттера #флаттер-анимация

Вопрос:

Я новичок в flutter, мне удалось успешно вызвать API, однако, когда я изменил свой класс модели, добавив map<String,dynamic>, я получаю следующее ниже исключение Необработанное исключение: не удалось преобразовать объект в кодируемый объект: _LinkedHashMap

Мой класс модели для справки выглядит следующим образом

 class Profile {
  String id;
  String userId;
  String username;
  String password;
  String email;
  String arabicFullNam;
  String englishFullNam;
  String phoneNumber;
  String civilId;
  int type;
  bool success;
  List<dynamic> errors;
  Map<String,dynamic>body;

  Profile({this.id, this.userId,this.username, this.password, this.arabicFullNam, this.englishFullNam, this.email,this.civilId, this.errors,this.success,this.type,this.body,this.phoneNumber});

  factory Profile.fromJson(Map<String, dynamic> map) {
    return Profile(
        id: map["id"], userId: map["userId"],phoneNumber: map["phoneNumber"],username: map["username"], password: map["password"], englishFullNam: map["fullnameEn"], arabicFullNam: map['fullnameAr'], email: map['email'],civilId:map['civilId'], errors: map['errors'], success: map['success'],type: map['type'],body: map['body']);
  }

  Map<String, dynamic> toJson() {
    return {"id": id, "userId": userId,"username": username, phoneNumber: "phoneNumber", "password": password, "fullnameEn": englishFullNam, "fullnameAr": arabicFullNam,"email": email, "civilId": civilId,"success": success, "type": type, "body": body};
  }

  @override
  String toString() {
    return 'Profile{id: $id,userId: $userId, username: $username, password: $password, email: $email, fullnameEn: $englishFullNam, fullnameAr: $arabicFullNam, civilId: $civilId, errors: $errors, success: $success, type: $type, body: $body, phoneNumber: $phoneNumber }';
  }


}

List<Profile> profileFromJson(String jsonData) {
  final data = json.decode(jsonData);
  return List<Profile>.from(data.map((item) => Profile.fromJson(item)));
}


Profile postFromJson(String str) {
  final jsonData = json.decode(str);
  return Profile.fromJson(jsonData);
}


String profileToJson(Profile data) {
  final jsonData = data.toJson();
  print("##--tojson" jsonData.toString());
  return json.encode(jsonData);
}
 

Любая помощь будет высоко оценена

Комментарии:

1. взгляните на этот отрывок flutter.dev/docs/development/data-and-backend/ …

Ответ №1:

Попробуйте это

 class Profile {
  String id;
  String userId;
  String username;
  String password;
  String email;
  String arabicFullNam;
  String englishFullNam;
  String phoneNumber;
  String civilId;
  int type;
  bool success;
  List<dynamic> errors;
  Map<String, dynamic> body;
  Profile({
    this.id,
    this.userId,
    this.username,
    this.password,
    this.email,
    this.arabicFullNam,
    this.englishFullNam,
    this.phoneNumber,
    this.civilId,
    this.type,
    this.success,
    this.errors,
    this.body,
  });

  Map<String, dynamic> toMap() {
    return {
      'id': id,
      'userId': userId,
      'username': username,
      'password': password,
      'email': email,
      'arabicFullNam': arabicFullNam,
      'englishFullNam': englishFullNam,
      'phoneNumber': phoneNumber,
      'civilId': civilId,
      'type': type,
      'success': success,
      'errors': errors,
      'body': body,
    };
  }

  factory Profile.fromMap(Map<String, dynamic> map) {
    if (map == null) return null;

    return Profile(
      id: map['id'],
      userId: map['userId'],
      username: map['username'],
      password: map['password'],
      email: map['email'],
      arabicFullNam: map['arabicFullNam'],
      englishFullNam: map['englishFullNam'],
      phoneNumber: map['phoneNumber'],
      civilId: map['civilId'],
      type: map['type'],
      success: map['success'],
      errors: List<dynamic>.from(map['errors']),
      body: Map<String, dynamic>.from(map['body']),
    );
  }

  String toJson() => json.encode(toMap());

  factory Profile.fromJson(String source) =>
      Profile.fromMap(json.decode(source));

  @override
  String toString() {
    return 'Profile(id: $id, userId: $userId, username: $username, password: $password, email: $email, arabicFullNam: $arabicFullNam, englishFullNam: $englishFullNam, phoneNumber: $phoneNumber, civilId: $civilId, type: $type, success: $success, errors: $errors, body: $body)';
  }
}

 

Комментарии:

1. попробуйте заменить factory Profile.fromJson(Map<String, dynamic> map) вышеперечисленное. это в основном от этого метода. Я только что добавил эту строку body: Map<String, dynamic>.from(map['body'])

2. можете ли вы добавить необработанные данные json выше.

3. конечно…. ##—tojson{идентификатор: null, идентификатор пользователя: null, имя пользователя: gvv, null: номер телефона, пароль: 5677v, полное имя: null, Полное имя: null, адрес электронной почты: null, civilId: null, успех: null, тип: null, тело: null}

4. Я отредактировал свой ответ и создал модель. Это все, что я могу помочь

5. большое спасибо .. однако я догадался об этом . однако проблема заключалась в том, что при передаче я указывал значение вместо ключа, поэтому необработанный json имел null:PhoneNumber при передаче .. его разрешили. действительно спасибо за ваш жест.

Ответ №2:

Обязательно проверьте необработанный json, который вы передаете или конвертируете. у меня возникла проблема с null:PhoneNumber вместо PhoneNumber:null.