Flutter布局

https://flutter.io/layout/

当你箱子约束布局遇到一些困难时,可以查看文档:

介绍:

在Flutter,控件由RenderBox对象来渲染的.Render box由父节点给出约束,自己在约束范围内决定大小.约束由高宽最大最小值组成.

通常,有三类箱子,区别在于他们如何处理约束:

尽量占用空间的,像Center,ListView.

与子元素同大小的,Transform,Opacity.

特定大小的,像Image,Text

一些控件,如Container,由构造函数参数不同而不同.默认是充满空间,如果给定宽值,就会成为特定大小的.

其它的一些,如Row,Column,也不同于前面的约束,他们是由Flex布局模型控制的.

约束有时比较"紧",可能没有空间留下了,如果最大与最小是相同的,就表示是紧的宽.像示例中的控件,RenderView类给定了空间,展示充满它的内容区大小,这个是build方法里约束的.在Flutter里的多数箱子,尤其是只有一个子元素的,会传递约束到子元素.如果你内嵌了箱子,这些会受到渲染树的约束限制的.

有一些箱子的失去某些约束,像Center,只有最大,没有最小约束.

无限的约束:

某些情况下,约束是无限的.表示最大高与宽都是double.INFINITY.

一个无限约束的箱子,想要它尽量占满空间是无效的.在选择模式下,会抛出异常.

最常见的情况是,当一个渲染箱子,自己是无限约束的,在Flex箱子里,存在滚动的区间.

(这段意思我理解是,像ScrollView,ListView里的子元素,它不设置约束宽高,默认就应该是充满父节点的)

ListView是要充满父容器的,如果内嵌了一个ListView在水平的ListView里面内嵌的也会尽量充满父容器,

Flex

flex箱子,基于它们定好的方向上的箱子,可以有限也无限

有限的约束,会在它们方向上的约束一样大

无限约束,它们会把子元素在给定方向上充满空间.这种情况下,你不能设置flex==0外的值在子元素上.控件库中,Flex在另一个flex或滚动的控件里的的时候,无法使用expaned.如果使用了,会抛出异常.

跨方向的,像Column的宽/Row的高,需要是无限的,否则无法定位子元素.

如果理解了Android里面的ConstratLayout布局,就很容易地理解了flex了,如果想深入了解flex,可以查看flexlayout布局,由facebook出品,google改造.

现在很多h5页也是由flex box完成的.

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值