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),
);
}
}
小部件树(如果它很重要):
MyTextField
是 Widget2
的 child。
Widget2
是 Widget1
的 child。
Widget1
是 HomePage
的 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.
我在 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),
);
}
}
小部件树(如果它很重要):
MyTextField
是 Widget2
的 child。
Widget2
是 Widget1
的 child。
Widget1
是 HomePage
的 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.