Flutter 多个 notifyListeners 调用

Flutter multiple notifyListeners calls

我在 flutter 中使用 ChangeNotifier 的 notifyListeners。如果我连续调用 notifyListeners() 三次会怎样?在这种情况下 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),
    );
  }
}

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

MyTextFieldWidget2 的 child。

Widget2Widget1 的 child。

Widget1HomePage 的 child。

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(),
      )
    );
  }
}

UI只会更新一次。当 notifyListeners() 被调用 3 次或更多次时,您可以通过简单地在构建方法中打印一些内容来测试它。即使调用 3 次通知,UI 仍未更新的原因是因为抖动。如果树中的数据与传入的新数据不同,Flutter 只会更新 widget 树。因此即使 notifyListeners() 被调用 1000 次,如果当前 widget 树与调用 notify 之前相同,flutter 不会'更新 UI.