1

我在 Flutter 中使用 ChangeNotifier 中的 notifyListeners。如果我notifyListeners()连续调用 3 次会怎样?在这种情况下,UI 会更新多少次?

notifyListeners全部代码:

class Data with ChangeNotifier
{
  String _data = 'some text';
  String get getData => _data;
  void changeString(String newString)
  {
    _data = newString;
    notifyListeners();
    notifyListeners();
    notifyListeners();
  }
}

用法:

class MyTextField extends StatelessWidget {
  const MyTextField({Key? key}) : super(key: key);
  @override
  Widget build(BuildContext context) {
    return TextField(
      onChanged: (newData) => context.read<Data>().changeString(newData),
    );
  }
}

小部件树(如果它很重要):

MyTextField是 的孩子Widget2

Widget2是 的孩子Widget1

Widget1是 的孩子HomePage

class HomePage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Container(child: Text(context.watch<Data>().getData),),
      ),
      body: Center(
        child: Widget1(),
      )
    );
  }
}
4

1 回答 1

5

UI 只会更新一次。notifyListeners()您可以通过在调用 3 次或更多次时在 build 方法中简单地打印一些内容来测试这一点。即使调用了 3 次通知,UI 也没有更新的原因是因为颤动。如果树中的数据与传入的新数据不同,Flutter 只会更新小部件树。因此,即使notifyListeners()调用了 1000 次,如果当前小部件树与调用 notify 之前相同,Flutter 也不会更新 UI .

于 2021-06-19T20:42:03.077 回答