做Flutter项目的时候,引用Column套用ListView的时候,会报这样的异常

先看一下代码中的两个控件之间的套用关系

出现这个问题的原因是Column控件是纵向布局,而高度无限制。ListView控件呢,是可滑动控件,在滑动方向上也无高度限制。两个都无限制的控件相互嵌套,就会报出以上异常。
解决方法,在ListView的外层Padding外再添加一层Expanded控件,如下

问题解决。问:那把Expanded控件放在Padding内ListView外会是什么效果。报错如下:

The ParentDataWidget Expanded(flex: 1) wants to apply ParentData of type FlexParentData to a RenderObject, which has been set up to accept ParentData of incompatible type BoxParentData.这句话就是关键。我去百度翻译了一下

大体意思就是Expanded控件只能用在Flex子组件里面,不能用在RenderObjectWidget子组件内。我们进去源码可以看到,Row、Column都是Flex的子组件,而Padding是SingleChildRenderObjectWidget的子组件。那么问:从百度翻译的内容看出来的?答案:否。我在Flutter中文网的flutter实战电子书中看到的


看到这句话的时候,看不懂的百度翻译的内容是不是就比较容易理解了。
知道了这一点,那么以后遇到这样的问题,是不是就有解决的方法了。
网友评论