Flutter Flatter Riverpod-如何组合提供者在流上进行过滤

Flutter Flatter Riverpod-如何组合提供者在流上进行过滤,flutter,riverpod,Flutter,Riverpod,我试图按照示例文档介绍如何使用flifter&Riverpod组合提供者来过滤项目列表。数据来自Firestore,使用流: final carListProvider = StreamProvider.autoDispose<List<Car>>((ref) { final carsRepo = ref.watch(carsRepositoryProvider); return carsRepo.cars(); }); 然后,按照文档示例,我尝试合并提供者:

我试图按照示例文档介绍如何使用flifter&Riverpod组合提供者来过滤项目列表。数据来自Firestore,使用流:

final carListProvider = StreamProvider.autoDispose<List<Car>>((ref) {
  final carsRepo = ref.watch(carsRepositoryProvider);
  return carsRepo.cars();
});
然后,按照文档示例,我尝试合并提供者:

final filteredCars = StreamProvider<List<Car>>((ref) {
  final filter = ref.watch(carListFilter);
  final cars = ref.watch(carListProvider); <-- This line throws the error

  switch (filter.state) {
    case CarColorFilter.all:
      return cars;
    case CarColorFilter.red:
      return cars.where(...)

    default:
  }
})
final filteredCars=StreamProvider((ref){
最终过滤器=参考表(carListFilter);

final cars=ref.watch(carListProvider);在文档中找到了答案,在这里发布,以防对其他人有所帮助:

使用.autoDispose时,您可能会发现自己处于 您的应用程序未编译,错误类似于:

无法将参数类型“AutoDisposeProvider”分配给 参数类型“AlwaysAliveProviderBase”

别担心!这个错误是自愿的。它的发生是因为你 可能有一个bug:

您试图侦听中标记为.autoDispose的提供程序 未标记为.autoDispose的提供程序

将filteredList提供程序标记为
autoDispose
可解决此问题

final filteredCars = StreamProvider<List<Car>>((ref) {
  final filter = ref.watch(carListFilter);
  final cars = ref.watch(carListProvider); <-- This line throws the error

  switch (filter.state) {
    case CarColorFilter.all:
      return cars;
    case CarColorFilter.red:
      return cars.where(...)

    default:
  }
})