跳到主要内容

日志和错误报告

Riverpod 本身提供了一种监听提供者程序树中发生的所有事件的方法。
这可用于记录所有事件,或向远程服务报告错误。

这是通过使用 ProviderObserver 类并将其传递给 ProviderScope/ProviderContainer 来实现的。

定义 ProviderObserver ​

ProviderObserver 是一个应该被扩展的类。
它提供了各种可以重写的方法来监听事件:

  • didAddProvider,当提供者程序被添加到组件树时调用
  • didUpdateProvider,当提供者程序更新时调用
  • didDisposeProvider,当提供者程序被处置时调用
  • providerDidFail,当同步的提供者程序抛出错误时
class MyObserver extends ProviderObserver {

void didAddProvider(
ProviderObserverContext context,
Object? value,
) {
print('Provider ${context.provider} was initialized with $value');
}


void didDisposeProvider(ProviderObserverContext context) {
print('Provider ${context.provider} was disposed');
}


void didUpdateProvider(
ProviderObserverContext context,
Object? previousValue,
Object? newValue,
) {
print(
'Provider ${context.provider} updated from $previousValue to $newValue',
);
}


void providerDidFail(
ProviderObserverContext context,
Object error,
StackTrace stackTrace,
) {
print('Provider ${context.provider} threw $error at $stackTrace');
}
}

使用 ProviderObserver​

现在我们已经定义了观察者,我们需要使用它。
为此,我们应该将其传递给 ProviderScopeProviderContainer

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