개발하자
플러터 리버팟: 첫 번째 실행이 실패한 후 FutureProvider를 트리거하는 방법은 무엇입니까?
Cuire
2023. 10. 8. 02:28
반응형
플러터 리버팟: 첫 번째 실행이 실패한 후 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?
},
);
},
);
나는 당신이 하려는 것에 대한 가장 적절한 접근법은 다음과 같은 것이라고 생각한다:
StreamProvider 및 자동 폐기
final productRepositoryProvider =
Provider<IProductRepository>((ref) => ProductRepository());
final allProductProvider =
StreamProvider.autoDispose<List<ProductModel>>((ref) {
final _productRepository = ref.watch(productRepositoryProvider);
return _productRepository.allProductsStream;
});
해볼 수 있다
onPressed: () {
context.refresh(_dataProvider);
},
다른 대답들은 구식이다. 대신 사용:
ref.invalidate(yourProvider);
'제공자의 상태를 무효화하여 새로 고침을 발생시킵니다.
[refresh](새로 고침)과는 달리 새로 고침은 즉각적이지 않으며 대신 다음 읽기 또는 다음 프레임으로 지연됩니다.
[무효]를 여러 번 호출하면 공급자가 한 번만 새로 고쳐집니다.
[무효]를 호출하면 공급자가 즉시 처리됩니다.
만약 초기화되지 않은 공급자에게 사용된다면, 이 방법은 효과가 없을 것이다.'
공급자와 동일한 ProviderScope에서 이를 호출해야 합니다!
반응형