Logging e segnalazione degli errori
Riverpod offre nativamente un modo per ascoltare tutti gli eventi che succedono nell'albero dei provider. Questo può essere usato per loggare tutti gli eventi, o riportare gli errori ad un servizio remoto.
Ciò è possibile usando la classe ProviderObserver
,
che viene passata a ProviderScope
/ProviderContainer
.
Definire un ProviderObserver
Un ProviderObserver
è una classe che dovrebbe essere estesa.
Offre vari metodi che possono essere sovrascritti per ascoltare gli eventi:
didAddProvider
, chiamato quando un provider è aggiunto all'alberodidUpdateProvider
, chiamato quando un provider viene aggiornatodidDisposeProvider
, chiamato quando un provider viene distruttoproviderDidFail
, quando un provider sincrono genera un errore
class MyObserver extends ProviderObserver {
void didAddProvider(
ProviderObserverContext context,
Object? value,
) {
print('Provider ${context.provider} was initialized with $value');
}
void didDisposeProvider(ProviderObserverContext context) {
print('Provider ${context.provider} was disposed');
}
void didUpdateProvider(
ProviderObserverContext context,
Object? previousValue,
Object? newValue,
) {
print(
'Provider ${context.provider} updated from $previousValue to $newValue',
);
}
void providerDidFail(
ProviderObserverContext context,
Object error,
StackTrace stackTrace,
) {
print('Provider ${context.provider} threw $error at $stackTrace');
}
}
Usare un ProviderObserver
Per utilizzare il nostro observer appena definito dovremmo passarlo a ProviderScope
o a ProviderContainer
:
runApp(
ProviderScope(
observers: [
MyObserver(),
],
child: MyApp(),
)
);
final container = ProviderContainer(
observers: [
MyObserver(),
],
);