Flutter基础布局

Column:纵向布局

 Column相当于Android原生的LinearLayout线性布局。

主要代码:

class MyHomePage extends StatelessWidget {const MyHomePage({Key? key}) : super(key: key);@overrideWidget build(BuildContext context) {return Container(width: double.infinity,height: double.infinity,color: Colors.white,child: const Column(//start:主轴容器内起始位排列//end:主轴容器内结束位排列//center:主轴容器内居中排列//spaceBetween:主轴容器内均匀排列(顶部底部无间距,间距相等)//spaceAround:主轴容器内相同间隔分布(顶部底部间距相等,控件之间间距相等)//spaceEvenly:主轴容器内等距离分布(顶部底部同等间距,间距相等)mainAxisAlignment: MainAxisAlignment.center,//start:横轴容器内起始位排列//end:横轴容器内结束位排列//center:横轴容器内居中排列//stretch:横轴容器内拉伸排列crossAxisAlignment: CrossAxisAlignment.center,children: [IconContainer(Icons.home),IconContainer(Icons.search, color: Colors.yellow),IconContainer(Icons.ac_unit, color: Colors.orange)],),);}
}

mainAxisAlignment和crossAxisAlignment属性用于控制排列位置与控件之间距离。

完整代码:

import 'package:flutter/material.dart';void main() {runApp(const MyApp());
}class MyApp extends StatelessWidget {const MyApp({super.key});@overrideWidget build(BuildContext context) {return MaterialApp(theme: ThemeData(primarySwatch: Colors.blue),home: Scaffold(appBar: AppBar(title: const Text("Flutter"),),body: const MyHomePage(),),);}
}class MyHomePage extends StatelessWidget {const MyHomePage({Key? key}) : super(key: key);@overrideWidget build(BuildContext context) {return Container(width: double.infinity,height: double.infinity,color: Colors.white,child: const Column(//start:主轴容器内起始位排列//end:主轴容器内结束位排列//center:主轴容器内居中排列//spaceBetween:主轴容器内均匀排列(顶部底部无间距,间距相等)//spaceAround:主轴容器内相同间隔分布(顶部底部间距相等,控件之间间距相等)//spaceEvenly:主轴容器内等距离分布(顶部底部同等间距,间距相等)mainAxisAlignment: MainAxisAlignment.center,//start:横轴容器内起始位排列//end:横轴容器内结束位排列//center:横轴容器内居中排列//stretch:横轴容器内拉伸排列crossAxisAlignment: CrossAxisAlignment.center,children: [IconContainer(Icons.home),IconContainer(Icons.search, color: Colors.yellow),IconContainer(Icons.ac_unit, color: Colors.orange)],),);}
}class IconContainer extends StatelessWidget {final Color color;final IconData icon;const IconContainer(this.icon, {Key? key, this.color = Colors.red}): super(key: key);@overrideWidget build(BuildContext context) {return Container(alignment: Alignment.center,width: 100,height: 100,color: color,child: Icon(icon, color: Colors.white, size: 28),);}
}

Row:横向布局

 主要代码:

class MyHomePage extends StatelessWidget {const MyHomePage({Key? key}) : super(key: key);@overrideWidget build(BuildContext context) {return Container(width: double.infinity,height: double.infinity,color: Colors.white,child: const Row(mainAxisAlignment: MainAxisAlignment.center,crossAxisAlignment: CrossAxisAlignment.center,children: [IconContainer(Icons.home),IconContainer(Icons.search, color: Colors.yellow),IconContainer(Icons.ac_unit, color: Colors.orange)],),);}
}

Row和Column相对应,Row横向依次排列容器内的内容,Column纵向依次排列容器内的内容。属性介绍参考Column。

完整代码:

import 'package:flutter/material.dart';void main() {runApp(const MyApp());
}class MyApp extends StatelessWidget {const MyApp({super.key});@overrideWidget build(BuildContext context) {return MaterialApp(theme: ThemeData(primarySwatch: Colors.blue),home: Scaffold(appBar: AppBar(title: const Text("Flutter"),),body: const MyHomePage(),),);}
}class MyHomePage extends StatelessWidget {const MyHomePage({Key? key}) : super(key: key);@overrideWidget build(BuildContext context) {return Container(width: double.infinity,height: double.infinity,color: Colors.white,child: const Row(mainAxisAlignment: MainAxisAlignment.center,crossAxisAlignment: CrossAxisAlignment.center,children: [IconContainer(Icons.home),IconContainer(Icons.search, color: Colors.yellow),IconContainer(Icons.ac_unit, color: Colors.orange)],),);}
}class IconContainer extends StatelessWidget {final Color color;final IconData icon;const IconContainer(this.icon, {Key? key, this.color = Colors.red}): super(key: key);@overrideWidget build(BuildContext context) {return Container(alignment: Alignment.center,width: 100,height: 100,color: color,child: Icon(icon, color: Colors.white, size: 28),);}
}

Expanded

Expanded相当于Android原生的权重。

主要代码:

class MyHomePage extends StatelessWidget {const MyHomePage({Key? key}) : super(key: key);@overrideWidget build(BuildContext context) {return const Column(children: [Expanded(flex: 1,child: IconContainer(Icons.home),),Expanded(flex: 3,child: IconContainer(Icons.ac_unit,color: Colors.orange,),),Expanded(flex: 3,child: IconContainer(Icons.android,color: Colors.green,),),],);}
}

flex属性相当于Android原生的layout_weight权重属性。

完整代码:

import 'package:flutter/material.dart';void main() {runApp(const MyApp());
}class MyApp extends StatelessWidget {const MyApp({super.key});@overrideWidget build(BuildContext context) {return MaterialApp(theme: ThemeData(primarySwatch: Colors.blue),home: Scaffold(appBar: AppBar(title: const Text("Flutter"),),body: const MyHomePage(),),);}
}class MyHomePage extends StatelessWidget {const MyHomePage({Key? key}) : super(key: key);@overrideWidget build(BuildContext context) {return const Column(children: [Expanded(flex: 1,child: IconContainer(Icons.home),),Expanded(flex: 3,child: IconContainer(Icons.ac_unit,color: Colors.orange,),),Expanded(flex: 3,child: IconContainer(Icons.android,color: Colors.green,),),],);}
}class IconContainer extends StatelessWidget {final Color color;final IconData icon;const IconContainer(this.icon, {Key? key, this.color = Colors.red}): super(key: key);@overrideWidget build(BuildContext context) {return Container(alignment: Alignment.center,width: 100,height: 100,color: color,child: Icon(icon,color: Colors.white,size: 28,),);}
}

SizedBox

 SizedBox容器和Container容器类似,都可以用来装载控件,只是自带属性不一样,可以根据布局视情况而定。

完整代码:

import 'package:flutter/material.dart';void main() {runApp(const MyApp());
}class MyApp extends StatelessWidget {const MyApp({super.key});@overrideWidget build(BuildContext context) {return MaterialApp(theme: ThemeData(primarySwatch: Colors.blue),home: Scaffold(appBar: AppBar(title: const Text("Flutter"),),body: const MyHomePage(),),);}
}class MyHomePage extends StatelessWidget {const MyHomePage({Key? key}) : super(key: key);@overrideWidget build(BuildContext context) {return ListView(children: [SizedBox(width: double.infinity,height: 200,//设置网络图片child: Image.network("https://www.itying.com/images/flutter/1.png",//fill:拉伸填充,父容器无留白,图片变形//contain:容纳,父容器有留白//cover:剪裁填充,父容器无留白//fitWidth:横向剪裁填充,可能有留白//fitHeight:纵向剪裁填充,可能有留白//none:全无,剪裁,可能有留白//不设置此属性:不剪裁,有留白//scaleDown:按比例缩放,有留白fit: BoxFit.cover,),),const SizedBox(height: 2),Row(children: [Expanded(flex: 3,child: SizedBox(height: 180,child: Image.network("https://www.itying.com/images/flutter/2.png",fit: BoxFit.cover,),),),Container(width: 2,),Expanded(flex: 1,child: SizedBox(height: 180,child: Column(children: [Expanded(flex: 1,child: Image.network("https://www.itying.com/images/flutter/3.png",fit: BoxFit.cover,),),Container(height: 2,),Expanded(flex: 1,child: Image.network("https://www.itying.com/images/flutter/4.png",fit: BoxFit.cover,),),],),),)],)],);}
}

Image.network中的fit属性相当于ImageView中的scaleType属性,具体用法请看上面代码注释或者看源码注释。

Stack

完整代码:

import 'package:flutter/material.dart';void main() {runApp(const MyApp());
}class MyApp extends StatelessWidget {const MyApp({super.key});@overrideWidget build(BuildContext context) {return MaterialApp(theme: ThemeData(primarySwatch: Colors.blue),home: Scaffold(appBar: AppBar(title: const Text("Flutter"),),body: const MyHomePage(),),);}
}class MyHomePage extends StatelessWidget {const MyHomePage({Key? key}) : super(key: key);@overrideWidget build(BuildContext context) {//Stack:堆叠,相当Android原生的帧布局return Stack(alignment: Alignment.center,children: [Container(width: double.infinity,height: 300,color: Colors.green,),Container(width: 200,height: 200,color: Colors.red,),const Text("你好Flutter")],);}
}

Stack:堆叠,相当Android原生的FrameLayout帧布局。

Positioned

 Positioned:定位布局相当于Android原生中的RelativeLayout相对布局。

 完整代码:

import 'package:flutter/material.dart';void main() {runApp(const MyApp());
}class MyApp extends StatelessWidget {const MyApp({super.key});@overrideWidget build(BuildContext context) {return MaterialApp(theme: ThemeData(primarySwatch: Colors.blue),home: Scaffold(appBar: AppBar(title: const Text("Flutter"),),body: const MyHomePage(),),);}
}class MyHomePage extends StatelessWidget {const MyHomePage({Key? key}) : super(key: key);@overrideWidget build(BuildContext context) {return Container(width: double.infinity,height: 300,color: Colors.red,//Stack:堆叠child: Stack(children: [//Positioned:定位Positioned(left: 0,bottom: 0,child: Container(width: 100, height: 100, color: Colors.green),),const Positioned(left: 0, bottom: 0, child: Text("你好Flutter"))],),);}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/8428.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

深脑接口 | 清华大学李路明团队NSR综述

更多脑机接口前沿技术,关注公众号:脑机接口社区 如何让机器与人类的大脑深处实现交互?清华大学李路明教授研究团队在《国家科学评论》(National Science Review, NSR)发表综述文章,介绍深脑接口&#xff0…

MMaction2 使用记录1——训练及测试

目录 训练及测试 Training 在你的 PC上训练 Training 多 GPUs Test 训练及测试 Training 在你的 PC上训练 你可以使用tools/train.py在一台有CPU和可选GPU的机器上训练一个模型。 下面是该脚本的完整用法: python tools/train.py ${CONFIG_FILE} [ARGS] 默…

蓝桥杯专题-试题版含答案-【猴子吃桃问题】【小光棍数】【九九乘法表】【谁是最好的Coder】

点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例点击跳转>软考全系列点击跳转>蓝桥系列 👉关于作者 专注于Android/Unity和各种游…

快速入门uniapp——从环境搭建到项目实践

🙂博主:小猫娃来啦 🙂文章核心:快速入门uniapp——从环境搭建到项目实践 文章目录 初步介绍UniApp开发环境搭建下载和安装UniApp开发工具创建新项目(HBuilderX)开发工具界面介绍 UniApp基础知识页面结构页面…

linux入门进程概念中(僵尸进程,孤儿进程,进程优先级,并行和并发,环境变量)

目录 一、进程状态 1.看看Linux Kernel怎么说 1.1阻塞 2.进程状态查看 3.僵尸进程 3.1模拟僵尸进程的实验 3.2僵尸进程的危害 4.孤儿进程 4.1模拟孤儿进程实验 二、进程优先级 三、环境变量 3.1常见环境变量 3.2查看环境变量的方法: 3.3 加入环境变量 …

JAVA开发与运维(怎么通过docker部署微服务jar包)

目标: 通过docker的方式部署微服务。 一、背景: 我们通过java开发的微服务可以打成jar包,我们可以直接通过裸机部署,也可以通过docker来部署,本文介绍通过docker来部署微服务。 二、首先我们介绍一下docker的发展过程…

LLM应用的技术栈与设计模式详解

大型语言模型是构建软件的强大新原语。 但由于它们是如此新,并且其行为与普通计算资源如此不同,因此如何使用它们并不总是显而易见的。 在这篇文章中,我们将分享新兴 LLM 应用程序的参考架构。 它展示了我们所见过的人工智能初创公司和先进科…

七牛云面试复盘-实习后端Java开发 一面复盘 【已通过】

💪💪💪欢迎订阅本专栏,持续更新,本专栏内容为我参加的各个公司面试的复盘专栏。将完整记录面试细节问题。 七牛云面试 实习后端Java开发 一面 [视频面试] 首先自我介绍 我是XXX,来自XXX,XXXX。 面试官提问: 1.先问几个基础题,循序渐进的来哈,谈谈Java⾃动装箱…

【云原生】软件架构的演进以及各个架构的优缺点

文章目录 1. 什么是软件架构?2. 单机架构3. 应用数据分离架构4. 应用服务集群架构5. 读写分离架构6. 冷热分离架构7.垂直分库架构8. 微服务架构9. 容器编排架构10. 小结 1. 什么是软件架构? 软件架构是指在设计和构建软件系统时,对系统的组织结构、组件、模块、接…

【大数据之Hive】十九、Hive之文件格式和压缩

1 Hadoop压缩概述 Hive中的压缩算法与Hadoop中的压缩算法保持一致,可以把Hive当作Hadoop的一个客户端。 【大数据之Hadoop】十八、MapReduce之压缩 2 Hive文件格式 Hive表中常用的数据存储格式:text file(行式存储)、orc&#x…

Java中操作文件(一)

目录 一、引入 二、File概述 2.1、属性 2.2、构造方法 2.3、方法 2.4、代码示例 示例1 示例2 示例3 示例4 示例5 示例6 示例7 示例8 一、引入 文件是操作系统中的重要概念,Java作为一个跨平台语言,可以针对不同的操作系统处理文件。…

linux下查看cpu使用率和内存占用

top top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器,下面详细介绍它的使用方法; top是一个动态显示过程,即可通过用户按键来不断刷新当前状态。如果在前台…