Flutter get \" type 'List' is not

2020-05-07 13:53发布

问题:

Out webserver return this result as:

[
  {
    "id": 1,
    "user_id": 10,
    "title": "xxxxxxx",
    "description": "xxxx",
    "type": "post",
    "featured_images": "",
    "slug": "xxxxxxxxx",
    "lang": "xx",
    "visit": 0,
    "click": 0,
    "state": 1,
    "created_at": "xxxxx",
    "updated_at": "xxxxx",
    "categories": [
      {
        "id": 9,
        "title": "xxxx",
        "lang": "fa",
        "parent": 0,
        "click": 0,
        "image": "",
        "created_at": "xxxxx",
        "updated_at": "xxxx",
        "pivot": {
          "contents_id": 1,
          "content_categories_id": 9
        }
      }
    ]
  }
]

and i make this structure class to parse it

part 'contents_model.g.dart';

@JsonSerializable(nullable: false)
class ContentsModel {
  int id;
  @JsonKey(name: 'post_id')
  int postId;
  String title;
  String description;
  String type;
  @JsonKey(name: 'featured_images')
  String featuredImages;
  String slug;
  String lang;
  int visit;
  int click;
  int state;
  @JsonKey(name: 'createdAt')
  String createdAt;
  @JsonKey(name: 'updatedAt')
  String updatedAt;
  @JsonKey(name:'categories')
  CategoriesModel categories;

  ContentsModel(this.id, this.postId, this.title, this.description, this.type, this.featuredImages, this.slug, this.lang, this.visit, this.click, this.state, this.createdAt, this.updatedAt, this.categories);

  factory ContentsModel.fromJson(Map<String,dynamic> json)=>_$ContentsModelFromJson(json);
  Map<String,dynamic> toJson()=>_$ContentsModelToJson(this);
}


part 'categories_model.g.dart';

@JsonSerializable(nullable: true)
class CategoriesModel {
  int id;
  String title;
  String lang;
  int parent;
  int click;
  String image;
  @JsonKey(name: 'created_at')
  String createdAt;
  @JsonKey(name: 'updated_at')
  String updatedAt;

  CategoriesModel(this.id, this.title, this.lang, this.parent, this.click, this.image, this.createdAt, this.updatedAt);

  factory CategoriesModel.fromJson(Map<String,dynamic> json)=>_$CategoriesModelFromJson(json);
  Map<String,dynamic> toJson()=>_$CategoriesModelToJson(this);
}

now when i get data from server successful i can't return that, for example:

  Future<List<ContentsModel>> getContents() async {
    final response = await http.get(Constants.getContents);
    if (response.statusCode == 200) {
      final responseString = jsonDecode(response.body);
      try {
             List<ContentsModel> responses = 
                   responseString.map((j) =>
                        ContentsModel.fromJson(j)).toList();
             return responses;
      }catch(error){
        print('Error:  $error');
        return null;
      }
    } else {
      throw Exception('error fetche contents');
    }
  }

for this line of code:

return responseString.map<List<ContentsModel>>((json) => ContentsModel.fromJson(json)).toList();

i get this error:

type 'List' is not a subtype of type 'Map' in type cast

回答1:

as @Richard Heap comment, changing

CategoriesModel categories;

to

List<CategoriesModel> categories;

resolve this problem



标签: flutter dart