我正在尝试使用 dio 调用相同的 api 调用并使用 Riverpod 监听该 api 调用,但问题是当我在构建函数中调用 api 调用时,它可以工作,但是当我使用 a 调用相同的 api 调用时不同的参数,调用时它不会刷新用户界面,尝试了 ref.invalidate() 和 ref.read() 但没有运气,我很乐意获得一些帮助,谢谢。
var data = ref.watch(getAllProductsProvider(Utils.categoriesNames[0].toLowerCase()));
Widget buildCards(BuildContext context){
return SizedBox(
height: 120,
child: ListView.builder(
shrinkWrap: true,
scrollDirection: Axis.horizontal,
itemCount: Utils.categories.length,
itemBuilder: (context, index) {
return Card(
color: Colors.grey.shade100,
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(16),
side: BorderSide(
color: selectedCategory == index ? Colors.orange : Colors.transparent,
),
),
child: GestureDetector(
onTap: () {
setState(() {
selectedCategory = index;
});
ref.invalidate(getAllProductsProvider(Utils.categoriesNames[index].toLowerCase()));
},
child: Padding(
padding: const EdgeInsets.only(left: 15,right: 15,top: 10,bottom: 10),
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
mainAxisSize: MainAxisSize.min,
children: [
Image.asset(
Utils.categories[index],
width: 40,
height: 40,
),
const SizedBox(height: 5),
Text(
categoriesNamesY[index],
style: AppFonts.getFont().copyWith(fontSize: 20),
),
],
),
),
),
);
},
),
);
}
您似乎仅使特定参数的提供程序无效。 下面的示例来自有关接收参数的提供者无效的 Riverpod 文档。
void onTap() {
// Invalidate all possible parameter combinations of this provider.
ref.invalidate(labelProvider);
// Invalidate a specific combination only
ref.invalidate(labelProvider('John'));
}