Использование map вместо for для создания списка из модели класса, возвращающего ноль - PullRequest
0 голосов
/ 11 июня 2019

когда я реализую нумерацию страниц ListView из данных, которые возвращаются с сервера, я просто могу проверить эту возможность разбивки на страницы, и это прекрасно работает, например, с помощью этого кода я могу создать столбец списка с помощью простых данных:

list.add(
    PostItem((b) =>b
        ..title = 'lorem ipsum'
        ..colorInt = _randomGenerator.nextInt(0xFFFFFFFF)),
    );

return BuiltList.of(list);

Теперь я пытаюсь получить данные с сервера и создать эти данные, например:

List<PostItem> list = [
  PostItem((b)=>b..title = 'lorem ipsum'),
  PostItem((b)=>b..title = 'lorem ipsum')
];

я получаю ошибку:

List<PostItem> list=[];

final response = await http.get(Constants.getPosts, headers: {"Accept": "application/json"});

final responseString = json.decode(response.body) as List;

List<ContentsModel> responses = responseString.map((j) => 
    ContentsModel.fromJson(j)).toList();

responses.map((post)=>
    list.add(PostItem((b) => b..title = post.title),));

return BuiltList.of(list);

в этой строке размер list равен нулю:

response.map ((post) => list.add (PostItem ((b) => b..title = post.title),));

мой ContentsModel класс содержит:

part 'contents_model.g.dart';

@JsonSerializable(nullable: false)
class ContentsModel{
  int id;
  String title;
  String description;

  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);
}

Ответы [ 2 ]

1 голос
/ 11 июня 2019

Вам нужно инициализировать свой список, прежде чем что-то добавить:

List<PostItem> list = [];
0 голосов
/ 11 июня 2019

изменение

responses.map((post)=>
    list.add(PostItem((b) => b..title = post.title),));

на

responses.forEach((post)=>list.add(PostItem((b) =>b..title = post.title)));

решило мою проблему

...