Флаттер, как показать данные из класса

#flutter #dart

Вопрос:

Я создал класс, подобный этому

 class Collection with ChangeNotifier {
  List<Items> _items = [];

  void addData(Items day) {
    print(day.name);
    print(day.id);
    _items.add(day);
    print(_items);
    notifyListeners();
  }
}

class Items { 
  String name;
  String comments;
  int id;
  Items({required this.name, required this.comments, required this.id});
}
 

Я вставляю данные в _темы, подобные этому

  Collection().addData(Items(name: "a", comments: "sda", id: 12));
 

Я могу правильно видеть в функции addData ее значения печати

но когда я показываю это в своем виджете, он не отображается

    ListView.builder(
                itemCount: Collection()._items.length,
                itemBuilder: (BuildContext context, int index) {
                  print(Collection()._items.length);
                  return Text('name ${Collection()._items[index].name} id ${Collection()._items[index].id}');
                })
 

Ответ №1:

Каждый раз, когда вы вызываете Collection() конструктор, вы создаете другой экземпляр Collection класса. Вам необходимо создать экземпляр с помощью

 final collection = Collection();
 

А затем используйте этот объект в своем конструкторе.

Это лучше использовать final , чем var , потому что это гарантирует, что collection объект не будет переназначен новому экземпляру.

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

1. Спасибо, но это не сохранение данных внутри _items означает, что когда я добавляю данные, они отображаются в ListView, но когда я возвращаюсь на страницу, они показывают пустые _items, и если я добавлю снова, то они будут отображаться нормально. Я делаю что-то не так, мои данные не сохраняются в _items

2. Вероятно, вы смотрите на другой экземпляр среды выполнения. При переходе со страницы вы потеряете collection экземпляр, если он является участником вашего виджета. Один из способов решить эту проблему-использовать шаблон блока. Если вы сохраняете collection экземпляр в блоке, вы не потеряете его при переходе.

3. Способ визуализировать это-создать явный конструктор в Collection классе и поместить точку останова в конструктор.