flutter - 如何使用 StateNotifierProvider 中的 StreamProvider?

标签 flutter dart state provider riverpod

我尝试使用 StateNotifierProvider 中的 StreamProvider。

这是我的 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 - 如何使用 StateNotifierProvider 中的 StreamProvider?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66264604/

相关文章:

firebase - 方法 'setData' 没有为类型 'documentreference' 定义

android - 如何访问有状态小部件列表的状态对象的方法? ( flutter )

flutter - 当我已经为另一个函数进行了计算时,为什么不能将这些计算调用到我的构建中

reactjs - 如何使用条件和 React Hooks 设置随机初始状态?

android - 如何在 flutter 包中使用原生 C 库

android - 是否可以将隐藏的小部件导出为图像?

flutter - 如何从 Flutter 将亚洲语言打印到热敏打印机?

flutter - Riverpod StateNotifierProvider 依赖于 FutureProvider

angularjs - UI-路由器 : Prevent access to parent state

java - 我的 JFrame 没有绘制选项字符串