st4tic
st4tic

Reputation: 427

Flutter nested json parsing error, 'Model' can't be assigned to the parameter type 'Map<String, dynamic>'

When i'm parsing my nested json, my media class in my model can be null, I can't check it for null, and i cant map my nested elements there is my model :

class Product {
  Product({
    required this.id,
    required this.name,
    required this.categoryName,
    this.media,
  });
  late final int id;
  late final String name;
  late final String categoryName;
  List<Media>? media;

  Product.fromJson(Map<String, dynamic> json){
    id = json['id'];
    name = json['name'];
    categoryName = json['category_name'];
    media != null ? (json["media"] as List).map((a) => Media.fromJson(a)).toList() : null;
    // media != null ? List.from(json['media']).map((e)=>Media.fromJson(e)).toList() : null;
  }

  Map<String, dynamic> toJson() {
    final data = <String, dynamic>{};
    data['id'] = id;
    data['name'] = name;
    data['category_name'] = categoryName;
    data['media'] = media!.map((e)=>e.toJson()).toList();
    return data;
  }
}

class Media {
  Media({
    required this.id,
    required this.productId,
    required this.type,
    required this.links,
  });
  late final int id;
  late final int productId;
  late final String type;
  late final Links links;

  Media.fromJson(Map<String, dynamic> json){
    id = json['id'];
    productId = json['product_id'];
    type = json['type'];
    links = Links.fromJson(json['links']);
  }

  Map<String, dynamic> toJson() {
    final _data = <String, dynamic>{};
    _data['id'] = id;
    _data['product_id'] = productId;
    _data['type'] = type;
    _data['links'] = links.toJson();
    return _data;
  }
}

when i try to loop it with forEach i got:

error: The argument type 'Media' can't be assigned to the parameter type 'Map<String, dynamic>'. (argument_type_not_assignable at [yiwumart] lib/catalog_screens/catalog_item.dart:72)

          final media = productItem.media!.map((e) => Media.fromJson(e)).toList();

Upvotes: 1

Views: 124

Answers (1)

Md. Yeasin Sheikh
Md. Yeasin Sheikh

Reputation: 63649

Try

  Product.fromJson(Map<String, dynamic> json) {
    id = json['id'];
    name = json['name'];
    categoryName = json['category_name'];
    media = (json["media"] as List?)?.map((a) => Media.fromJson(a)).toList();
  }

Upvotes: 2

Related Questions