初级根底系列

Flutter开发实战初级(1)ListView详解

Flutter开发实战初级(2)布局详解

项目实战系列

Flutter开发实战 高仿微信(1)主页

Flutter开发实战 高仿微信(2)发现页

Flutter开发实战初级(2)页面布局详解q ) z 8 C

本篇博& Q G L ` w | m客Demo下载点击这儿:Flutter布局Demo

1. Flutter布局实战解说

1.1 布局坐标

首先新建一e b ^ E D D个Flutter项目 我这儿命名为flutter_layov h K S , = & 0utdema v f L s K y w 7o,

接下来咱们创建一个用来操练布局的layout_demo.dart文件,直接按快捷键“CommanF p 4 X ;d + N”

然后找到main.dart里边的$ p w nMyAp@ w a yp类,替换掉体系默a 8 i Y S Q C –许d W 3 O o @ d + @的代码,如下图所示:

替换掉之后,咱们直接按快捷键“Control+R” 编译} , V & j Y #运转到模拟器上面,能够挑选安卓或者iOS模拟器,也能够挑选运转在真机上面,如下图挑选你想运转的模拟器:

这儿我挑选的是iphone 11 模拟器,运转成果如下:

接下来咱们在layout, q T 9Demo类的build办法里边加入一些小部件

class LayoutDemo extends StatelessWidget{

@override

Widget build(B~ e ` f L } guildContext context) {

return Container(

color: Colors.red,

child: CenI e 0 C ] c 6ter(

child: Text('kongyulu'),

),

);

}

}

“Control + R ” 编译运转

其g – O实咱们还能够经过; i J Z & *alignment 特点是布局居中显现,这个类似于IOS 的UILabel的对齐特点。这样咱们能够修正代码如下:

class LayoutDemo extends StatelessWidget{

@o[ 3 } & kverride

Widget build(BuildContext context) {

return Container(

color: Colors.red,

alignment: Alignment(0.0, 0.0),

child: Text: i U a U x ! 7('kongyulu2')

);

}

咱们热更新一下,能够看到作用如下:

下面* / $ (咱们简略介绍一下aligment特点:

实际上咱们上面代码用的相对布局. t b s k %,坐标原点在中心,咱们aligment特点 Alignment(x,y)传入x,y的坐标,这儿传入(J c _ t X ~ ` {0,0)标识在中心方位,如下图所示:

如上图所示,Alignment(-1,-1)标识在左上角,Alignment(1,1)在右下角,Alignment(-1,1)在左下角,Alignment(1,-1)在右上角,下面咱们能够简略验证一下

假如咱们把alignment特点改为Alignment(1,0),作用如下:

假如咱们把alignment特点改为Alignm? G ? ^ent(0,^ ; w C1),作( { v & , & S G用如下:

假如咱们把alignment特点改为Alignment(-1,-1),作用如下:

由此咱们能@ p P I _ 8 a够知道(-1,-1)在左上角, (1,1)在右上角,

1.2 横向布局Row

接下来咱们解说一下横向布局Row,咱们修正一下代码,添加一个Row布局,代码如下~ 3 d u ?:

class LayoutDemo extends StatelessWidget: ] W c ` B x{f b E / O

@override

Widget buiK 1 6 C e 5 Lld(w r ] S oBuildContext context) {

return Container2 v { ? y 9 l z r(

colorr g | T ) 8: Colors.red,

alignment: Alignment(0.0, 0.0),

child: Row(

children: [

Icon(Icons.add),

Icon(Icons.accl m V ! Iess_alw ) f f Q $ + |arm),

Icon(Icons.account_balance_wallet),

],

)

);

}

}

热更新一下,作用如下:

Row表明横向布局,里边需求传入一个Widget数组,数组里边的Widget小部件都横向摆放。咱们能够看到小部件默许有点小,咱们来修正一下巨细将size改为80

class LayoutDemo extends StatelessWidget{

@override

Widget build(BuildContext context) {

return Container(

color: Colors.red,

alignment: Alignment(0.0, 0.0),

child: Row(

children: [

Icon(Icons.add,size: 80,),

Icon(I4 V B 4cons.access_alarm,size: 80,),

Icon(Icons.account_balance_wallet,size: 80,),

],

)

);

}

}

从头运转一下作用M j l $ l如下:

假如咱们想跟里边的小部件添加布6 ( |景色彩,咱们只需求将这个小部件放到一个新的ContaineF 3 1 v 4 J y )r容器里边包_ : c装一下,即可运用CZ N `ontainer里边的相关特点,设置t _ g W Z B色彩等特点。

咱们再修正一下代, _ ~ ? ,码,给小部件添加布景色彩:

class LayoutDemo extends StatelessWidget{

@overV , B k N h C ~ aride

Widget build(BuildContext context) {

return Container(

color: Colors.red,

alignment: Alignment(0.0, 0.0),

child: Row(

childrb ~ ( B $ % %en: [

Container(child:Icon(Icons.add,size: 8~ C K0,) ,color: Colors.blue,)

,

Container(child:Icon(Icons.access_alaa K ) ( t 3rm,size: 80,) ,color: CZ v A G U H `olors.yellow,)

,7 % B K & l r

ConK ! ^ ; } atainer(child:Icon(Icons.account_balanc: +e_wallet,size: 80,) ,colo+ } Y 7r: Colors.green,)

,

],

)

);

}x d ; c @

}

从头运转一下作用如下:

1.3 纵向布局Column

纵向布局时笔直方向的布局,更横向布局相对应。咱们只需求将上面的横向布局代码m l ? 6 y的R, E – b Q low改为Column,如下:% { $

class LayoutDemo extends StatelessWidget{

@override

Widget build(BuildContext context) {

return Container(

color: Colors.red,

alignment: Alignment(0.0, 0.0),

cht L % U 6 7 wild: Col{ $ U 3 1 e s = mumn(

childreu z i S ! nn: [

Container(child:Icon(Icons.add,size: 8g Q p t 6 ! h O 10,) ,color: Colors.blue,)

,

Container(chilj U ]d:Icon(Icons.access_alarm,size: 80,) ,color: Colors.yellow,)

,

Container(child:Icon(Icons.^ w A z , 9 gaccount_balance_wallet,size: 80,) ,color: Colors.green,)

,

],

)

);

}

}

热更新一下,咱们来看一下作用:

1.4 层级布局Stacx h Z B ~ = r Ik

咱们再将上面的代码修正为Stack层级布局看看什么作用,修正代码如下:

class LayoutDemo extends StatelessWidget{

@oE | Q $verride

Widget build(BuildContext context) {

return Container(

color: Colors.red,

alignment: Alignment(0.0, 0.0),

child: Stack(

children: [

Container(child:Icon(Icons.add,siz8 / u E { } . o |e: 80,) ,color: Colors.blue,)

,

Container(child:Icon(Icons.access_alarm,siz5 / & s ^ a Ce: 80,) ,color: Colors.yellow,)

,

Container(child:I/ P s 2con(Icons.account_baE - s H F U Llance_wallet,size: 80,) ,color: Colors.green,)

,

],

)

);

}

}

咱们快捷键“Command+||” 热更新一下,运转作用如下:

本来是三个,咱们只看到了最终一个小部件,说明另外两_ ; { S 4 ! g q F个被遮挡了,咱们来修正一下每个小部件的巨细:

由此咱们能够知道 Row横向布局对应x轴,Column纵向布局对应y轴,Stack层次布局对应z轴,咱们由x,y,z能够很容易布局想要的作用。

1.5 主轴 mainAxisAlignment

咱们的Row,Column都有两} F . , + { G个非常重要的特点:主轴mainAxisAz ! * = o 3 5lignment 和 穿插轴

其中主轴需求传入一个目标,2 J 3 * o咱们查看源码能够看到:

主i Z ) c p ! ~ q轴特U t i c = %点传入一个MainAxisAlignment目~ } O | n j标,咱们能够看到它有下面结构特点:

MainAxisAlignment.center: 表明沿着主轴方向居中显现,假如RowL R D D c 9横向布@ 5 G ]局,则是沿着x轴从左到右横着居中摆放显现,假如是Column纵向布局,则是沿着y轴从上往下,纵向居中显现

MainAxisAlignment.end :

假如RowM n , j横向布局,则是沿着x轴从左到右横着居中,靠右对齐C B L )摆放显现

假如是Column纵向布局,则是沿着y轴从上往下,纵向居中, 而且靠底部对1 6 1 r /齐显现

MainAxisAlignment.spaceAround: 就是将主轴方向剩余的空间平均分配给每个子控件。

假如Row横向布局@ N t J,则水平方向剩余的空间平均分配在每个空间的周围

假如是ColuS M Dmn纵向布局,则笔直方向剩余的空间平均分配在每个空间的周围

MaiO & C % ;nAxisAlignme6 n qnt.spaceBetween: 剩余的空间平均分配到每个小部件之间的距离。

MainAxisAlignment.spaceEvently: 剩余空间和小部] c O * 7件一同平均分O ; h k `配,是等距离的分配。

MainAxisAlignment, 2 A.start : 表明主轴开始的方向, 也是默许值

假如是Row布局,MainAxisAlignmentV S ) d.start 主轴作用如下:

假如是Column布局,MainAxisAlignment.start 主轴作用如下:

1.6 穿插轴 CrossAxisAlignment

CrossAxisAlignment穿插轴拥有j X L 1的特点如下:

穿插轴默许的特点是center 居中显现

CrossAxisAlignment.baseline :

这个baseline特点不能独自运用,需k 6 w . S | W n求结合其他特点配合运用,不然会报错:

咱们修正一下代码,添加textBaseline: TextBaseline.alphabetic特点,配合运用,由于baseline特点需求针对文本才干体现作用,所以U m * b 1咱们还需求在每个小部件里边添加一个文本标签

主轴为x轴,沿穿插轴y轴方向底部对齐

咱们将标签的布景巨细设置共同更好比照:

纵向布局时,baseline特点使字体沿穿插轴左对齐

咱们再来看一下去掉baseline特点的作用:

Cross0 & * * $AxisAlignment.centeR / 4r :

CrossAxis6 S k p I $ 4Alignment.end :

CrossAxisAlignment.start :

CrossAxisAlignment.stretch :

1.7 Expanded主动填充

Expanded 是一种比较灵敏的布局方案,它使得子部件随之父控件的巨细主动填充

咱们接下来将上面的代码修正一下,将每个小部件放入Expanded布局中,修正后代码如下:

class LL ! L |ayoutDemo extends StatelessWidget{

@override

Widget build(BuildContext context) {

return Container(

color: Colors.white,

alignment: Alignment(0.0, 0.0),

child: Column(

mainAxisAlignment: MainAxisAlig: v {nment.spaceAround,

crossAxisAlignment: CrossAxisAlignment.bC d ) 5 ; P Q !aseline,

textBaseline: TextBaseline.j b N 7 / Ealphabetic,

childreI _ A ; - T k Sn: &li o u Ot;Wi5 C 3dget>[

Expanded(child: Container(child:Text('孔雨露',style: TextStyle(fontSize: 15),) ,color: Colors.blT 0 rue,height: 80,),)

,

Expanded(child:Container(child:Text('努力',style: TextStyle(fontSize: 30),) ,color: Colors.yellow,height: 80,),)

,

Expanded(child: Container(child:Text('坚持',style: TextStyle(fontSize: 60),) ,c% G &olor: Colors.green,height: 80,),)

,

],

)

);

}

}

运转j . W K % b作用如下:

咱们将上面的代码的布局Column改为Row横向布局,作用如下:

由此咱们[ L m 9 L /知道,假如咱们设置了Expanded主动填充,假设咱们运用Row横向布局咱们不需求设置宽度(就算设置了宽度也不会生效,没有意义),( G C ? ]沿主轴x轴每个子部% d J } * $件主动填充拉伸满,不会在主轴方向留下空地,X , d f _ 1同理,假如是纵向布局,则设置Expanded主动填充后,不需求设置高度(就算设置了高度也不会生效Z a d i L T y,没有意义g 0 5 Y –),沿主轴y会主动填充拉伸。

这个特点对应咱们文字8 I r C l J 1 p很长时,会依据宽度主动换行,如下图:

接下来,假如咱们看一下6 g [ &假如上面的三个小部件,不是每个都运用expanded布局呢,现在咱们改一下代码,把中心的那个小部件改为不是expanded布局。

1.8 Alignment特点

咱们将上面的代码简化一下,改为如下:

Widget build(BuildContext context) {

return Container(

color: Colors.white,

alignment: Alignment(0.0, 0.0),

child: Container(child:

Icon(Icons.add,size: 30,),height: 40,

color:ColL Q lors.blue,)

);

}

运转作用如下:

咱们一般用al 9 g o Alignment依据比例来显现方位,

flutter页面布局HTML,Flutter开发实战初级(2)页面布局详解相关推荐

  1. STM32开发实战:W25Q32JV SPI Flash详解

    STM32开发实战:W25Q32JV SPI Flash详解 在STM32单片机的应用中,使用SPI Flash能够有效地扩展程序和数据存储空间.W25Q32JV SPI Flash是一种常用的Fla ...

  2. php 微信开发实战pdf,微信开发实战之模块化的实例详解

    在任何一个大型应用中模块化是很常见的,与一些更传统的编程语言不同的是,JavaScript (ECMA-262版本)还不支持原生的模块化. Javascript社区做了很多努力,在现有的运行环境中,实 ...

  3. python语言入门详解-python初级教程:入门详解

    python初级教程:入门详解 Crifan Li 目录 前言 .................................................................... ...

  4. 代理后台中间件_Golang Gin 实战(十三)| 中间件详解看这一篇就够了

    6000字大章带你死磕Golang Gin中间件 在Gin的整个实现中,中间件可谓是Gin的精髓.一个个中间件组成一条中间件链,对HTTP Request请求进行拦截处理,实现了代码的解耦和分离,并且 ...

  5. python避坑_Django搭建项目实战与避坑细节详解

    Django 开发项目是很快的,有多快?看完本篇文章,你就知道了. 安装 Django 前提条件:已安装 Python. Django 使用 pip 命令直接就可以安装: pip install dj ...

  6. 初级游戏外挂编程详解 windows运行原理+游戏辅助编程 游戏外挂编程

    @TOC初级游戏外挂编程详解 windows运行原理+游戏辅助编程 游戏外挂编程 [1]什么是windows API Windows API 中文翻译过来就是windows应用程序接口(Applica ...

  7. ecshop二次开发手册,ECSHOP文件结构,ECSHOP目录详解

    Ecshop文件结构 :ecshop二次开发手册,ECSHOP文件结构,ECSHOP目录详解 /* ECShop 最新程序 的结构图及各文件相应功能介绍 ECShop文件结构目录 ┣ activity ...

  8. 开发中避免延时操作技巧详解

    这篇文章主要为大家介绍了开发中避免延时操作技巧详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪 前言 开发中我们或多或少会涉及到一些场景需要使用延时操作,而延时操作其实 ...

  9. Git实战:branch分支操作详解

    什么是分支 分支是指在主干道上分支的支线,可以前往不同的地方,也可以到达相同的终点(只是实现的路线不同).Git指向团队开发中的个体,各开发者可以有自己的分支,开发时不会影响其他分支的开发进度.分支完 ...

最新文章

  1. mongoose简单使用
  2. Hadoop API文档地址
  3. xshell使用xftp传输文件、使用pure-ftpd搭建ftp服务
  4. DataTable操作
  5. 各种说明方法的答题格式_初中语文阅读答题公式 语文阅读理解万能公式大全...
  6. 高性能 Socket 组件 HP-Socket v3.1.3 正式发布
  7. ThinkPHP—URL的访问以及各种方法的操作
  8. 装机主板抽象工厂模式(Abstract Factory)
  9. bootstrap-table分页插件使用
  10. java ioutils_关于Java:无法解析符号“ IOUtils”
  11. CentOS 官网下载各个版本CentOS系统
  12. CVPR 2021 | 基于模型的图像风格迁移
  13. 进阶实验5-3.2 新浪微博热门话题 (字符串操作)
  14. android极光推送 小米,极光推送- 小米厂商通道集成指南 - 极光文档
  15. 自媒体人必备16种工具大全,这些工具你值得拥有干货
  16. 一些学习经验总结(个人随笔)
  17. 从零开始学习UCOSII操作系统2--UCOSII的内核实现
  18. 逻辑Flask——Flask模板
  19. 浅析网络犯罪如何取证
  20. Android八门神器(一):OkHttp框架源码解析

热门文章

  1. 关于指针所占的字节数
  2. Python爬虫用(Python+Selenium)打开谷歌,IE,火狐浏览器,并访问网页
  3. Linux C-学习笔记(一)
  4. 假定系统四个进程,p1、p2、p3、p4三种资源r1、r2、r3数量分别为9、3、6在T0时刻资源分配为下表:
  5. Moblin开发手册:理解 Hildon应用程序
  6. MATLAB算法实战应用案例精讲-【数模应用】小批量梯度下降(MBGD)(附Python和MATLAB代码)
  7. NOIP模拟赛 17.10.10
  8. 【转载】手机快充的核心模块:ChargePump
  9. 部署: 搭建 Apache RocketMQ 单机环境与Rocketmq-console
  10. python大作业题目_Python大作业