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

e20*_*200 8 flutter riverpod

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

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

问题是:

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

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

Ale*_*ord 14

您正在寻找.family修改器。请参阅此处的文档。您可以将 id 或 key 作为参数传递给 StateProvider。

例如:

final imageProvider = StateProvider.family<ImageModel, String>((ref, id) => ...);
Run Code Online (Sandbox Code Playgroud)

  • 不过,参数是您可以用来创建同一提供程序的不同实例的内容。您还可以让系列提供者与保存所有项目共有的状态的 StateNotifier 进行交互。 (3认同)
  • 查看其他[解决方案](https://github.com/rajeshbbalam/flutter_riverpod_multi_instance),通过在 ProviderScope 中覆盖提供程序。 (2认同)