flutter - flutter 测试返回异常 RenderImage 类的内在维度方法返回的值违反了内在
问题描述
我目前正在为我的颤振应用程序做 CI/CD,但是当我这样做时flutter test
,发生了这些异常,
workplace\myapp>flutter test
00:03 +0: test
══╡ EXCEPTION CAUGHT BY RENDERING LIBRARY ╞═════════════════════════════════════════════════════════
The following assertion was thrown during performLayout():
The intrinsic dimension methods of the RenderImage class returned values that violate the intrinsic
protocol contract.
The following failures was detected:
* getMinIntrinsicWidth(Infinity) returned a non-finite value: Infinity
* getMaxIntrinsicWidth(Infinity) returned a non-finite value: Infinity
* getMinIntrinsicHeight(Infinity) returned a non-finite value: Infinity
* getMaxIntrinsicHeight(Infinity) returned a non-finite value: Infinity
* getMinIntrinsicWidth(600.0) returned a non-finite value: Infinity
* getMaxIntrinsicWidth(600.0) returned a non-finite value: Infinity
* getMinIntrinsicHeight(800.0) returned a non-finite value: Infinity
* getMaxIntrinsicHeight(800.0) returned a non-finite value: Infinity
If you are not writing your own RenderBox subclass, then this is not
your fault. Contact support: https://github.com/flutter/flutter/issues/new?template=BUG.md
The relevant error-causing widget was:
Image file:///C:/workplace/myapp/lib/widgets/app_full_height_background.dart:10:20
When the exception was thrown, this was the stack:
#0 RenderBox.debugAssertDoesMeetConstraints.<anonymous closure> (package:flutter/src/rendering/box.dart:2033:11)
#1 RenderBox.debugAssertDoesMeetConstraints (package:flutter/src/rendering/box.dart:2045:6)
#2 RenderBox.size=.<anonymous closure> (package:flutter/src/rendering/box.dart:1763:7)
#3 RenderBox.size= (package:flutter/src/rendering/box.dart:1765:6)
#4 RenderImage.performLayout (package:flutter/src/rendering/image.dart:370:5)
#5 RenderObject.layout (package:flutter/src/rendering/object.dart:1769:7)
#6 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:115:13)
#7 RenderObject.layout (package:flutter/src/rendering/object.dart:1769:7)
#8 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:115:13)
#9 RenderObject.layout (package:flutter/src/rendering/object.dart:1769:7)
#10 RenderPositionedBox.performLayout (package:flutter/src/rendering/shifted_box.dart:396:13)
#11 RenderObject.layout (package:flutter/src/rendering/object.dart:1769:7)
#12 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:115:13)
#13 RenderObject.layout (package:flutter/src/rendering/object.dart:1769:7)
#14 RenderStack.performLayout (package:flutter/src/rendering/stack.dart:562:15)
#15 RenderObject.layout (package:flutter/src/rendering/object.dart:1769:7)
#16 MultiChildLayoutDelegate.layoutChild (package:flutter/src/rendering/custom_layout.dart:173:11)
#17 _ScaffoldLayout.performLayout (package:flutter/src/material/scaffold.dart:495:7)
#18 MultiChildLayoutDelegate._callPerformLayout (package:flutter/src/rendering/custom_layout.dart:242:7)
#19 RenderCustomMultiChildLayoutBox.performLayout (package:flutter/src/rendering/custom_layout.dart:401:14)
#20 RenderObject.layout (package:flutter/src/rendering/object.dart:1769:7)
#21 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:115:13)
#22 RenderObject.layout (package:flutter/src/rendering/object.dart:1769:7)
#23 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:115:13)
#24 _RenderCustomClip.performLayout (package:flutter/src/rendering/proxy_box.dart:1269:11)
#25 RenderObject.layout (package:flutter/src/rendering/object.dart:1769:7)
#26 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:115:13)
#27 RenderObject.layout (package:flutter/src/rendering/object.dart:1769:7)
#28 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:115:13)
#29 RenderObject.layout (package:flutter/src/rendering/object.dart:1769:7)
#30 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:115:13)
#31 RenderObject.layout (package:flutter/src/rendering/object.dart:1769:7)
#32 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:115:13)
#33 RenderObject.layout (package:flutter/src/rendering/object.dart:1769:7)
#34 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:115:13)
#35 RenderObject.layout (package:flutter/src/rendering/object.dart:1769:7)
#36 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:115:13)
#37 RenderObject.layout (package:flutter/src/rendering/object.dart:1769:7)
#38 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:115:13)
#39 RenderObject.layout (package:flutter/src/rendering/object.dart:1769:7)
#40 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:115:13)
#41 RenderOffstage.performLayout (package:flutter/src/rendering/proxy_box.dart:3228:13)
#42 RenderObject.layout (package:flutter/src/rendering/object.dart:1769:7)
#43 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:115:13)
#44 RenderObject.layout (package:flutter/src/rendering/object.dart:1769:7)
#45 _RenderTheatre.performLayout (package:flutter/src/widgets/overlay.dart:702:15)
#46 RenderObject.layout (package:flutter/src/rendering/object.dart:1769:7)
#47 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:115:13)
#48 RenderObject.layout (package:flutter/src/rendering/object.dart:1769:7)
#49 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:115:13)
#50 RenderObject.layout (package:flutter/src/rendering/object.dart:1769:7)
#51 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:115:13)
#52 RenderObject.layout (package:flutter/src/rendering/object.dart:1769:7)
#53 MultiChildLayoutDelegate.layoutChild (package:flutter/src/rendering/custom_layout.dart:173:11)
#54 _ScaffoldLayout.performLayout (package:flutter/src/material/scaffold.dart:495:7)
#55 MultiChildLayoutDelegate._callPerformLayout (package:flutter/src/rendering/custom_layout.dart:242:7)
#56 RenderCustomMultiChildLayoutBox.performLayout (package:flutter/src/rendering/custom_layout.dart:401:14)
#57 RenderObject.layout (package:flutter/src/rendering/object.dart:1769:7)
#58 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:115:13)
#59 RenderObject.layout (package:flutter/src/rendering/object.dart:1769:7)
#60 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:115:13)
#61 _RenderCustomClip.performLayout (package:flutter/src/rendering/proxy_box.dart:1269:11)
#62 RenderObject.layout (package:flutter/src/rendering/object.dart:1769:7)
#63 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:115:13)
#64 RenderObject.layout (package:flutter/src/rendering/object.dart:1769:7)
#65 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:115:13)
#66 RenderObject.layout (package:flutter/src/rendering/object.dart:1769:7)
#67 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:115:13)
#68 RenderObject.layout (package:flutter/src/rendering/object.dart:1769:7)
#69 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:115:13)
#70 RenderObject.layout (package:flutter/src/rendering/object.dart:1769:7)
#71 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:115:13)
#72 RenderObject.layout (package:flutter/src/rendering/object.dart:1769:7)
#73 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:115:13)
#74 RenderObject.layout (package:flutter/src/rendering/object.dart:1769:7)
#75 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:115:13)
#76 RenderObject.layout (package:flutter/src/rendering/object.dart:1769:7)
#77 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:115:13)
#78 RenderOffstage.performLayout (package:flutter/src/rendering/proxy_box.dart:3228:13)
#79 RenderObject.layout (package:flutter/src/rendering/object.dart:1769:7)
#80 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:115:13)
#81 RenderObject.layout (package:flutter/src/rendering/object.dart:1769:7)
#82 _RenderTheatre.performLayout (package:flutter/src/widgets/overlay.dart:702:15)
#83 RenderObject.layout (package:flutter/src/rendering/object.dart:1769:7)
#84 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:115:13)
#85 RenderObject.layout (package:flutter/src/rendering/object.dart:1769:7)
#86 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:115:13)
#87 RenderObject.layout (package:flutter/src/rendering/object.dart:1769:7)
#88 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:115:13)
#89 RenderObject.layout (package:flutter/src/rendering/object.dart:1769:7)
#90 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:115:13)
#91 RenderObject.layout (package:flutter/src/rendering/object.dart:1769:7)
#92 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:115:13)
#93 RenderObject.layout (package:flutter/src/rendering/object.dart:1769:7)
#94 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:115:13)
#95 RenderObject.layout (package:flutter/src/rendering/object.dart:1769:7)
#96 RenderView.performLayout (package:flutter/src/rendering/view.dart:170:13)
#97 RenderObject._layoutWithoutResize (package:flutter/src/rendering/object.dart:1632:7)
#98 PipelineOwner.flushLayout (package:flutter/src/rendering/object.dart:889:18)
#99 AutomatedTestWidgetsFlutterBinding.drawFrame (package:flutter_test/src/binding.dart:1059:23)
#100 RendererBinding._handlePersistentFrameCallback (package:flutter/src/rendering/binding.dart:286:5)
#101 SchedulerBinding._invokeFrameCallback (package:flutter/src/scheduler/binding.dart:1117:15)
#102 SchedulerBinding.handleDrawFrame (package:flutter/src/scheduler/binding.dart:1056:9)
#103 AutomatedTestWidgetsFlutterBinding.pump.<anonymous closure> (package:flutter_test/src/binding.dart:929:9)
#106 TestAsyncUtils.guard (package:flutter_test/src/test_async_utils.dart:72:41)
#107 AutomatedTestWidgetsFlutterBinding.pump (package:flutter_test/src/binding.dart:916:27)
#108 WidgetTester.pumpWidget.<anonymous closure> (package:flutter_test/src/widget_tester.dart:462:22)
#111 TestAsyncUtils.guard (package:flutter_test/src/test_async_utils.dart:72:41)
#112 WidgetTester.pumpWidget (package:flutter_test/src/widget_tester.dart:459:27)
#113 main.<anonymous closure> (file:///C:/workplace/myapp/test/widget_test.dart:17:18)
#124 FakeAsync.flushMicrotasks (package:fake_async/fake_async.dart:192:32)
#125 AutomatedTestWidgetsFlutterBinding.runTest.<anonymous closure> (package:flutter_test/src/binding.dart:1149:17)
#126 AutomatedTestWidgetsFlutterBinding.runTest.<anonymous closure> (package:flutter_test/src/binding.dart:1137:35)
(elided 29 frames from dart:async and package:stack_trace)
The following RenderObject was being processed when the exception was fired: RenderImage#f734c relayoutBoundary=up6 NEEDS-PAINT:
creator: RawImage ← Semantics ← Image ← Transform ← AppFullHeightBackgroundWidget ← Align ←
ColoredBox ← Container ← Stack ← _BodyBuilder ← MediaQuery ← LayoutId-[<_ScaffoldSlot.body>] ← ⋯
parentData: <none> (can use size)
constraints: BoxConstraints(0.0<=w<=800.0, 0.0<=h<=600.0)
size: Size(800.0, 600.0)
image: null
width: Infinity
height: Infinity
fit: cover
alignment: center
invertColors: false
filterQuality: low
This RenderObject has no descendants.
════════════════════════════════════════════════════════════════════════════════════════════════════
══╡ EXCEPTION CAUGHT BY FLUTTER TEST FRAMEWORK ╞════════════════════════════════════════════════════
The following message was thrown:
Multiple exceptions (7) were detected during the running of the current test, and at least one was
unexpected.
════════════════════════════════════════════════════════════════════════════════════════════════════
00:08 +0 -1: test [E]
Test failed. See exception logs above.
The test description was: test
00:08 +0 -1: Some tests failed.
class AppFullHeightBackgroundWidget extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Transform.scale(
scale: 1.5,
origin: Offset(-100, 175),
child: Image.asset(
AppDrawables.background,
width: double.infinity,
height: double.infinity,
fit: BoxFit.cover,
),
);
}
我尽量避免将所有的 double.infinity 更改为有限值,因为我使用了很多 double.infinity。该代码适用于真实设备。
解决方案
推荐阅读
- google-cloud-platform - MWAA 中的 apache-airflow-providers-google
- reactjs - 如何遍历 JSON 数据数组中的对象并检查其名称是否包含某个字符串?
- javascript - 仅在浏览器刷新后第一次启动时按钮动画不正确
- java - 在更改变量时在 java 中扩展的正确方法
- reactjs - 无法设置状态接口并将道具传递给反应打字稿中的其他组件
- paypal - 尝试使用信用卡付款时,PayPal 结账返回无法处理的实体 - 3D 安全
- c# - .NET Maui SQLite 连接
- linux - 为什么linux显示“文件描述符4(??????)在...上泄露”以及如何删除它?
- javascript - 发送回用户时填充的数组为空
- apache-flink - Flink 的进程在没有错误的情况下关闭