日誌和錯誤報告
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
現在我們已經定義了觀察者,我們需要使用它。
為此,我們應該將其傳遞給 ProviderScope
或 ProviderContainer
:
runApp(
ProviderScope(
observers: [
MyObserver(),
],
child: MyApp(),
)
);
final container = ProviderContainer(
observers: [
MyObserver(),
],
);