21Flutter 布局 —— 理解 BoxConstraint(盒约束)布局模型.pdfVIP

21Flutter 布局 —— 理解 BoxConstraint(盒约束)布局模型.pdf

  1. 1、本文档共21页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Flutter 布局 —— 理解 BoxConstraint (盒约束)布局 模型 前⾯讲了 Flutter ⼀些 UI Widget 的使⽤,但实际开发中,我们还需 要将这些 Widget 按照⼀定的布局组合起 ,Flutter 的布局和 Android、iOS、WEB 的布局有相似之处,也有不同之处。 所以这节,主要讲⼀下 Flutter 的布局原理:BoxConstraints (盒 约束)。 什么是 BoxConstraints (盒约束)? BoxConstraints 翻译过 是 盒约束,⽤于指定 Widget ⼤⼩的约 束。 Flutter 的 Widget 都是通过 BoxConstraints 约束⼤⼩的。 BoxConstraints 如何来约束Widget的⼤ ⼩? 如上图,以左上⻆为原点,在 X轴 和 Y轴 上设置最⼩值和最⼤值,就 对应了 BoxConstraints 的四个属性: 1. minWidth . maxWidth 3. minHeight 4. maxHeight 这四个属性可以确定如下的关系: 0.0 = minWidth = Widget宽度的实际⼤⼩ = maxWidth = double.infinity 0.0 = minHeight = Widget⾼度的实际⼤⼩ = maxHeight = double.infinity 这样就会形成⼀个矩形的范围:不⼩于⻩⾊的矩形,不⼤于绿⾊的矩 形,这样就确定了⼀个 Widget 的⼤⼩范围, Flutter 采⽤ BoxConstraints 是为了更好的适配多种平台。 Flutter 如何确定 Widget 的⼤⼩? 前⾯讲的 BoxConstraints,只能确定 Widget ⼤⼩的⼀个范围,并 不能知道 Widget 的确切⼤⼩,这样是⽆法绘制的,那么 Flutter 是 如何确定 Widget ⼤⼩的呢? 这是⼀个Widget树的结构,为了确定 Widget 的⼤⼩: 1. ⽗Widget 会将⾃⼰的 BoxConstraints 传递给⾃⼰的 ⼦ Widget,直到传到树的叶节点 (没有⼦节点了),因此树的叶 节点会拥有所有⽗节点的 BoxConstraints,这些 BoxConstraints 会相互影响。 . 叶节点的Widget 会根据这些 BoxConstraints 和⾃⼰的 BoxConstraints 计算出⾃⼰的⼤⼩,并将⾃⼰的⼤⼩返回给 ⽗ Widget。 3. ⽗Widget 得到 ⼦Widget 的⼤⼩后,根据 ⼦Widget 的⼤ ⼩、前⾯ ⽗Widget 们传递的 BoxConstraints 和⾃⼰的 BoxConstraints,同样可以计算出⾃⼰的⼤⼩,这样依次往上 传递⾄ 根Widget。 所以 Widget 的⼤⼩是受其 ⽗Widget 的约束和⾃⼰ ⼦Widget 的⼤⼩共同影响的 BoxConstraints 的种类 对 BoxConstraints 的四个属性赋不同的值,会有不同的约束效果, 为了更直观的了解这些约束效果,写了⼀个简单的 demo : import package:flutter/material.dart; void main() = runApp(MyApp( Hello World )); class MyApp extends StatefulWidget { // This widget is the root of your application. String content; MyApp(this.content); @override StateStatefulWidget createState() { // TODO: implement createState return MyAppState(); } } class MyAppState extends StateMyApp { void increment() { setState(() { widget.content += d ; }); } @override Widget

文档评论(0)

东山书苑 + 关注
实名认证
文档贡献者

业务以学生学习成长为中心,为外语培训、中小学基础教育、学前教育,提供各种学习资料支持服务。

1亿VIP精品文档

相关文档