我正在使用StreamProviderFamily
`ref.watch(getReceitasRefeicaoProvider( const ReceitasParams(
tipo: 'meat',
maxPreco: 10000,
minLikes: 0,
maxCalorias: 100000,
maxtempo: 1000)))
.when(`
以显示用户的食谱。一开始我使用了上面代码中的"const RecipesParams",一切都运行得很好。但是当我删除"const"
`ref.watch(getReceitasRefeicaoProvider(ReceitasParams(
tipo: 'meat',
maxPreco: 10000,
minLikes: 0,
maxCalorias: 100000,
maxtempo: 1000)))
.when(`
StreamProvider系列始终处于加载状态
Controller.dart
final receitaControllerProvider =
StateNotifierProvider<ReceitaController, bool>((ref) {
final receitaRepository = ref.watch(receitaRepositoryProvider);
final storageRepository = ref.watch(storageRepositoryProvider);
return ReceitaController(
receitaRepository: receitaRepository,
ref: ref,
storageRepository: storageRepository);
});
final getReceitasRefeicaoProvider = StreamProvider.family<List<Receita>, ReceitasParams>((ref, ReceitasParams params) {
final postController = ref.watch(receitaControllerProvider.notifier);
return postController.getReceitasRefeicao(params.tipo, params.maxPreco, params.minLikes, params.maxCalorias, params.maxtempo);
});
Stream<List<Receita>> getReceitasRefeicao(
String tipo, int maxPreco, int minLikes, int maxCalorias, int maxtempo) {
return _receitaRepository.getReceitasRefeicao(tipo,maxPreco,minLikes,maxCalorias,maxtempo);
}
repository.dart
Stream<List<Receita>> getReceitasRefeicao(
String tipo, int maxPreco, int minLikes, int maxCalorias, int maxtempo) {
return _receitas.where('refeicoes', arrayContains: tipo).snapshots().map(
(event) => event.docs
.map((e) => Receita.fromMap(e.data() as Map<String, dynamic>))
.where((receita) {
final preco = int.tryParse(receita.preco);
final calorias = int.tryParse(receita.calorias);
final tempo = int.tryParse(receita.tempo);
return preco != null &&
calorias != null &&
tempo != null &&
tempo < maxtempo &&
preco < maxPreco &&
receita.likes.length >= minLikes &&
calorias < maxCalorias;
}).toList(),
);
}
我不明白为什么。
2条答案
按热度按时间jqjz2hbq1#
如果你删除了const,但没有为ReceitasParams设置正确的==和hashCode,那么它的每个示例都是!=的任何其他示例,并且每次都将获得一个全新的提供程序,即使参数相同。
所以,是的,解决方案是你必须实现==和hashCode,这样相等的东西也是==。
pcww981p2#
经过一段时间的研究,我终于找到了解决办法。要更正此错误,需要为RecipesParams创建一个“数据类”。