首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Riverpod: NestedProvider

Riverpod: NestedProvider
EN

Stack Overflow用户
提问于 2022-05-16 03:15:25
回答 1查看 298关注 0票数 1

如何在Riverpod中使用嵌套提供者的概念-

我们没有通过构造函数推送数据,而是使用ChangeNotifierProvider.value() (嵌套提供程序),然后使用模型来显示数据。提供者本身将把构建器数据推入模型字段

代码语言:javascript
运行
复制
class ProductModel with ChangeNotifier {
final String imageUrl;

ProductModel({required this.imageUrl});}

来自product_grid.dart

代码语言:javascript
运行
复制
GridView.builder(
  itemCount: selectedProductList.length,
  itemBuilder: (ctx, i) => 
    ChangeNotifierProvider.value(
      value: selectedProductList[i],
      child: const ProductItem(),),);

转到product_item.dart

代码语言:javascript
运行
复制
final productModel = Provider.of<ProductModel>(context);

return GridTile(
    child: Image.network(
      productModel.imageUrl,
      fit: BoxFit.cover,
    ),
EN

回答 1

Stack Overflow用户

发布于 2022-05-17 21:48:22

听起来,您想要的是ProviderScope,您可以覆盖它的后代提供程序的值。

创建一个提供者:

代码语言:javascript
运行
复制
final selectedProduct = Provider<ProductModel>((_) => throw UnimplementedError());
代码语言:javascript
运行
复制
  GridView.builder(
      itemCount: selectedProductList.length,
      itemBuilder: (ctx, i) => 
        ProviderScope(
          overrides: [selectedProduct.overrideWithValue(selectedProductList[i])],
          child: const ProductItem(),),);

然后在product_item.dart

代码语言:javascript
运行
复制
final productModel = ref.watch(selectedProduct);

return GridTile(
    child: Image.network(
      productModel.imageUrl,
      fit: BoxFit.cover,
    ),

如果您想查看一下Remi是如何做到的,那么这个示例在Todo应用程序中有上面的实现:https://github.com/rrousselGit/riverpod/blob/master/examples/todos/lib/main.dart

希望这能帮上忙!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72253838

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档