Function onError_ignoreOverflowErrors = (
FlutterErrorDetails details, {
bool forceReport = false,
}) {
assert(details != null);
assert(details.exception != null);
var isOverflowError = false;
// Detect overflow error.
var exception = details.exception;
if (exception is FlutterError) {
isOverflowError = exception.diagnostics.any((e) => e.value.toString().contains("A RenderFlex overflowed by"));
}
// Ignore if is overflow error: only report to the console, but do not throw exception as it will
// cause widget tests to fail.
if (isOverflowError) {
FlutterError.dumpErrorToConsole(details, forceReport: forceReport);
} else {
FlutterError.dumpErrorToConsole(details, forceReport: forceReport);
throw (exception);
}
};
setUpAll(() async {
FlutterError.onError = (FlutterErrorDetails details) {
// Detect overflow error
final exception = details.exception;
bool isOverFlowError = false;
if (exception is FlutterError) {
isOverFlowError = !exception.diagnostics.any((e) => e.value.toString().contains('RenderFlex'));
}
if (isOverFlowError) {
// If the error is an overflow error, then we can safely ignore it
// because it's not a real error.
return;
} else {
FlutterError.dumpErrorToConsole(details);
}
};
});
8条答案
按热度按时间p1iqtdky1#
基于@RémiRousselet的回答,我开发了一个解决方案。
此函数仅忽略溢出异常。
inn6fuwd2#
您不能专门禁用溢出。但有几个替代方法:
FlutterError.onError
设置为null
2nc8po8w3#
如果您的问题纯粹是由于Ahem字体太大引起的,您可以尝试使用可访问性textScaleFactor收缩所有文本,方法是将WidgetUnderTest Package 在MediaQuery中,如下所示:
这比在小部件测试中加载不同的字体要快得多,而且不会因为
FlutterError.onError
的混乱而带来遗漏错误的风险。但是,如果小部件不荣誉textScaleFactor,或者溢出是由其他原因引起的,这将不会有帮助。请注意,这可能隐藏了一个实际的问题。最好的解决方案是修复或重新设计UI,使其即使使用testScaleFactor也不会溢出:1.5的大字体,因此将字体设置为最大设置的用户将能够使用您的应用程序。
xpcnnkqh4#
稍微改进了爱德华多的回答:修复了检测测试,并对非溢出错误抛出实际异常,以便小部件测试实际中断。
k97glaaz5#
谢谢分享伙计们,它工作得很好!
对于任何想在测试中使用它的人:
nkcskrwz6#
如果是使用属性softWrap文本小部件上的溢出:错,像这样
ohtdti5x7#
如果您的测试中只有一个异常抛出,您可以告诉您的测试期待它,如下所示。
yduiuuwa8#
一种集中的方式来做。