首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从Riverpod发布StateNotifierProvider实现

从Riverpod发布StateNotifierProvider实现
EN

Stack Overflow用户
提问于 2022-02-09 17:01:50
回答 1查看 243关注 0票数 1

我正在尝试实现一个购物车系统,使用Riverpod来管理购物车的状态。

这是用户单击产品以将其添加到购物车中的部分:

代码语言:javascript
运行
复制
   GestureDetector(
                      child: Icon(Icons.shopping_cart),
                      onTap: () async {
                        print("cart test");
                        //create new cart item
                        Cart cartItem = new Cart(
                          id: product.id,
                          name: product.name,
                          oldPrice: product.oldPrice,
                          price: product.price,
                          imageUrl: product.imageUrl,
                          category: product.category,
                          quantity: 1
                        );
                        var cartInstance = context.read(cartListProvider);
                        if(isExistsInCart(cartInstance.state,cartItem))
                          context.read(cartListProvider).edit(cartItem,1);
                        else
                          {
                            context.read(cartListProvider).add(cartItem);//if already available in cart, just increase quantity
                            var string = json.encode(context.read(cartListProvider).state);
                            await storage.write(key: cartKey, value: string);
                            
                          }




                      },
                    )

这里有provider类:

代码语言:javascript
运行
复制
import 'package:cart_system_riverpod/models/cart.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';

final cartListProvider = StateNotifierProvider((ref){

  return CartList([]); //init empty cart

});

我还将ProviderScope添加到小部件树的顶部。

我的问题是,我在实现以下错误时遇到了错误:

代码语言:javascript
运行
复制
cartInstance = context.read(cartListProvider)

代码语言:javascript
运行
复制
context.read(cartListProvider).edit(cartItem,1);

总是在read(...)部分

编辑器显示提示The method 'read' isn't defined for the type 'BuildContext'.

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-02-09 17:15:52

从Riverpod 1.0.0中删除context.read以支持ref.read

所以将context.read替换为ref.read

试试这个:

代码语言:javascript
运行
复制
    Consumer(
      builder: (context, ref, _) {
        return GestureDetector(
          child: Icon(Icons.shopping_cart),
          onTap: () async {
            print("cart test");
            //create new cart item
            Cart cartItem = new Cart(
                id: product.id,
                name: product.name,
                oldPrice: product.oldPrice,
                price: product.price,
                imageUrl: product.imageUrl,
                category: product.category,
                quantity: 1);
            var cartInstance = ref.read(cartListProvider);
            if (isExistsInCart(cartInstance.state, cartItem))
              ref.read(cartListProvider).edit(cartItem, 1);
            else {
              ref.read(cartListProvider).add(
                  cartItem); //if already available in cart, just increase quantity
              var string = json.encode(ref.read(cartListProvider).state);
              await storage.write(key: cartKey, value: string);
            }
          },
        );
      },
    );

检查这里以读取更多信息。

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

https://stackoverflow.com/questions/71053729

复制
相关文章

相似问题

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