flutter 常用组件详细介绍、屏幕适配方案

news2025/5/22 19:01:53

一、常用组件

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,
)


属性类型说明
dataString显示的文本内容
styleTextStyle字体大小、颜色、行高等
textAlignTextAlign文本对齐(left、right、center、justify)
maxLinesint最大显示行数
overflowTextOverflow溢出处理: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,
)


属性类型说明
imageImageProvider图片数据,如 AssetImage, NetworkImage
width / heightdouble宽/高
fitBoxFit缩放方式:fill、cover、contain、fitWidth、fitHeight
repeatImageRepeat是否重复显示图片
alignmentAlignment对齐方式
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)),
	  ),
	)


属性类型说明
onPressedFunction()按钮点击事件
childWidget按钮内容
styleButtonStyle自定义样式:背景色、形状、边距
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');
  },
)


属性类型说明
controllerTextEditingController控制器(获取/设置输入值)
decorationInputDecoration输入框装饰
obscureTextbool是否隐藏内容(密码输入)
keyboardTypeTextInputType键盘类型:text、number、email 等
maxLengthint最大输入长度
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、decorationContainer(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),
  ],
)


属性类型说明
childrenList<Widget>子组件列表
mainAxisAlignmentMainAxisAlignment主轴对齐
crossAxisAlignmentCrossAxisAlignment交叉轴对齐
mainAxisSizeMainAxisSize主轴占用空间(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 / heightdouble宽高
padding / marginEdgeInsets内/外边距
decorationBoxDecoration背景、边框、阴影、圆角等
alignmentAlignment子组件对齐方式
childWidget子组件
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),
    ),
  ],
)


属性类型说明
alignmentAlignment默认子组件对齐方式
childrenList<Widget>子组件列表
fitStackFit子组件如何填充 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'),
    );
  },
)

属性类型说明
childrenList<Widget>静态子组件列表
itemBuilderIndexedWidgetBuilder构建子项
itemCountint子项数量
scrollDirectionAxis滚动方向(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,
      ),
    );
  }),
)

属性类型说明
crossAxisCountint横轴显示个数
mainAxisSpacingdouble主轴间距
crossAxisSpacingdouble横轴间距
childAspectRatiodouble宽高比
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(...)
响应式组件封装根据屏幕宽度切换 UIresponsive_frameworkflutter_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 {
  @override
  Widget 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,但更轻量轻量项目可用

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

RT Thread FinSH(msh)调度逻辑

文章目录 概要FinSH功能FinSH调度逻辑细节小结 概要 RT-Thread&#xff08;Real-Time Thread&#xff09;作为一款开源的嵌入式实时操作系统&#xff0c;在嵌入式设备领域得到了广泛应用。 该系统不仅具备强大的任务调度功能&#xff0c;还集成了 FinSH命令行系统&#xff0c…

单片机设计_四轴飞行器(STM32)

四轴飞行器&#xff08;STM32&#xff09; 想要更多项目私wo!!! 一、系统简介 四轴飞行器是一种通过四个旋翼产生的升力实现飞行的无人机&#xff0c;其核心控制原理基于欧拉角动力学模型。四轴飞行器通过改变四个电机的转速来实现六自由度控制&#xff08;前后、左右、上下…

【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综合练习&#xff1a;验证码案例 2.4.1分析需求 2.4.2…

算法优选系列(9.BFS 解决拓扑排序)

目录 拓扑排序简介&#xff1a; ​编辑 课程表&#xff08;medium&#xff09;&#xff1a; 课程表II&#xff08;medium&#xff09;: 火星词典&#xff08;hard&#xff09;&#xff1a; 拓扑排序简介&#xff1a; 有向无环图&#xff08;DAG图&#xff09; 如上图每条边…

【Java高阶面经:微服务篇】7. 1秒响应保障:超时控制如何成为高并发系统的“救火队长”?

一、全链路超时建模:从用户需求到系统分解 1.1 端到端时间预算分配 黄金公式: 用户期望响应时间 = 网络传输时间 + 服务处理时间 + 下游调用时间 + 缓冲时间典型分配策略(以1秒目标为例): 环节时间预算优化目标客户端渲染100ms骨架屏(Skeleton)预渲染边缘节点(CDN)…

力扣周赛置换环的应用,最少交换次数

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

大语言模型 12 - 从0开始训练GPT 0.25B参数量 MiniMind2 补充 训练开销 训练步骤 知识蒸馏 LoRA等

写在前面 GPT&#xff08;Generative Pre-trained Transformer&#xff09;是目前最广泛应用的大语言模型架构之一&#xff0c;其强大的自然语言理解与生成能力背后&#xff0c;是一个庞大而精细的训练流程。本文将从宏观到微观&#xff0c;系统讲解GPT的训练过程&#xff0c;…

SQLMesh 宏操作符详解:@IF 的条件逻辑与高级应用

SQLMesh 的 IF 宏提供了一种在 SQL 查询中嵌入条件逻辑的方法&#xff0c;允许根据运行时条件动态调整查询结构。本文深入探讨 IF 的语法、使用场景及实际案例&#xff0c;帮助开发者构建更灵活、可维护的 SQL 工作流。 1. IF 宏简介 IF 是 SQLMesh 提供的条件逻辑宏&#xff…

【爬虫】12306自动化购票

上文&#xff1a; 【爬虫】12306查票-CSDN博客 下面是简单的自动化进行抢票&#xff0c;只写到预定票&#xff0c;没有写完登陆&#xff0c; 跳出登陆后与上述代码同理修改即可。 感觉xpath最简单&#xff0c;复制粘贴&#xff1a; 还有很多写法&#xff1a; 官网地址&#…

【Django系统】Python+Django携程酒店评论情感分析系统

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

spring cloud alibaba-Geteway详解

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

c#中添加visionpro控件(联合编程)

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

性能测试-mysql监控

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

游戏引擎学习第301天:使用精灵边界进行排序

回顾并为今天的内容做准备 昨天&#xff0c;我们解决了一些关于排序的问题&#xff0c;这对我们清理长期存在的Z轴排序问题很有帮助。这个问题我们一直想在开始常规游戏代码之前解决。虽然不确定是否完全解决了问题&#xff0c;但我们提出了一个看起来合理的排序标准。 有两点…

【AI生成PPT】使用ChatGPT+Overleaf自动生成学术论文PPT演示文稿

【AI生成PPT】使用ChatGPTOverleaf自动生成学术论文PPT演示文稿 文章摘要&#xff1a;使用ChatGPTBeamer自动生成学术论文PPT演示文稿​​Beamer​​是什么Overleaf编辑工具ChatGPT生成Beamer Latex代码论文获取prompt设计 生成结果 文章摘要&#xff1a; 本文介绍了一种高效利…

局部放大maya的视图HUD文字大小的方法

一、问题描述&#xff1a; 有网友问&#xff1a;有办法局部放大maya的字体吗比如hud中currenttime打开之后画面右下角有个frame 想放大一下能做到吗&#xff1f; 在 Maya 中&#xff0c;可以通过自定义 HUD&#xff08;Heads-Up Display&#xff09;元素的字体大小来局部放大特…

初识Linux · NAT 内网穿透 内网打洞 代理

目录 前言&#xff1a; 内网穿透和打洞 NAPT表 内网穿透 内网打洞 正向/反向代理 前言&#xff1a; 本文算是网络原理的最后一点补充&#xff0c;为什么说是补充呢&#xff0c;因为我们在前面第一次介绍NAT的时候详细介绍的是报文从子网到公网&#xff0c;却没有介绍报文…

STM32接收红外遥控器的遥控信号

经过几天早晨的学习&#xff0c;终于把遥控器的红外信号给搞通了&#xff0c;特此记录一下&#xff1b;其实说白了&#xff0c;红外遥控就是高低电平的信号&#xff0c;用时间来区分是二进制的0还是1&#xff1b;然后把这些0或1&#xff0c;在组装成一个32位的数基本就算是完事…

Redis从入门到实战 - 高级篇(下)

一、Redis键值设计 1. 优雅的key结构 Redis的Key虽然可以自定义&#xff0c;但最好遵循下面几个最佳实践约定&#xff1a; 遵循基本格式&#xff1a;[业务名称]:[数据名]:[id]长度不超过44字节不包含特殊字符 例如&#xff1a;我们的登录业务&#xff0c;保存用户信息&…

GUI实验

题目&#xff1a; 编程包含一个标签和一个按钮&#xff0c;单击按钮时&#xff0c;标签的内容在"你好"和"再见"之间切换。 分析&#xff1a; 导入所需的Java库&#xff1a;程序使用了 javax.swing 包中的一些类来创建图形用户界面。 创建一个 JFrame 对象…