Представьте себе, что в TodoScreen приложения у меня есть TodoObjectList (список задач, полученных из некоторого API), и я хочу показать их внутри списка. Поэтому я создал список TodoWidgets (StatelessWidget), каждый из которых имеет свой собственный TodoObject в качестве своего свойства. Теперь я хочу связать TodoWidgets со своим TodoObject, поэтому я использовал пакет Provider . Код выглядит примерно так (внутри TodoScreen):
SliverList(
delegate: SliverChildBuilderDelegate(
(BuildContext context, int index) {
return ChangeNotifierProvider<TodoObject>(
builder: (_) => TodoObjectList[index],
child: Consumer<TodoObject>(
builder: (context, TodoObject, child) => TodoWidget(todo: TodoObject)
),
);
},
childCount: TodoObjectList.length,
),
)
Этот код отлично работает в первый раз. Но когда я возвращаюсь и перехожу к TodoScreen во второй раз (я больше не буду вызывать API, TodoObjectList уже кэширован), провайдер выдает ошибку:
“A TodoObject was used after being disposed.”
Я знаю, почему возникает эта ошибка, но мой вопрос заключается в том, как связать TodoWidget с TodoObject с помощью провайдера, не сталкиваясь с этой ошибкой, когда у меня где-то хранятся данные API.