当前位置: 首页 > news >正文

Flutter 布局技巧详解

Flutter 布局技巧详解

一、布局概述

Flutter 布局是构建 UI 的基础。掌握布局技巧可以创建高效、美观的界面。

1.1 布局原则

  • 组合优于继承- 使用多个 Widget 组合
  • 约束传递- 父 Widget 向子 Widget 传递约束
  • 性能优化- 避免不必要的嵌套

二、常用布局 Widget

2.1 Container

Container( width: 200, height: 100, padding: const EdgeInsets.all(16), margin: const EdgeInsets.symmetric(vertical: 8), decoration: BoxDecoration( color: Colors.blue, borderRadius: BorderRadius.circular(8), boxShadow: const [BoxShadow(offset: Offset(0, 2), blurRadius: 4)], ), child: const Text('Container'), )

2.2 Row 和 Column

Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, crossAxisAlignment: CrossAxisAlignment.center, children: const [ Text('Left'), Text('Center'), Text('Right'), ], ) Column( mainAxisAlignment: MainAxisAlignment.center, children: const [ Text('Top'), SizedBox(height: 16), Text('Bottom'), ], )

2.3 Expanded 和 Flexible

Row( children: [ Expanded( flex: 2, child: Container(color: Colors.blue), ), Expanded( flex: 1, child: Container(color: Colors.red), ), ], )

2.4 Stack

Stack( alignment: Alignment.center, children: [ Container(width: 200, height: 200, color: Colors.blue), const Positioned( top: 10, right: 10, child: Text('Overlay'), ), ], )

三、布局技巧

3.1 响应式布局

LayoutBuilder( builder: (context, constraints) { if (constraints.maxWidth > 600) { return const DesktopLayout(); } else { return const MobileLayout(); } }, )

3.2 SafeArea

SafeArea( child: Scaffold( body: const Center(child: Text('Content')), ), )

3.3 SingleChildScrollView

SingleChildScrollView( child: Column( children: [ // 内容 ], ), )

四、性能优化

4.1 使用 const Widget

const Text('Hello'); const SizedBox(height: 16);

4.2 避免过度嵌套

// 不好 Container( child: Column( children: [ Container( child: Text('Hello'), ), ], ), ) // 好 const Text('Hello')

五、实战案例

5.1 卡片布局

Card( elevation: 2, shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(12)), child: Padding( padding: const EdgeInsets.all(16), child: Row( children: [ const CircleAvatar(radius: 20), const SizedBox(width: 12), Expanded( child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: const [ Text('Title'), Text('Subtitle'), ], ), ), const Icon(Icons.arrow_forward), ], ), ), )

5.2 响应式网格

GridView.builder( gridDelegate: const SliverGridDelegateWithMaxCrossAxisExtent( maxCrossAxisExtent: 200, crossAxisSpacing: 16, mainAxisSpacing: 16, ), itemCount: 12, itemBuilder: (context, index) { return Container( color: Colors.blue[100], child: Center(child: Text('Item $index')), ); }, )

六、总结

布局技巧:

  1. 常用 Widget- Container、Row、Column、Stack
  2. 响应式- LayoutBuilder、MediaQuery
  3. 性能优化- const、避免嵌套
  4. 特殊布局- SafeArea、SingleChildScrollView

合理使用可以创建高效美观的界面。

http://www.rkmt.cn/news/1430561.html

相关文章:

  • 基于Raspberry Pi Pico W与Adafruit IO的物联网辅助开关系统设计与实现
  • Lindy自动化效能跃迁,深度解析Flink+Python+GitOps三栈协同架构设计
  • 基于QR码与云端表格的智能仓储管理系统设计与实现
  • 告别拖拽!用C#代码搞定DevExpress报表数据绑定(Winform实战)
  • AI分析:企业智能决策的五大核心场景与落地实践
  • 不止是填0xFF:深入解读Intel Hex文件填充的5个实战场景与Vector HexView高级用法
  • Windows右键菜单优化终极指南:用ContextMenuManager让右键菜单秒开如飞
  • 量子纠错与四腿猫态:原理、实现与应用
  • 电机堵转详解
  • 避坑指南:正点原子启明星ZYQN-XC7Z020开发板,在Win10+Vivado环境下的JTAG连接全流程(从拨码开关到驱动安装)
  • 2026年BI数据建模方案推荐:五家优选品牌深度解析 - 科技焦点
  • UVa 337 Interpreting Control Sequences
  • 红日靶场实战复盘:从Weblogic反序列化到域内横向移动的完整攻击链分析
  • 别再只盯着波形了!用示波器看眼图,手把手教你诊断高速信号质量(附Keysight实测)
  • 告别虚拟机!5分钟在Docker里跑起OpenVAS漏洞扫描器(附最新镜像拉取命令)
  • 在openEuler 20.03 LTS SP3上编译内核踩坑记:FT2000+平台启动卡在EFI stub的排查与解决
  • Linux系统管理员必看:安全审计后如何优雅地清理history与日志,避免误操作
  • AutoDL远程桌面连接保姆级避坑指南:从VNC Viewer配置到SSH隧道稳定维护
  • 世界模型进入实时交互纪元?:Sora 2在3D动态场景生成中实现17ms端到端延迟的关键5步优化
  • JGB37-520(12V 带编码器)电机 详细解析
  • 2026年树洞聊天平台隐私实测:游戏中的心事同样要安全保护 - 时时资讯
  • 软考 系统架构设计师历年真题集萃(269)
  • Windows 11的WLAN图标不见了?别急着重装系统,试试这个设备管理器里的隐藏选项
  • 别再只会点灯了!用STM32F407的PWM驱动舵机,做个会动的机械臂原型(附完整代码)
  • VAD不止于识别:聊聊语音端点检测在降噪、编码和IoT设备里的那些事儿
  • 基于Arduino与Dynamixel的智能遥控拖船:集成4DOF机械臂与FPV的机器人平台实践
  • 向量数据库响应延迟飙至8s?不是QPS过高——揭秘Milvus/Weaviate底层Segment分裂引发的隐性阻塞(仅头部12家AI平台知晓)
  • 终极MapleStory游戏资源编辑器:5步轻松打造专属游戏世界
  • JMeter汇总报告保姆级解读:从‘样本’到‘吞吐量’,每个参数到底在说什么?
  • 185、运动控制中的行业应用:AGV与移动机器人