#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
классе и поместить точку останова в конструктор.