原文链接:Logging and error reporting | Riverpod
pub:riverpod | Dart Package (flutter-io.cn)
译时版本: 2.4.9
之前翻译过 Riverpod 的官方文档,现在随着版本更新,官方文档又多了很多新内容,所以再补充翻译一下。
之前翻译过的内容,现在官方文档有中文了。
Flutter状态管理库Riverpod官方文档翻译汇总 - 掘金 (juejin.cn)
日志和错误报告
Riverpod原生提供了监听 provider 树中发生的所有事件的手段。
这可以用来记录所有事件的日志,或向远程服务报告错误。
这是通过使用 ProviderObserver
类并把它传递给 ProviderScope
/ProviderContainer
实现的。
定义 ProviderObserver
ProviderObserver
是应当被继承的类。
它提供了多种可被重写的方法来监听事件:
didAddProvider
,当 provider 被添加到 provider 树时调用didUpdateProvider
,当 provider 被更新时调用didDisposeProvider
,当 provider 被清除时调用providerDidFail
,当同步 provider 抛出错误时调用
dart
class MyObserver extends ProviderObserver {
@override
void didAddProvider(
ProviderBase<Object?> provider,
Object? value,
ProviderContainer container,
) {
print('Provider $provider was initialized with $value');
}
@override
void didDisposeProvider(
ProviderBase<Object?> provider,
ProviderContainer container,
) {
print('Provider $provider was disposed');
}
@override
void didUpdateProvider(
ProviderBase<Object?> provider,
Object? previousValue,
Object? newValue,
ProviderContainer container,
) {
print('Provider $provider updated from $previousValue to $newValue');
}
@override
void providerDidFail(
ProviderBase<Object?> provider,
Object error,
StackTrace stackTrace,
ProviderContainer container,
) {
print('Provider $provider threw $error at $stackTrace');
}
}
使用 ProviderObserver
现在定义了一个 observer (观察者),下面要使用它。
要使用它,应当将其传递给 ProviderScope
或 ProviderContainer
:
less
runApp(
ProviderScope(
observers: [
MyObserver(),
],
child: MyApp(),
)
);
ini
final container = ProviderContainer(
observers: [
MyObserver(),
],
);