我正在使用 Flutter 构建一个清单应用程序,我似乎正在跨检查点和检查建立内存。我已经来来回回 2 周了,现在试图重组页面无济于事。
我正在使用 Flutter Bloc https://felangel.github.io/bloc在检查点屏幕上进行状态管理。我怀疑 Bloc 导致了我的内存泄漏。
检查点屏幕非常复杂:
当用户提交检查点时,将存储答案并为用户显示下一个检查点,直到他们到达检查结束并关闭它。
这是屏幕的屏幕截图,不幸的是这里无法看到 TextFormField,但它就在“发现”这个词的下方。
我注意到的事情:
当检查点屏幕第一次加载并且我在 DevTools 中拍摄快照时,我可以看到每个小部件的 1 个实例(AnswerOptions、CheckHeader、Comments、ImageGrid)。但是,一旦我开始切换选项,即。在 OK、DEFECTIVE、N/A 之间跳跃,实例(AnswerOptions、CheckHeader、Comments、ImageGrid)开始堆积。当用户提交检查点甚至完全退出检查时,这些类会留在内存堆中并且永远不会被释放。
我还注意到重复的实例仅从 CheckpointForm 向下通过小部件树开始。AssetInspection 和 InspectionView 不会在堆中复制实例。
页面首次加载时的示例:
然后我切换 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)