我正在尝试遵循有关如何使用 Flutter 和 Riverpod 组合提供程序来过滤项目列表的示例文档。数据来自使用 Streams 的 Firestore:
final carListProvider = StreamProvider.autoDispose<List<Car>>((ref) {
final carsRepo = ref.watch(carsRepositoryProvider);
return carsRepo.cars();
});
Run Code Online (Sandbox Code Playgroud)
这一切都工作正常,我可以使汽车列表没有问题。现在我想为用户提供根据颜色过滤列表的选项:
enum CarColorFilter {
all,
red,
white,
black,
}
final carListFilter = StateProvider((_) => CarListFilter.all);
Run Code Online (Sandbox Code Playgroud)
然后按照文档示例,我尝试组合提供程序:
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:
}
})
Run Code Online (Sandbox Code Playgroud)
在声明“cars”变量的行上,编辑抱怨道:
参数类型“AutoDisposeStreamProvider <List>”无法分配给参数类型“AlwaysAliveProviderBase <Object,dynamic>”
我认为我的用例和文档之间的区别在于,在给出的示例中, is List<Todo>aStateNotifierProvider而在我的例子中,List<Car>is a StreamProvider。任何帮助将非常感激。
在文档中找到了答案,发布在这里以防对其他人有帮助:
使用 .autoDispose 时,您可能会发现应用程序无法编译,并出现类似于以下内容的错误:
参数类型“AutoDisposeProvider”无法分配给参数类型“AlwaysAliveProviderBase”
不用担心!这个错误是自愿的。发生这种情况是因为您很可能遇到了错误:
您尝试在未标记为 .autoDispose 的提供程序中侦听标记为 .autoDispose 的提供程序
将filteredList 提供程序标记为autoDispose解决了该问题。
| 归档时间: |
|
| 查看次数: |
2954 次 |
| 最近记录: |