[英]Riverpod StateNotifierProvider depend on a FutureProvider
[英]Issue implementing StateNotifierProvider from Riverpod
我正在尝试使用 Riverpod 实现购物车系统来管理购物车的 state。
这是用户单击产品以将其添加到购物车的部分:
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);
}
},
)
这里有提供者 class:
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 添加到 Widgets 树的顶部。
我的问题是我在实施时遇到错误:
cartInstance = context.read(cartListProvider)
和
context.read(cartListProvider).edit(cartItem,1);
总是在read(...)
部分
编辑器显示提示The method 'read' isn't defined for the type 'BuildContext'.
从 Riverpod 1.0.0 中删除了context.read
以支持ref.read
所以用ref.read
替换context.read
尝试这个:
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);
}
},
);
},
);
点击这里阅读更多。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.