Salta al contenuto principale

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'albero
  • didUpdateProvider, chiamato quando un provider viene aggiornato
  • didDisposeProvider, chiamato quando un provider viene distrutto
  • providerDidFail, quando un provider sincrono genera un errore
class MyObserver extends ProviderObserver {

void didAddProvider(
ProviderBase<Object?> provider,
Object? value,
ProviderContainer container,
) {
print('Provider $provider was initialized with $value');
}


void didDisposeProvider(
ProviderBase<Object?> provider,
ProviderContainer container,
) {
print('Provider $provider was disposed');
}


void didUpdateProvider(
ProviderBase<Object?> provider,
Object? previousValue,
Object? newValue,
ProviderContainer container,
) {
print('Provider $provider updated from $previousValue to $newValue');
}


void providerDidFail(
ProviderBase<Object?> provider,
Object error,
StackTrace stackTrace,
ProviderContainer container,
) {
print('Provider $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(),
],
);