Flutter Riverpod:首次执行失败后如何触发 FutureProvider?

问题描述

有没有办法在第一次尝试失败时重试 FutureProvider?

供应商:

final _dataProvider = FutureProvider((ref) => ref.watch(productRepositoryProvider).fetchProducts());

消费者:

return watch(_dataProvider).when(
  data: (value) {
    return Text('Ok');
  },loading: () => const CircularProgressIndicator(),error: (error,stackTrace) {    
    return FlatButton(
      child: Text('Retry'),onpressed: () {
        // What should I add here to retry this FutureProvider?
      },);
  },);

解决方法

你可以试试

onPressed: () {
        context.refresh(_dataProvider);
      },
,

我认为最适合您尝试做的事情是这样的:

StreamProvider 和 Autodispose

final productRepositoryProvider =
    Provider<IProductRepository>((ref) => ProductRepository());

final allProductProvider =
    StreamProvider.autoDispose<List<ProductModel>>((ref) {
  final _productRepository = ref.watch(productRepositoryProvider);
  return _productRepository.allProductsStream;
});