分享好友 最新动态首页 最新动态分类 切换频道
Flutter 布局(八)- Stack,从草根到百万年薪程序员的十年风雨之路
2024-12-26 20:23
  • 4.根据是否包含positioned子节点,对stack进行尺寸调整。

if (hasNonPositionedChildren) {
size = new Size(width, height);
} else {
size = constraints.biggest;
}

Flutter 布局(八)- Stack,从草根到百万年薪程序员的十年风雨之路

  • 5.最后对子节点位置的调整,这个调整过程中,则根据alignment、positioned节点的绝对位置等信息,对子节点进行布局。

第一步是根据positioned的绝对位置,计算出约束条件后进行布局。

if (childParentData.left != null && childParentData.right != null)
childConstraints = childConstraints.tighten(width: size.width - childParentData.right - childParentData.left);
else if (childParentData.width != null)
childConstraints = childConstraints.tighten(width: childParentData.width);

if (childParentData.top != null && childParentData.bottom != null)
childConstraints = childConstraints.tighten(height: size.height - childParentData.bottom - childParentData.top);
else if (childParentData.height != null)
childConstraints = childConstraints.tighten(height: childParentData.height);

child.layout(childConstraints, parentUsesSize: true);

第二步则是位置的调整,其中坐标的计算如下

double x;
if (childParentData.left != null) {
x = childParentData.left;
} else if (childParentData.right != null) {
x = size.width - childParentData.right - child.size.width;
} else {
x = _resolvedAlignment.alongOffset(size - child.size).dx;
}

if (x < 0.0 || x + child.size.width > size.width)
_hasVisualOverflow = true;

double y;
if (childParentData.top != null) {
y = childParentData.top;
} else if (childParentData.bottom != null) {
y = size.height - childParentData.bottom - child.size.height;
} else {
y = _resolvedAlignment.alongOffset(size - child.size).dy;
}

if (y < 0.0 || y + child.size.height > size.height)
_hasVisualOverflow = true;

childParentData.offset = new Offset(x, y);

1.6 使用场景

Stack的场景还是比较多的,对于需要叠加显示的布局,一般都可以使用Stack。有些场景下,也可以被其他控件替代,我们应该选择开销较小的控件去实现。

A Stack that shows a single child from a list of children.

2.1 简介

IndexedStack继承自Stack,它的作用是显示第index个child,其他child都是不可见的。所以IndexedStack的尺寸永远是跟最大的子节点尺寸一致。

2.2 例子

在此还是将Stack的例子稍加改造,将index设置为1,也就是显示含文本的Container的节点。

Container(
color: Colors.yellow,
child: IndexedStack(
index: 1,
alignment: const Alignment(0.6, 0.6),
children: [
CircleAvatar(
backgroundImage: AssetImage(‘images/pic.jpg’),
radius: 100.0,
),
Container(
decoration: BoxDecoration(
color: Colors.black45,
),
child: Text(
‘Mia B’,
style: TextStyle(
fontSize: 20.0,
fontWeight: FontWeight.bold,
color: Colors.white,
),
),
),
],
),
)

2.3 源码解析

其绘制代码很简单,因为继承自Stack,布局方面表现基本一致,不同之处在于其绘制的时候,只是将第Index个child进行了绘制。

@override
void paintStack(PaintingContext context, Offset offset) {
if (firstChild == null || index == null)
return;
final RenderBox child = _childAtIndex();
final StackParentData childParentData = child.parentData;
context.paintChild(child, childParentData.offset + offset);
}

2.4 使用场景

如果需要展示一堆控件中的一个,可以使用IndexedStack。有一定的使用场景,但是也有控件可以实现其功能,只不过操作起来可能会复杂一些。

A scrollable, 2D array of widgets.

3.1 简介

GridView在移动端上非常的常见,就是一个滚动的多列列表,实际的使用场景也非常的多。

3.2 布局行为

GridView的布局行为不复杂,本身是尽量占满空间区域,布局行为上完全继承自ScrollView。

3.3 继承关系

Object > Diagnosticable > DiagnosticableTree > Widget > StatelessWidget > ScrollView > BoxScrollView > GridView

从继承关系看,GridView是在ScrollView的基础上封装而来的,这跟移动端的类似。

3.4 示例代码

GridView.count(
crossAxisCount: 2,
children: List.generate(
100,
(index) {
return Center(
child: Text(
‘Item $index’,
style: Theme.of(context).textTheme.headline,
),
);
},
),
);

示例代码直接用了Creating a Grid List中的例子,创建了一个2列总共100个子节点的列表。

3.5 源码解析

默认构造函数如下

GridView({
Key key,
Axis scrollDirection = Axis.vertical,
bool reverse = false,
ScrollController controller,
bool primary,
ScrollPhysics physics,
bool shrinkWrap = false,
EdgeInsetsGeometry padding,
@required this.gridDelegate,
bool addAutomaticKeepAlives = true,
bool addRepaintBoundaries = true,
double cacheExtent,
List children = const [],
})

同时也提供了如下额外的四种构造方法,方便开发者使用。

GridView.builder
GridView.custom
GridView.count

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Android工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

总结

开发是面向对象。我们找工作应该更多是面向面试。哪怕进大厂真的只是去宁螺丝,但你要进去得先学会面试的时候造飞机不是么

作者13年java转Android开发,在小厂待过,也去过华为,OPPO等,去年四月份进了阿里一直到现在。等大厂待过也面试过很多人。深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长,不成体系的学习效果低效漫长且无助。

这里附上上述的技术体系图相关的几十套腾讯、头条、阿里、美团等公司的面试题,把技术点整理成了视频和PDF(实际上比预期多花了不少精力,包含知识脉络 + 诸多细节,由于篇幅有限,这里以图片的形式给大家展示一部分。

相信它会给大家带来很多收获

资料太多,全部展示会影响篇幅,暂时就先列举这些部分截图

当程序员容易,当一个优秀的程序员是需要不断学习的,从初级程序员到高级程序员,从初级架构师到资深架构师,或者走向管理,从技术经理到技术总监,每个阶段都需要掌握不同的能力。早早确定自己的职业方向,才能在工作和能力提升中甩开同龄人。

[外链图片转存中…(img-XfjzieHA-1711644498361)]

[外链图片转存中…(img-paQuhviV-1711644498361)]

资料太多,全部展示会影响篇幅,暂时就先列举这些部分截图

当程序员容易,当一个优秀的程序员是需要不断学习的,从初级程序员到高级程序员,从初级架构师到资深架构师,或者走向管理,从技术经理到技术总监,每个阶段都需要掌握不同的能力。早早确定自己的职业方向,才能在工作和能力提升中甩开同龄人。

最新文章
高清美女写真如何一键生成?超详细AI工具评测与使用技巧!
限时免费,点击体验最近超火的AI生图神器,坐拥3000美女的大男主就是你! https://ai.sohu.com/pc/generate/textToImg?_trans_=030001_yljdaimn 在这个视觉主导的时代,很多人都希望通过高质量的照片展示自己的魅力,特别是在社交平台上。
【宝塔面板建站】10分钟windows宝塔面板一键部署安装wordpress,无需服务器和域名本地运行(保姆级图文)
『杂记』分享一些实用的技巧方法 安装环境,配置环境教程,推荐实用软件 软件的使用问题。 欢迎关注 『宝塔面板建站』 系列,持续更新中 欢迎关注 『宝塔面板建站』 系列,持续更新中如果还没有安装好宝塔面板
高手都在用ppt一键生成免费版:手把手教你巧用AI生成PPT的工具
直接点击“选模板生成PPT”,按照需要制作的ppt类型和风格筛选ppt模板,选中模板后根据指引输入ppt关键词,即可快速一键生成逻辑条理在线的ppt大纲;确认文本大纲无误再单击“下一步”,等待收获ai帮我们制作好的ppt演示文稿。生成的PPT演
郑州靠谱 seo 整站优化:提升网站排名的有效策略及目标关键词布局
郑州可靠的seo全站优化:提高网站排名的有效策略做过网站的人都知道,网站定位非常重要。很多网站都会为了网站排名而做SEO优化。如果你不清楚自己网站的定位,那么SEO优化的过程就会影响你的优化效果。如果您不清楚,这个网站所做的事情会
食神客栈手游多开挂机搬砖
《食神客栈》是一款模拟经营类休闲游戏,玩家可以体验店铺装修、后厨、揽客、农场、开炉灶、住店等经营系统玩法。食神客栈赚钱攻略很简单,最好是可以利用游戏挂机软件多多云手机实现帐号多开,游戏在云手机里面可以一天24小时持续在线挂机
高德地图店铺定位秘籍,手游公司的必备攻略
在手游的世界里,玩家的体验至关重要,而对于手游公司来说,除了打造精彩的游戏内容,让玩家能够轻松找到公司线下店铺的位置也是提升服务质量的重要一环,就来为您揭晓如何在高德地图上添加自己店铺的位置。之后,您会看到有“添加店铺”的
终于呈现“途游四川麻将外卦神器下载安装”其实确实有挂
您好:途游四川麻将外卦神器下载安装这款游戏是可以开挂的,软件加微信【添加图中微信】确实是有挂的,很多玩家在这款游戏中打牌都会发现很多用户的牌特别好,总是好牌,而且好像能看到其他人的牌一样。所以很多小伙伴就怀疑这款游戏是不是
青橙智能锁24小时售后服务电话热线/故障维修客服中心 - 生活 - 百科知识-蓝心网
青橙智能锁售后服务热线-服务电话400-658-8618青橙智能锁是一家专业从事青橙智能锁生产和销售的公司。作为一家以用户体验为核心的企业,青橙智能锁致力于为客户提供优质的售后服务。无论是安装、使用还是维修,我们都秉承着高效、及时、真
抖音直播代运营费用如何?揭秘直播代运营价格背后的秘密!
随着抖音直播的火爆,越来越多的商家开始考虑通过代运营的方式进入这个领域。然而,对于许多初次接触代运营的商家来说,代运营费用是一个令人困惑的问题。本文将详细解析抖音直播代运营费用的构成及背后的秘密。我们要明确的是,抖音直播代
网站空间按流量计费,合理分配资源,降低企业成本,流量计费网站空间,智能资源分配,助力企业成本优化,智能流量计费网站空间,资源优化,企业成本效益双提升
流量计费网站空间通过合理分配资源,有效降低企业成本,实现智能资源管理,助力企业优化成本结构。1、服务商信誉选择信誉良好的服务商,能确保网站空间稳定、安全,建议企业在选择服务商时,参考其他用户的评价、口碑等因素。2、技术支持网
相关文章
推荐文章
发表评论
0评