可以在riverpods 中嵌套ConsumerWidgets 吗?

问题描述

在 Riverpods 中,可以嵌套 ConsumerWidgets 吗?像这样的东西?我想这样做是为了保持我的 api 分离,但感觉它可能会降低性能

class Foo1 extends ConsumerWidget {
  @override
  Widget build(BuildContext context,ScopedReader watch) {
    // watch something
    return Container(
      child: Foo2(),);
  }
}

class Foo2 extends ConsumerWidget {
  @override
    // watch something
  Widget build(BuildContext context,ScopedReader watch) {
    return Container();
  }
}

解决方法

这完全没有问题。如果您的应用程序中的大多数或所有小部件都是 ConsumerWidgets,这并不奇怪。

只要你只在需要的时候/需要的地方看提供者,你就没有什么可担心的。

有很多方法可以优化重建。例如,创建仅公开小部件可能依赖的状态的一个方面的提供程序或使用 Consumer 仅在提供程序公开的值更改时重建某些子项。如果您使用的是 hooks,则可以使用 select,这对于有条件地重建非常方便。