软件包:flutter/src/widgets/overlay.dart ':Assert失败:第133行位置12:'_overlay!= null':

tkclm6bt  于 2023-05-01  发布在  Flutter
关注(0)|答案(5)|浏览(431)

entry是OverlayEntry类的示例

entry?.remove();

错误

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

mwkjh3gx1#

已解决

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

entry?.remove();
entry = null;
6qftjkof

6qftjkof2#

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

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

fslejnso3#

试试这个,对我很有效

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

yzxexxkh4#

您可以检查是否像这样安装了覆盖

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

a0x5cqrl5#

import React from 'react';import { render,fireEvent } from '@testing-library/react';从“”导入{ WarningAlert }。/WarningAlert';
describe('WarningAlert ',()=〉{ const props = { title:'警告!',变体:'warning',inlineText:“这是一个警告”,actionHref:'https:// www.example.com :'了解更多',onClose:int n();
it('renders the title ',()=〉{ const { getByText } = render(〈WarningAlert {.. props} /〉);expect(getByText(props.);});
it('renders the inline text ',()=〉{ const { getByText } = render(〈WarningAlert {...props} /〉);expect(getByText(props.inlineText))。getString();});
it('renders the action link with the correct href and text ',()=〉{ const { getByRole } = render(〈WarningAlert {.. props} /〉);const link = getByRole('link');expect(link).toHaveAttribute('href ',props.);expect(link)。toHaveTextContent(props.document. writeln();});
it('calls the onClose function when the close button is clicked ',()=〉{ const { getByLabelText } = render(〈WarningAlert {...props} /〉); www.example.com ('Close');expect(props.public void run();}); });

相关问题