メインコンテンツに進む

ログ記録とエラーレポート

Riverpod は provider ツリー内で発生するすべてのイベントを自然に監視する方法を提供します。
これは全てのイベントを記録したり、リモートサービスにエラーを報告するために使用できます。

これはProviderObserverクラスを使用し、ProviderScope/ProviderContainerを渡すことで実現されます。

ProviderObserver の定義

ProviderObserverは拡張すべきクラスです。
イベントをリッスン(listen)するために、オーバーライド(override)できるさまざまなメソッドを提供します:

  • didAddProvider, provider が tree に追加された時に呼び出されます
  • didUpdateProvider, provider が更新された時に呼び出されます
  • didDisposeProvider, provider が破棄された時に呼び出されます
  • providerDidFail, synchronous provider がエラーをスローした時に呼び出されます
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');
}
}

ProviderObserver の使用

observer を定義したので、これを使用する必要があります。
これを行うには、ProviderScope または ProviderContainerに渡す必要があります:

runApp(
ProviderScope(
observers: [
MyObserver(),
],
child: MyApp(),
)
);
final container = ProviderContainer(
observers: [
MyObserver(),
],
);