首页 > 解决方案 > 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。该代码适用于真实设备。

标签: flutter

解决方案


推荐阅读