flutter 常用组件详细介绍、屏幕适配方案
一、常用组件
1.基础组件
组件 | 说明 | 示例 |
---|---|---|
Text | 显示文本 | Text(‘Hello Flutter’, style: TextStyle(fontSize: 20)) |
Image | 显示图片 | Image.network(‘https://example.com/image.jpg’) |
Icon | 显示图标 | Icon(Icons.home, size: 30, color: Colors.blue) |
RaisedButton / ElevatedButton | 按钮 | ElevatedButton(onPressed: () {}, child: Text(‘Click’)) |
TextField | 输入框 | TextField(decoration: InputDecoration(labelText: ‘Name’)) |
1. Text:文本显示组件
- 功能:用于显示一段文本。
- 常用属性:
- style:设置文本样式,如字体大小、颜色等。
- textAlign:设置文本对齐方式。
- maxLines:设置最大显示行数。
- overflow:设置文本溢出处理方式,如省略号。
- 示例
Text('Flutter 组件配置详解',style: TextStyle(fontSize: 20, color: Colors.black, fontWeight: FontWeight.bold),textAlign: TextAlign.center,maxLines: 1,overflow: TextOverflow.ellipsis,
)
属性 | 类型 | 说明 |
---|---|---|
data | String | 显示的文本内容 |
style | TextStyle | 字体大小、颜色、行高等 |
textAlign | TextAlign | 文本对齐(left、right、center、justify) |
maxLines | int | 最大显示行数 |
overflow | TextOverflow | 溢出处理:ellipsis(省略号)等 |
2. Image:图片显示组件
- 功能:用于显示图片,支持网络图片、本地图片等。
- 常用属性:
- image:图片资源,如 AssetImage、NetworkImage。
- width、height:设置图片宽高。
- fit:设置图片的适应方式,如填充、覆盖等。
- 示例
Image.network('https://example.com/image.jpg',width: 200,height: 100,fit: BoxFit.cover,alignment: Alignment.center,
)
属性 | 类型 | 说明 |
---|---|---|
image | ImageProvider | 图片数据,如 AssetImage , NetworkImage |
width / height | double | 宽/高 |
fit | BoxFit | 缩放方式:fill、cover、contain、fitWidth、fitHeight |
repeat | ImageRepeat | 是否重复显示图片 |
alignment | Alignment | 对齐方式 |
3. Icon:图标组件
- 功能:用于显示图标。
- 常用属性:
- icon:图标数据,如 Icons.home。
- size:图标大小。
- color:图标颜色。
- 示例
Icon(Icons.home,size: 30,color: Colors.green, )
4. ElevatedButton:按钮组件
- 功能:用于创建一个凸起的按钮。
- 常用属性:
- onPressed:按钮点击事件处理
- child:按钮的子组件,通常是文本。
- style:按钮样式,如背景色、形状等。
- 示例:
ElevatedButton(onPressed: () => print('Clicked'),child: Text('提交'),style: ElevatedButton.styleFrom(primary: Colors.blue,onPrimary: Colors.white,padding: EdgeInsets.symmetric(horizontal: 20, vertical: 12),shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(8)),),)
属性 | 类型 | 说明 |
---|---|---|
onPressed | Function() | 按钮点击事件 |
child | Widget | 按钮内容 |
style | ButtonStyle | 自定义样式:背景色、形状、边距 |
5.TextField:文本输入框组件
- 功能:用于接收用户输入的文本。
- 常用属性:
- controller:控制器,用于获取输入内容。
- decoration:输入框的装饰,如提示文本、边框等。
- obscureText:是否隐藏输入内容,常用于密码输入。
- 示例:
TextField(controller: _usernameController,obscureText: false,keyboardType: TextInputType.text,maxLength: 20,decoration: InputDecoration(labelText: '用户名',hintText: '请输入用户名',prefixIcon: Icon(Icons.person),border: OutlineInputBorder(),),onChanged: (value) {print('输入内容:$value');},
)
属性 | 类型 | 说明 |
---|---|---|
controller | TextEditingController | 控制器(获取/设置输入值) |
decoration | InputDecoration | 输入框装饰 |
obscureText | bool | 是否隐藏内容(密码输入) |
keyboardType | TextInputType | 键盘类型:text、number、email 等 |
maxLength | int | 最大输入长度 |
onChanged | (value) => void | 内容改变时的回调 |
2.布局组件
组件 | 说明 | 示例 |
---|---|---|
Row / Column | 横/纵向布局 | Row(children: [Text(‘A’), Text(‘B’)]) |
Container | 容器,可设大小、颜色、边距等 | Container(width: 100, height: 100, color: Colors.red) |
Padding | 添加内边距 | Padding(padding: EdgeInsets.all(8), child: Text(‘Padded’)) |
Expanded | 撑满剩余空间 | Expanded(child: Container(color: Colors.green)) |
Stack | 叠层布局 | Stack(children: […]) |
- 其他组件
组件 | 说明 | 示例代码 |
---|---|---|
Container | 常用容器组件,支持 padding、margin、decoration | Container(width: 100, margin: EdgeInsets.all(10)) |
Padding | 仅设置内边距 | Padding(padding: EdgeInsets.all(10), child: ...) |
Align / Center | 对齐子组件 | Center(child: Text("中间")) |
Row / Column | 横向或纵向排列子组件 | Row(children: [Text("A"), Text("B")]) |
Expanded | 填满剩余空间 | Expanded(child: Container(color: Colors.red)) |
SizedBox | 固定宽高或空隙 | SizedBox(height: 20) |
Stack | 组件层叠 | Stack(children: [Container(), Positioned(...)]) |
Wrap | 自动换行布局 | Wrap(children: [...]) |
Spacer | 占位间隔 | Spacer(flex: 1) |
1. Row 和 Column:线性布局组件
- 功能:分别用于水平和垂直排列子组件。
- 常用属性:
- mainAxisAlignment:主轴对齐方式。
- crossAxisAlignment:交叉轴对齐方式。
- children:子组件列表。
- 示例:
Row(mainAxisAlignment: MainAxisAlignment.spaceEvenly,crossAxisAlignment: CrossAxisAlignment.center,children: [Icon(Icons.star),Icon(Icons.star),Icon(Icons.star),],
)
属性 | 类型 | 说明 |
---|---|---|
children | List<Widget> | 子组件列表 |
mainAxisAlignment | MainAxisAlignment | 主轴对齐 |
crossAxisAlignment | CrossAxisAlignment | 交叉轴对齐 |
mainAxisSize | MainAxisSize | 主轴占用空间(max/min) |
2. Container:容器组件
- 功能:用于创建一个矩形可视区域,可设置大小、边距、边框、背景色等
- 常用属性:
- width、height:设置宽高。
- padding、margin:内边距和外边距。
- decoration:装饰,如背景色、边框等
- 示例
Container(width: 200,height: 100,padding: EdgeInsets.all(10),margin: EdgeInsets.only(top: 20),alignment: Alignment.center,decoration: BoxDecoration(color: Colors.amber,borderRadius: BorderRadius.circular(10),boxShadow: [BoxShadow(color: Colors.grey, blurRadius: 4)],),child: Text('我是容器'),
)
属性 | 类型 | 说明 |
---|---|---|
width / height | double | 宽高 |
padding / margin | EdgeInsets | 内/外边距 |
decoration | BoxDecoration | 背景、边框、阴影、圆角等 |
alignment | Alignment | 子组件对齐方式 |
child | Widget | 子组件 |
3. Stack 和 Positioned:堆叠布局组件
- 功能:用于堆叠多个子组件,可以通过 Positioned 精确定位。
- 常用属性:
- alignment:设置子组件的对齐方式。
- children:子组件列表
- 示例:
Stack(children: [Container(width: 200, height: 200, color: Colors.green),Positioned(top: 20,left: 20,child: Container(width: 100, height: 100, color: Colors.red),),],
)
属性 | 类型 | 说明 |
---|---|---|
alignment | Alignment | 默认子组件对齐方式 |
children | List<Widget> | 子组件列表 |
fit | StackFit | 子组件如何填充 Stack |
3.功能类组件
组件 | 说明 | 示例代码 |
---|---|---|
AppBar | 页面顶部导航栏 | AppBar(title: Text("标题")) |
BottomNavigationBar | 底部导航栏 | BottomNavigationBar(items: [...]) |
Drawer | 抽屉菜单 | Drawer(child: ListView(...)) |
TabBar / TabBarView | 顶部选项卡 | 配合 TabController 使用 |
Navigator | 页面跳转 | Navigator.push(context, MaterialPageRoute(builder: (_) => Page())) |
AlertDialog | 弹窗对话框 | showDialog(context: ..., builder: (_) => AlertDialog(...)) |
GestureDetector | 手势识别 | GestureDetector(onTap: () { ... }) |
1. ListView:可滚动的列表组件
- 功能:用于显示一个可滚动的列
- 常用属性:
- children:子组件列表。
- itemBuilder:用于懒加载子组件。
- separatorBuilder:用于添加分隔线。
- 示例:
ListView.builder(itemCount: 10,itemBuilder: (context, index) {return ListTile(leading: Icon(Icons.person),title: Text('Person $index'),subtitle: Text('Subtitle $index'),);},
)
属性 | 类型 | 说明 |
---|---|---|
children | List<Widget> | 静态子组件列表 |
itemBuilder | IndexedWidgetBuilder | 构建子项 |
itemCount | int | 子项数量 |
scrollDirection | Axis | 滚动方向(horizontal, vertical) |
2. GridView:网格布局组件
- 功能:用于创建一个网格布局的可滚动列表
- 常用属性:
- gridDelegate:控制网格的布局方式。
- children:子组件列表。
- 示例:
GridView.count(crossAxisCount: 2,children: List.generate(4, (index) {return Center(child: Text('Item $index',style: Theme.of(context).textTheme.headline5,),);}),
)
属性 | 类型 | 说明 |
---|---|---|
crossAxisCount | int | 横轴显示个数 |
mainAxisSpacing | double | 主轴间距 |
crossAxisSpacing | double | 横轴间距 |
childAspectRatio | double | 宽高比 |
3. Card:卡片组件
- 功能:用于创建具有圆角和阴影的卡片效果。
- 常用属性:
- elevation:设置阴影的大小。
- shape:设置卡片的形状。
- child:卡片的子组件。
- 示例:
Card(elevation: 5,shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(10),),child: Padding(padding: EdgeInsets.all(16),child: Text('This is a card'),),
)
4. 状态管理类
- setState():最简单的本地状态更新方式
- 插件方式:Provider、Riverpod、GetX、Bloc。
表单组件
组件 | 说明 | 示例代码 |
---|---|---|
TextField | 输入框 | TextField(decoration: InputDecoration(labelText: '姓名')) |
TextFormField | 带验证的输入框 | TextFormField(validator: (val) => val!.isEmpty ? '必填' : null) |
Form | 表单容器 | Form(key: _formKey, child: Column(...)) |
Checkbox / CheckboxListTile | 复选框 | Checkbox(value: true, onChanged: ...) |
Radio / RadioListTile | 单选框 | Radio(value: 1, groupValue: _val, onChanged: ...) |
Switch | 开关 | Switch(value: true, onChanged: ...) |
DropdownButton | 下拉菜单 | DropdownButton(items: [...], onChanged: ...) |
Slider | 滑块 | Slider(value: 50, min: 0, max: 100, onChanged: ...) |
5 屏幕适配方案
方案 | 描述 | 插件推荐 |
---|---|---|
基于设计稿等比缩放 | 将 UI 尺寸按比例缩放适配 | flutter_screenutil |
MediaQuery 自适应 | 读取设备尺寸并调整布局 | 内置 MediaQuery.of(context) |
LayoutBuilder 自适应 | 按父容器的尺寸动态布局 | 内置 LayoutBuilder(...) |
响应式组件封装 | 根据屏幕宽度切换 UI | responsive_framework 、flutter_responsive |
插件推荐:flutter_screenutil
dependencies:flutter_screenutil: ^5.5.3+2
使用实例
import 'package:flutter_screenutil/flutter_screenutil.dart';void main() {runApp(ScreenUtilInit(designSize: Size(375, 812), // 设计稿尺寸(例如 iPhone X)builder: (context, child) => MyApp(),),);
}class MyHomePage extends StatelessWidget {@overrideWidget build(BuildContext context) {return Scaffold(body: Center(child: Container(width: 100.w, // 屏幕适配宽度height: 100.h, // 屏幕适配高度child: Text('Hello', style: TextStyle(fontSize: 16.sp)), // 字体大小适配),),);}
}
其他适配逻辑
插件 | 功能 | 适合场景 |
---|---|---|
flutter_screenutil | 基于设计稿自动缩放 | 推荐用于大部分项目 |
responsive_builder | 响应式断点布局 | 多平台(Web、Mobile)适配 |
flutter_responsive_framework | 精准控制不同设备 UI | 企业级适配 |
mediaquery_sizer | 类似 screenutil,但更轻量 | 轻量项目可用 |
相关文章:
flutter 常用组件详细介绍、屏幕适配方案
一、常用组件 1.基础组件 组件说明示例Text显示文本Text(‘Hello Flutter’, style: TextStyle(fontSize: 20))Image显示图片Image.network(‘https://example.com/image.jpg’)Icon显示图标Icon(Icons.home, size: 30, color: Colors.blue)RaisedButton / ElevatedButton按钮…...
Elasticsearch生产环境性能调优指南
#作者:朱雷 文章目录 一、背景二、优化项2.1. 磁盘优化2.2.配置文件优化2.3. jvm 配置2.4. 关闭或禁用 swap2.5. 最大文件描述符2.6. 段合并流量设置2.7. thread_pool相关 三、总结 一、背景 Elasticsearch是基于Lucene的开源分布式搜索与分析引擎,支持…...
野火鲁班猫(arrch64架构debian)从零实现用MobileFaceNet算法进行实时人脸识别(一)conda环境搭建
先安装miniconda wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-aarch64.sh chmod x Miniconda3-latest-Linux-aarch64.sh bash Miniconda3-latest-Linux-aarch64.sh source ~/.bashrc conda --version按照MobileFaceNet的github官方指南,需要…...

RT Thread FinSH(msh)调度逻辑
文章目录 概要FinSH功能FinSH调度逻辑细节小结 概要 RT-Thread(Real-Time Thread)作为一款开源的嵌入式实时操作系统,在嵌入式设备领域得到了广泛应用。 该系统不仅具备强大的任务调度功能,还集成了 FinSH命令行系统,…...
Kotlin 极简小抄 P9 - 数组(数组的创建、数组元素的访问与修改、数组遍历、数组操作、多维数组、数组与可变参数)
Kotlin 概述 Kotlin 由 JetBrains 开发,是一种在 JVM(Java 虚拟机)上运行的静态类型编程语言 Kotlin 旨在提高开发者的编码效率和安全性,同时保持与 Java 的高度互操作性 Kotlin 是 Android 应用开发的首选语言,也可…...
CSS display有几种属性值
在 CSS 中,display 属性是控制元素布局和渲染方式的核心属性之一。它有多种属性值,每个值都决定了元素在文档流中的表现形式。以下是 display 的主要属性值分类及说明: 1. 块级和行内布局 块级元素 (block) 特性:独占一行&…...
【后端】【UV】【Django】 `uv` 管理的项目中搭建一个 Django 项目
🚀 一步步搭建 Django 项目(适用于 uv pyproject.toml 项目结构) 🧱 第 1 步:初始化一个 uv 项目(如果还没建好) uv init django-project # 创建项目,类似npm create vue⚙️ 第 …...

单片机设计_四轴飞行器(STM32)
四轴飞行器(STM32) 想要更多项目私wo!!! 一、系统简介 四轴飞行器是一种通过四个旋翼产生的升力实现飞行的无人机,其核心控制原理基于欧拉角动力学模型。四轴飞行器通过改变四个电机的转速来实现六自由度控制(前后、左右、上下…...
kafka配置SASL_PLAINTEXT简单认证
Kafka ZooKeeper 开启 SASL_PLAINTEXT 认证(PLAIN机制)最全实战教程 💡 本教程将手把手教你如何为 Kafka 配置基于 SASL_PLAINTEXT PLAIN 的用户名密码认证机制,包含 Kafka 与 ZooKeeper 的全部配置,适合入门。 &…...
PostgreSQL简单使用
一、PostgreSQL概念 特点 开源与自由 标准符合性 数据类型丰富 事务与并发 扩展性 安全性 优势 高性能 高可用性 灵活性 社区支持 成本效益 PostgreSQL结构 多层逻辑结构 第一层:实例(xxx.xxx.xxx.xxx…...

【Spring Boot】配置实战指南:Properties与YML的深度对比与最佳实践
目录 1.前言 2.正文 2.1配置文件的格式 2.2properties 2.2.1基础语法 2.2.2value读取配置文件 2.2.3缺点 2.3yml 2.3.1基础语法 2.3.2配置不同数据类型 2.3.3配置读取 2.3.4配置对象和集合 2.3.5优缺点 2.4综合练习:验证码案例 2.4.1分析需求 2.4.2…...

算法优选系列(9.BFS 解决拓扑排序)
目录 拓扑排序简介: 编辑 课程表(medium): 课程表II(medium): 火星词典(hard): 拓扑排序简介: 有向无环图(DAG图) 如上图每条边…...
(1)Java 17/18/19 新特性面试题
Java 17/18/19 新特性面试题 🚀 掌握前沿技术,成为顶尖 Java 工程师 1️⃣ Java 17/18/19 新特性价值点 👉 点击展开题目 Java 17/18/19新特性中,你认为最有价值的是哪些?请结合实际场景说明 密封类(Sealed Classes…...
LAN(局域网)和WAN(广域网)
你的问题非常清晰!我来用一个直观的比喻实际拓扑图帮你彻底理解LAN(局域网)和WAN(广域网)如何协同工作,以及路由器在其中的位置。你可以把整个网络想象成一座城市: 1. 比喻:城市交通…...

【Java高阶面经:微服务篇】7. 1秒响应保障:超时控制如何成为高并发系统的“救火队长”?
一、全链路超时建模:从用户需求到系统分解 1.1 端到端时间预算分配 黄金公式: 用户期望响应时间 = 网络传输时间 + 服务处理时间 + 下游调用时间 + 缓冲时间典型分配策略(以1秒目标为例): 环节时间预算优化目标客户端渲染100ms骨架屏(Skeleton)预渲染边缘节点(CDN)…...

力扣周赛置换环的应用,最少交换次数
置换环的基本概念 置换环是排列组合中的一个概念,用于描述数组元素的重排过程。当我们需要将一个数组转换为另一个数组时,可以把这个转换过程分解为若干个 “环”。每个环代表一组元素的循环交换路径。 举个简单例子 假设原数组 A [3, 2, 1, 4]&…...

大语言模型 12 - 从0开始训练GPT 0.25B参数量 MiniMind2 补充 训练开销 训练步骤 知识蒸馏 LoRA等
写在前面 GPT(Generative Pre-trained Transformer)是目前最广泛应用的大语言模型架构之一,其强大的自然语言理解与生成能力背后,是一个庞大而精细的训练流程。本文将从宏观到微观,系统讲解GPT的训练过程,…...
hgdbv9创建plpython3u插件后无法使用该插件创建函数
文章目录 环境症状问题原因解决方案 环境 系统平台:银河麒麟 (X86_64) 版本:9.0 症状 此问题在如下版本和安装环境出现: 安装包: hgdb-ee-9.0.1.000-build2401091440-28098d3-linux.x86_64.binOS版本&…...

SQLMesh 宏操作符详解:@IF 的条件逻辑与高级应用
SQLMesh 的 IF 宏提供了一种在 SQL 查询中嵌入条件逻辑的方法,允许根据运行时条件动态调整查询结构。本文深入探讨 IF 的语法、使用场景及实际案例,帮助开发者构建更灵活、可维护的 SQL 工作流。 1. IF 宏简介 IF 是 SQLMesh 提供的条件逻辑宏ÿ…...
nt!MiRemovePageByColor函数分析之脱链和刷新颜色表
第0部分:背景 PFN_NUMBER FASTCALL MiRemoveZeroPage ( IN ULONG Color ) { ASSERT (Color < MmSecondaryColors); Page FreePagesByColor[Color].Flink; if (Page ! MM_EMPTY_LIST) { // // Remove the first entry on the zeroe…...

【爬虫】12306自动化购票
上文: 【爬虫】12306查票-CSDN博客 下面是简单的自动化进行抢票,只写到预定票,没有写完登陆, 跳出登陆后与上述代码同理修改即可。 感觉xpath最简单,复制粘贴: 还有很多写法: 官网地址&#…...
不同消息队列保证高可用实现方案
消息队列的高可用性(High Availability, HA)是分布式系统中的核心需求,不同消息队列通过多种技术手段实现高可用。以下是主流消息队列的高可用实现方案及对比: 一、Apache Kafka 副本机制(Replication) 每个…...

【Django系统】Python+Django携程酒店评论情感分析系统
Python Django携程酒店评论情感分析系统 项目概述 这是一个基于 Django 框架开发的酒店评论情感分析系统。系统使用机器学习技术对酒店评论进行情感分析,帮助酒店管理者了解客户反馈,提升服务质量。 主要功能 评论数据导入:支持导入酒店…...

spring cloud alibaba-Geteway详解
spring cloud alibaba-Gateway详解 Gateway介绍 在 Spring Cloud Alibaba 生态系统中,Gateway 是一个非常重要的组件,用于构建微服务架构中的网关服务。它基于 Spring Cloud Gateway 进行扩展和优化,提供了更强大的功能和更好的性能。 Gat…...

c#中添加visionpro控件(联合编程)
vs添加vp控件 创建窗体应用 右键选择项 点击确定 加载CogAcqfifoTool工具拍照 设置参数保存.vpp 保存为QuickBuild或者job, ToolBlock 加载保存的acq工具 实例化相机工具类 //引入命名空间 using Cognex.VisionPro; //实例化一个相机工具类 CogAcqFifoTool cogAcqFifoTool n…...

性能测试-mysql监控
mysql常用监控指标 慢查询sql 慢查询:指执行速度低于设置的阀值的sql语句 作用:帮助定位查询速度较慢的sql语句,方便更好的优化数据库系统的性能 开启mysql慢查询日志 参数说明: slow_query_log:慢查询日志开启状态【on…...

游戏引擎学习第301天:使用精灵边界进行排序
回顾并为今天的内容做准备 昨天,我们解决了一些关于排序的问题,这对我们清理长期存在的Z轴排序问题很有帮助。这个问题我们一直想在开始常规游戏代码之前解决。虽然不确定是否完全解决了问题,但我们提出了一个看起来合理的排序标准。 有两点…...
CSS attr() 函数详解
attr() 是 CSS 中的一个函数,用于获取 HTML 元素的属性值并在样式中使用。虽然功能强大,但它的应用有一些限制和注意事项。 基本语法 element::pseudo-element {property: attr(attribute-name); } 可用场景 1. 在伪元素的 content 属性中使用&#…...

【AI生成PPT】使用ChatGPT+Overleaf自动生成学术论文PPT演示文稿
【AI生成PPT】使用ChatGPTOverleaf自动生成学术论文PPT演示文稿 文章摘要:使用ChatGPTBeamer自动生成学术论文PPT演示文稿Beamer是什么Overleaf编辑工具ChatGPT生成Beamer Latex代码论文获取prompt设计 生成结果 文章摘要: 本文介绍了一种高效利…...
流复备机断档处理
文章目录 环境症状问题原因解决方案 环境 系统平台:UOS(海光),UOS (飞腾),UOS(鲲鹏),UOS(龙芯),UOS (申威),银河麒麟svs(X86_64&…...