riverpod-consumers
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
ChineseRiverpod — Consumers
Riverpod — Consumers
Instructions
说明
Consumers are widgets that give you a Ref (here, WidgetRef) so you can read and listen to providers. Without a Consumer, widgets cannot access the provider tree.
Consumers是一类组件,它会为你提供一个Ref(此处为WidgetRef),让你可以读取和监听providers。如果没有Consumer,组件将无法访问provider树。
Consumer (builder)
Consumer (builder)
Use when you want to keep extending or . The builder callback receives .
ConsumerStatelessWidgetStatefulWidget(context, ref, child)dart
class MyWidget extends StatelessWidget {
Widget build(BuildContext context) {
return Consumer(
builder: (context, ref, _) {
final value = ref.watch(myProvider);
return Text(value.toString());
},
);
}
}如果你希望继续继承或,可以使用。builder回调会接收参数。
StatelessWidgetStatefulWidgetConsumer(context, ref, child)dart
class MyWidget extends StatelessWidget {
Widget build(BuildContext context) {
return Consumer(
builder: (context, ref, _) {
final value = ref.watch(myProvider);
return Text(value.toString());
},
);
}
}ConsumerWidget
ConsumerWidget
Subclass instead of . The method receives .
ConsumerWidgetStatelessWidgetbuild(BuildContext context, WidgetRef ref)dart
class MyWidget extends ConsumerWidget {
Widget build(BuildContext context, WidgetRef ref) {
final value = ref.watch(myProvider);
return Text(value.toString());
}
}继承来替代。其方法会接收参数。
ConsumerWidgetStatelessWidgetbuild(BuildContext context, WidgetRef ref)dart
class MyWidget extends ConsumerWidget {
Widget build(BuildContext context, WidgetRef ref) {
final value = ref.watch(myProvider);
return Text(value.toString());
}
}ConsumerStatefulWidget + ConsumerState
ConsumerStatefulWidget + ConsumerState
When you need a (e.g. for lifecycle or local state), use and . The state object has a property.
StateConsumerStatefulWidgetConsumerStaterefdart
class MyWidget extends ConsumerStatefulWidget {
ConsumerState<MyWidget> createState() => _MyWidgetState();
}
class _MyWidgetState extends ConsumerState<MyWidget> {
Widget build(BuildContext context) {
final value = ref.watch(myProvider);
return Text(value.toString());
}
}当你需要使用(例如处理生命周期或本地状态)时,可以使用和。状态对象会拥有一个属性。
StateConsumerStatefulWidgetConsumerStaterefdart
class MyWidget extends ConsumerStatefulWidget {
ConsumerState<MyWidget> createState() => _MyWidgetState();
}
class _MyWidgetState extends ConsumerState<MyWidget> {
Widget build(BuildContext context) {
final value = ref.watch(myProvider);
return Text(value.toString());
}
}Which to use
如何选择
- Consumer — Use for everything if you prefer not to change your widget base class; slightly more verbose.
- ConsumerWidget — Recommended when you don't need State; one less nesting level.
- ConsumerStatefulWidget — Use when you need State (e.g. TabController, animations).
- Consumer — 如果你不想更改组件的基类,可用于所有场景;写法略为繁琐。
- ConsumerWidget — 当你不需要State时推荐使用;减少一层嵌套。
- ConsumerStatefulWidget — 当你需要State时使用(例如TabController、动画等场景)。
Why not StatelessWidget + context.watch?
为什么不使用StatelessWidget + context.watch?
Riverpod does not use to watch providers because that would break auto-dispose and other features that rely on knowing when a widget stops listening. Ref-based consumers allow reliable disposal and correct behavior. The hooks_riverpod package also offers HookConsumerWidget etc. for use with flutter_hooks. Enable riverpod_lint for IDE refactors (e.g. "Convert to ConsumerWidget").
BuildContextRiverpod不使用来监听providers,因为这会破坏**自动销毁(auto-dispose)**以及其他依赖于知晓组件何时停止监听的特性。基于Ref的消费者组件可以实现可靠的资源销毁和正确的行为。hooks_riverpod包还提供了HookConsumerWidget等组件,可与flutter_hooks配合使用。启用riverpod_lint插件可支持IDE重构(例如“转换为ConsumerWidget”)。
BuildContext