随笔 - 262  文章 - 0  评论 - 5  阅读 - 20万

【flutter 入门】Consider setting mainAxisSize to MainAxisSize.min and using FlexFit.loose fits for the flexible child

Flexible,Expanded 

先参考一遍错误解决。

https://blog.csdn.net/m0_37828249/article/details/104121933

讲道理这段阅读理解已经告诉我们问题所在以及如何解决了,不放心可以配合一点源码阅读:在Flutter中可滚动组件的高度是无限(infinte)的,如源码所说:“provides its children with an infinite amount of space.”。这点特性和一些尽可能撑满可用空间的组件如Expanded互斥(Expand在flex布局中用以自动撑满剩下所有空间,其fit属性默认为FlexFit.tight)——因为在可滚动组件中使用Expanded时,Expanded可被分配的空间是无限的,无法渲染,于是抛错。

解决方式也是阅读理解后稍稍发散,不用Expanded这类fit属性为FlexFit.tight的组件就ok了,可以像提示所说的用Flexible代替Expanded(它的fit属性默认为fit属性默认为FlexFit.loose,呈现包裹性,刚好包裹子元素且不会超过最大可用宽(高)度),同时要注意,父Flex类型元素的mainAxisSize一定要设为MainAxisSize.min,否则也会报错,原理也是和上卖弄一样的可用空间无限问题。总结一下,其实垂直可滚动组件中,Column内部不可以也没必要使用任何none-zero的flex元素,所有chidren都用Container即可,如果强迫症也请使用Flexible,而非Expanded。
View Code
 
* Flexible组件可以使Row、Column、Flex等子组件在主轴方向有填充可用空间的能力,但是不强制子组件填充可用空间。
* Expanded组件可以使Row、Column、Flex等子组件在其主轴方向上展开并填充可用空间,是强制子组件填充可用空间。


作者:习惯了_就好
链接:https://www.jianshu.com/p/d07d811a7d68
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
 

Flexible是一个控制Row、Column、Flex等子组件如何布局的组件。

Flexible组件可以使Row、Column、Flex等子组件在主轴方向有填充可用空间的能力(例如,Row在水平方向,Column在垂直方向),但是它与Expanded组件不同,它不强制子组件填充可用空间。

Flexible组件必须是Row、Column、Flex等组件的后裔,并且从Flexible到它封装的Row、Column、Flex的路径必须只包括StatelessWidgets或StatefulWidgets组件(不能是其他类型的组件,像RenderObjectWidgets)。

直观理解

 

 

总结,两控年是对Row、Column、Flex 布局的处理。子控件占多少地方。

比例嵌套ListView GridView.

 

 

posted on   wp7ers  阅读(1834)  评论(0编辑  收藏  举报
编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示