flutter中provider使用

flutter官方provider

使用技巧

  • Consumer 和 Selector
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(
       builder: (_, bar, __) => BarWidget(bar: bar),
     ),
   );
 }
FooWidget包含BarWidget,只rebuild FooWidget
@override
 Widget build(BuildContext context) {
   return Consumer(
     builder: (_, foo, child) => FooWidget(foo: foo, child: child),
     child: BarWidget(),
   );
 }

3、Consumer只能用在MultiProvider中

MultiProvider(
  providers: [
    Provider(builder: (_) => Foo()),
    Consumer(
      builder: (context, foo, child) =>
        Provider.value(value: foo.bar, child: child),
    )
  ],
);
Selector

你可能感兴趣的:(flutter中provider使用)