包:flutter/src/widgets/overlay.dart':断言失败:第 133 行 pos 12:'_overlay != null':

Rav*_*eri 10 dart flutter

entry 是 OverlayEntry 类的一个实例

entry?.remove();
Run Code Online (Sandbox Code Playgroud)

错误

Package:flutter/src/widgets/overlay.dart': Failed assertion: line 133 pos 12: '_overlay != null':
Run Code Online (Sandbox Code Playgroud)

Rav*_*eri 18

解决

经过大量研究和尝试,我发现了下面一个简单的解决方案。

entry?.remove();
entry = null;
Run Code Online (Sandbox Code Playgroud)


Sai*_*i N 8

试试这个,它对我有用

 if (overlayEntry != null && overlayEntry.mounted) {
  overlayEntry?.remove();
  overlayEntry = null;
}
Run Code Online (Sandbox Code Playgroud)


小智 7

如果没有 OverlayEntry 插入到 Overlay 并且您尝试调用 remove 方法,您将收到该错误:Failed assertion: '_overlay != null'。所以在删除条目之前,添加一个条件来判断它是否合法。它更像是一个黑客代码,isEntryNotNull为了方便和易于理解,您可以添加一个变量。当你在 Overlay 中插入一个新的 OverlayEntry 时,将它重新分配给 entry 变量,那么条件就会正常工作。

if (entry != null) {
  entry.remove();
  entry = null;
}
Run Code Online (Sandbox Code Playgroud)

  • 虽然此代码可以回答该问题,但添加注释来解释其工作原理会增加答案的长期价值。 (2认同)