使用技巧
Consumer
1、可以在获取不到context的情况下来获取值。
2、可以避免不必要的rebuild,正常情况下,当值发生改变时,除非对provider.of设置了listen: false,只要和provider.of相关的context下的widget都会被rebuild,这个情况可以使用Consumer来处理,只rebuild一部分。
例如:
FooWidget包含BarWidget,只rebuild BarWidget
@override
Widget build(BuildContext context) {
return FooWidget(
child: Consumer<Bar>(
builder: (_, bar, __) => BarWidget(bar: bar),
),
);
}
FooWidget包含BarWidget,只rebuild FooWidget
@override
Widget build(BuildContext context) {
return Consumer<Foo>(
builder: (_, foo, child) => FooWidget(foo: foo, child: child),
child: BarWidget(),
);
}
3、Consumer只能用在MultiProvider中
MultiProvider(
providers: [
Provider(builder: (_) => Foo()),
Consumer<Foo>(
builder: (context, foo, child) =>
Provider.value(value: foo.bar, child: child),
)
],
);
网友评论