使用 Provider 包在 Flutter 中将对象和小部件绑定在一起

Binding object and widget together in Flutter using Provider package

想象一下,在应用程序的 TodoScreen 中,我有一个 TodoObjectList(从某些 API 获得的待办事项列表),我想在列表中显示它们。所以我创建了一个 TodoWidgets (StatelessWidget) 列表,每个都有自己的 TodoObject 作为其 属性。现在我希望 TodoWidgets 与其 TodoObject 绑定,所以我使用了 Provider package。代码如下(在 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 已经被缓存),Provider 抛出错误:

 “A TodoObject was used after being disposed.”

我知道为什么会抛出此错误,但我的问题是我应该如何使用提供程序将 TodoWidget 与 TodoObject 绑定,而不会在我将 API 数据存储在某处时遇到此错误。

您应该改用 ChangeNotifierProvider.value。如果您有任何后续问题,This link 可能会帮助您。