riverpod-observers
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
ChineseRiverpod — ProviderObservers
Riverpod — ProviderObserver
Instructions
说明
A ProviderObserver receives lifecycle events for providers (e.g. when a provider's value changes). Use it for logging, analytics, or debugging.
ProviderObserver 会接收provider的生命周期事件(例如provider的值发生变化时)。可将其用于日志记录、数据分析或调试。
Implementing an observer
实现观察者
Extend ProviderObserver and override the methods you need (e.g. didUpdateProvider). Pass instances to ProviderScope or ProviderContainer via the parameter.
observers继承ProviderObserver并按需重写方法(例如didUpdateProvider)。通过参数将实例传递给ProviderScope或ProviderContainer。
observersExample: logger
示例:日志记录器
dart
final class Logger extends ProviderObserver {
void didUpdateProvider(
ProviderObserverContext context,
Object? previousValue,
Object? newValue,
) {
print('{"provider": "${context.provider}", "newValue": "$newValue"}');
}
}
void main() {
runApp(
ProviderScope(
observers: [Logger()],
child: const MyApp(),
),
);
}dart
final class Logger extends ProviderObserver {
void didUpdateProvider(
ProviderObserverContext context,
Object? previousValue,
Object? newValue,
) {
print('{"provider": "${context.provider}", "newValue": "$newValue"}');
}
}
void main() {
runApp(
ProviderScope(
observers: [Logger()],
child: const MyApp(),
),
);
}Naming providers
为provider命名
For clearer logs, give providers a name:
dart
final myProvider = Provider<int>((ref) => 0, name: 'MyProvider');With code generation, a name is usually assigned automatically.
为了让日志更清晰,可为provider指定一个名称:
dart
final myProvider = Provider<int>((ref) => 0, name: 'MyProvider');使用代码生成时,通常会自动分配名称。
Note on mutations
关于状态变更的注意事项
If state is mutated in place (e.g. a List with ref.notifyListeners), and in didUpdateProvider may be the same reference. For distinct values, clone before mutating.
previousValuenewValue如果状态是原地修改的(例如使用ref.notifyListeners的List),didUpdateProvider中的和可能指向同一个引用。若需要区分不同的值,请在修改前进行克隆。
previousValuenewValue