小编War*_*sen的帖子

Flutter 内存泄漏 - Flutter Bloc

我正在使用 Flutter 构建一个清单应用程序,我似乎正在跨检查点和检查建立内存。我已经来来回回 2 周了,现在试图重组页面无济于事。

我正在使用 Flutter Bloc https://felangel.github.io/bloc在检查点屏幕上进行状态管理。我怀疑 Bloc 导致了我的内存泄漏。

检查点屏幕非常复杂:

  1. 显示用户在清单中的位置的标题,即。检查点 4/50。
  2. 显示答案选项的小部件:好的,有缺陷的,不适用。
  3. 一个小部件,允许用户为检查点拍摄最多 2 张图像
  4. 用于输入检查点结果的 TextFormField 小部件

当用户提交检查点时,将存储答案并为用户显示下一个检查点,直到他们到达检查结束并关闭它。

这是屏幕的屏幕截图,不幸的是这里无法看到 TextFormField,但它就在“发现”这个词的下方。

检查点屏幕截图

我注意到的事情:

当检查点屏幕第一次加载并且我在 DevTools 中拍摄快照时,我可以看到每个小部件的 1 个实例(AnswerOptions、CheckHeader、Comments、ImageGrid)。但是,一旦我开始切换选项,即。在 OK、DEFECTIVE、N/A 之间跳跃,实例(AnswerOptions、CheckHeader、Comments、ImageGrid)开始堆积。当用户提交检查点甚至完全退出检查时,这些类会留在内存堆中并且永远不会被释放。

我还注意到重复的实例仅从 CheckpointForm 向下通过小部件树开始。AssetInspection 和 InspectionView 不会在堆中复制实例。

页面首次加载时的示例:

1 CheckHeader 实例

然后我切换 OK、DEFECTIVE 和 N/A 并拍摄另一个快照:

切换选项后实例已累积

附上代码:

资产检查

class AssetInspection extends StatefulWidget
{
  final Checklist checklist;
  final Asset asset;
  final Job job;
  final AssetPoolDatabase database;

  AssetInspection({
    Key key,
    @required this.checklist,
    @required this.asset,
    @required this.job,
    @required this.database, …
Run Code Online (Sandbox Code Playgroud)

memory-leaks dart flutter bloc

4
推荐指数
1
解决办法
2971
查看次数

标签 统计

bloc ×1

dart ×1

flutter ×1

memory-leaks ×1