跳到主要内容

日志和错误报告

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(),
],
);