【发布时间】:2021-11-16 19:33:06
【问题描述】:
我一直在检查我的应用程序的性能,并注意到其中一个小部件不断循环。在该小部件中,我使用以下代码从 Firestore DB 检索数据,但是对于本示例,我使用相同的循环结果对其进行了简化。
问题:Widget Binding 被多次调用并且循环调用有什么原因吗?我的印象是它在小部件构建完成时被调用一次。我应该为一次性后期构建功能使用其他东西吗?
我在 listView 中有 7 个这样的小部件,所以我相信她最多应该有 7 个。
@override
void initState() {
super.initState();
WidgetsBinding.instance.addPersistentFrameCallback((timeStamp) async {
print(' Is callback done?');
if (mounted) {
setState(() {
isLoaded = true;
});
}
});
}
小部件本身非常简单,只有一个文本小部件
@override
Widget build(BuildContext context) {
return Text('Hello');
);
}
在我的日志中,我看到以下内容不断上升。
【问题讨论】:
-
正如您现在所意识到的,问题出在 addPersistentFrameCallback() 上,它在应用程序的生命周期内为每一帧一遍又一遍地调用回调。解决方法是用 addPostFrameCallback() 代替。但是您仍然可能需要考虑其他方法。例如:stackoverflow.com/a/61075285/3135317
-
@paulsm4 感谢您的建议,但出于各种原因,我故意选择不为此应用程序使用基于反应/流的方法。如果我没有,这将是一个很好的建议,所以我感谢您抽出宝贵时间发表评论。