【问题标题】:Package:flutter/src/widgets/overlay.dart': Failed assertion: line 133 pos 12: '_overlay != null':包:flutter/src/widgets/overlay.dart':断言失败:第 133 行 pos 12:'_overlay != null':
【发布时间】:2018-12-28 20:18:38
【问题描述】:

entry 是 OverlayEntry 类的一个实例

entry?.remove();

错误

Package:flutter/src/widgets/overlay.dart': Failed assertion: line 133 pos 12: '_overlay != null':

【问题讨论】:

    标签: dart flutter


    【解决方案1】:

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

    if (entry != null) {
      entry.remove();
      entry = null;
    }
    

    【讨论】:

    • 虽然这段代码可能会回答这个问题,但添加 cmets 来解释它是如何工作的会增加答案的长期价值。
    • 好吧,如果没有将 OverlayEntry 插入 Overlay 并且您尝试调用 remove 方法,您将收到错误:断言失败:'_overlay != null'。所以在删除条目之前,添加一个条件来判断它是否合法。它更像是一个 hack 代码,您可以添加一个类似 isEntryNotNull 的变量,以方便和易于理解。并且当你在 Overlay 中插入一个新的 OverlayEntry 时,将它重新赋值给 entry 变量,那么条件就可以正常工作了。
    【解决方案2】:

    已解决

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

    entry?.remove();
    entry = null;
    

    【讨论】:

      【解决方案3】:

      你可以检查叠加层是不是这样挂载的

        if (floatingDropdown?.mounted ?? false) {
          floatingDropdown?.remove();
        }
      

      【讨论】:

        【解决方案4】:

        试试这个,它对我有用

         if (overlayEntry != null && overlayEntry.mounted) {
          overlayEntry?.remove();
          overlayEntry = null;
        }
        

        【讨论】:

          猜你喜欢
          • 2020-03-01
          • 2022-06-27
          • 2021-03-22
          • 2023-01-24
          • 2021-08-07
          • 2021-07-24
          • 1970-01-01
          • 2019-12-09
          • 2021-04-12
          相关资源
          最近更新 更多