gpt4 book ai didi

flutter - 如何使用StreamProvider从StateNotifierProvider?

转载 作者:行者123 更新时间:2023-12-04 08:04:56 28 4
gpt4 key购买 nike

我尝试使用StreamProvider从StateNotifierProvider。
这里是我的StreamProvider,工作正常为止。

final productListStreamProvider = StreamProvider.autoDispose<List<ProductModel>>((ref) {
CollectionReference ref = FirebaseFirestore.instance.collection('products');
return ref.snapshots().map((snapshot) {
final list = snapshot.docs
.map((document) => ProductModel.fromSnapshot(document))
.toList();
return list;
});
});
现在,我想填充我的购物车将所有的产品在它从无到有。
final cartRiverpodProvider = StateNotifierProvider((ref) => 
new CartRiverpod(ref.watch(productListStreamProvider));
这是我的CartRiverPod StateNotifier
class CartRiverpod extends StateNotifier<List<CartItemModel>> {

CartRiverpod([List<CartItemModel> products]) : super(products ?? []);

void add(ProductModel product) {
state = [...state, new CartItemModel(product:product)];
print ("added");
}

void remove(String id) {
state = state.where((product) => product.id != id).toList();
}
}

最佳答案

完成此操作的最简单方法是接受 Reader作为 StateNotifier 的参数。
例如:

class CartRiverpod extends StateNotifier<List<CartItemModel>> {
CartRiverpod(this._read, [List<CartItemModel> products]) : super(products ?? []) {
// use _read anywhere in your StateNotifier to access any providers.
// e.g. _read(productListStreamProvider);
}

final Reader _read;

void add(ProductModel product) {
state = [...state, new CartItemModel(product: product)];
print("added");
}

void remove(String id) {
state = state.where((product) => product.id != id).toList();
}
}

final cartRiverpodProvider = StateNotifierProvider<CartRiverpod>((ref) => CartRiverpod(ref.read, []));

关于flutter - 如何使用StreamProvider从StateNotifierProvider?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66264604/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com