如何知道是啥触发了我的 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 BLoC - 状态不会触发小部件重建

Flutter:StreamProvider 的奇怪行为,使用不完整数据重建的小部件

三元条件没有重建我的小部件 - Flutter

当消费者触发重建时,MaterialApp 主页小部件不会被渲染。需要油漆

Flutter Provider 不会重建小部件

使用上下文和观察更改模型时,Flutter Provider 不会触发重建