Flutter Riverpod:如何为 GridView 上的每个有状态小部件创建相同提供程序的不同实例

问题描述

我有一个 GridView,其中包含一个 StatefulWidgets 列表,其中显示了正在上传的图像的预览以及该图像的上传进度。

列表中的每个小部件应该有自己的状态,其中一些可以成功上传,而另一些可能会失败,因此用户只能重试那些上传失败的图片

问题是:

Riverpod 只能创建一个实例,并且同一个实例在整个项目中共享。因此,如果我使用 Riverpod 跟踪每个图像的状态,GridView 上的所有图像将共享相同的状态,而不是每个图像都有自己的状态。

有没有办法使用相同的提供程序,而不是每次调用 context.read(provider)watch(provider.state)获取相同的实例> 我得到一个新的独立的新鲜的?

解决方法

您正在寻找 .family 修饰符。请参阅文档 here。您可以将 id 或 key 作为参数传递给 StateProvider。

例如:

final imageProvider = StateProvider.family<ImageModel,String>((ref,id) => ...);