Связывание объекта и виджета во Flutter с использованием пакета Provider - PullRequest
1 голос
/ 23 июня 2019

Представьте себе, что в 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.

...