跳到主要內容

日誌和錯誤報告

Riverpod 本身提供了一種監聽提供者程式樹中發生的所有事件的方法。
這可用於記錄所有事件,或向遠端服務報告錯誤。

這是透過使用 ProviderObserver 類並將其傳遞給 ProviderScope/ProviderContainer 來實現的。

定義 ProviderObserver ​

ProviderObserver 是一個應該被擴充套件的類。
它提供了各種可以重寫的方法來監聽事件:

  • didAddProvider,當提供者程式被新增到元件樹時呼叫
  • didUpdateProvider,當提供者程式更新時呼叫
  • didDisposeProvider,當提供者程式被處置時呼叫
  • providerDidFail,當同步的提供者程式丟擲錯誤時
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​

現在我們已經定義了觀察者,我們需要使用它。
為此,我們應該將其傳遞給 ProviderScopeProviderContainer

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