如何让提供者只重建某些小部件?

Moh*_*dan 5 provider dart flutter

我是提供商的新手,我有两个关于重建树的问题

我有这门课

class Myprovider extends ChangeNotifier {
  bool isFound= false;

  bool get isFoundM=> isFound;

  void changeStatus(bool status){
    isFound= status;
    notifyListeners();
  }
}
Run Code Online (Sandbox Code Playgroud)

我有stfl一个小部件,其中包含以下代码build method

 Myprovider myProvider = Myprovider ();
    Column(
        mainAxisAlignment: myProvider.isFound?  MainAxisAlignment.center: MainAxisAlignment.start,
        children:[

          myProvider.isFound? const Text('Hello flutter'):Container(),

          const Text('Hello dart'),

          TextButton(
              onPressed:(){
                myProvider.changeStatus(true);
              },

              child: Text('tab me')
          )

        ]
    );
Run Code Online (Sandbox Code Playgroud)

1-当我选择按钮时,Hello flutter Text 仅会重建其自身还是整个树都会重建?

2-上面我的专栏中的 widgets 属性怎么样?..即使它的父级包装了多个小部件,它也只会重建该属性?

如果没有我该如何处理这个

谢谢

Ala*_*sco 8

Stateful widget 与提供者无关。

Stateful Widget 仅在使用 SetState 时才有用。构建上下文下的每个小部件都会更新,并且它不会帮助您更新任何特定的小部件

与提供商一起构建某些小部件

与提供商合作时,您可以构建某些小部件,而无需重建整个内容

为此,您可以使用Consumer

Foo(
  child: Consumer<A>(
    builder: (_, a, child) {
      return Bar(a: a, child: child);
    },
    child: Baz(),
  ),
)
Run Code Online (Sandbox Code Playgroud)

注意:-在此示例中,当 A 更新时,只有 Bar 会重建。Foo 和 Baz 不会进行不必要的重建。

  • 使用任何类型的状态管理库时都不需要使用有状态小部件。你可以使用无状态小部件,一切正常。谢谢 (2认同)