如何知道是啥触发了我的 Flutter 小部件重建
Posted
技术标签:
【中文标题】如何知道是啥触发了我的 Flutter 小部件重建【英文标题】:How to know what triggered my Flutter widget rebuilds如何知道是什么触发了我的 Flutter 小部件重建 【发布时间】:2020-01-08 23:45:09 【问题描述】:我已经看到很多关于为什么一个小部件不必要地重建的问题,但我正在寻找一种方法来了解触发它们的原因。
所以我在视图小部件上放了一个断点,我得到了一个相当大的堆栈(裁剪 - 它大了 5 倍):
我们应该如何追踪该死的重建起源?
【问题讨论】:
【参考方案1】:在https://pub.dev/packages/debug_tools 有一个名为debug_tools
的新包。该软件包包括一个BuildTracker
,它允许找出导致重建的原因。
示例运行:
构建的小部件
ValueListenableBuilder<String> ← [root]
Directionality ← ValueListenableBuilder<String> ← [root]
Text ← Directionality ← ValueListenableBuilder<String> ← [root]
标记为脏的小部件(构建根)
ValueListenableBuilder ← [根]:
State.setState package:flutter/src/widgets/framework.dart 1287:15
_ValueListenableBuilderState._valueChanged package:flutter/src/widgets/value_listenable_builder.dart 182:5
ChangeNotifier.notifyListeners package:flutter/src/foundation/change_notifier.dart 243:25
ValueNotifier.value= package:flutter/src/foundation/change_notifier.dart 309:5
* main.<fn> test/build_tracker_test.dart 25:10
...
【讨论】:
以上是关于如何知道是啥触发了我的 Flutter 小部件重建的主要内容,如果未能解决你的问题,请参考以下文章
Flutter:StreamProvider 的奇怪行为,使用不完整数据重建的小部件