我正在尝试遵循有关如何使用 Flutter 和 Riverpod 组合提供者来过滤项目列表的示例文档。数据来自 Firestore 使用 Streams:
final carListProvider = StreamProvider.autoDispose<List<Car>>((ref) {
final carsRepo = ref.watch(carsRepositoryProvider);
return carsRepo.cars();
});
这一切正常,我可以毫无问题地渲染汽车列表。现在我想让用户选择根据颜色过滤列表:
enum CarColorFilter {
all,
red,
white,
black,
}
final carListFilter = StateProvider((_) => CarListFilter.all);
然后按照文档示例,我尝试合并提供程序:
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:
}
})
在声明 'cars' 变量的行中,编辑器抱怨:
<块引用>参数类型 'AutoDisposeStreamProvider' 不能是
分配给参数类型 'AlwaysAliveProviderBase
我认为我的用例和文档之间的区别在于,在给出的示例中,List<Todo>
是 StateNotifierProvider
而在我的情况下,List<Car>
是 StreamProvider
.任何帮助将不胜感激。
答案 0 :(得分:1)
在文档中找到答案,在此处发布以防对其他人有帮助:
<块引用>在使用 .autoDispose 时,您可能会发现自己处于以下情况 您的应用程序无法编译并出现类似于以下内容的错误:
无法将参数类型“AutoDisposeProvider”分配给 参数类型“AlwaysAliveProviderBase”
别担心!这个错误是自愿的。它发生是因为你最 可能有错误:
您试图在一个 未用 .autoDispose 标记的提供程序
将filteredList 提供程序标记为autoDispose
可以解决该问题。