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

Flutter控件归纳总结

Flutter 的控件(Widget)是构建 UI 的基础,分为无状态(StatelessWidget)和有状态(StatefulWidget)两大类。以下是 Flutter 核心控件的系统归纳:


一、基础布局控件

  1. Container

    • 通用容器:支持装饰(颜色、边框、阴影)、内外边距、尺寸约束。
    • 示例:Container(color: Colors.blue, padding: EdgeInsets.all(16))
  2. Row / Column

    • 线性布局:水平(Row)或垂直(Column)排列子控件。
    • 关键属性:mainAxisAlignment(主轴对齐)、crossAxisAlignment(交叉轴对齐)。
    • 子控件常用:Expanded(按比例填充剩余空间)、Flexible(灵活伸缩)。
  3. Stack

    • 层叠布局:子控件重叠(如文字+图片)。
    • 配合 Positioned 定位:Positioned(top: 10, left: 20, child: ...)
  4. ListView

    • 滚动列表:
      • ListView(children: [...]) (静态列表)
      • ListView.builder() (动态懒加载,大数据集首选)
  5. GridView

    • 网格布局:
      • GridView.count(crossAxisCount: 2) (固定列数)
      • GridView.builder() (动态构建)

二、常用功能控件

  1. 文本显示

    • Text("Hello", style: TextStyle(fontSize: 20))
    • RichText:混合样式文本。
  2. 图片

    • Image.asset("assets/logo.png") (本地资源)
    • Image.network("https://...") (网络图片)
  3. 按钮

    • ElevatedButton:凸起按钮(主操作)
    • TextButton:文本按钮(次要操作)
    • IconButton:图标按钮(工具栏)
    • FloatingActionButton:悬浮动作按钮(FAB)
  4. 输入控件

    • TextField:文本输入框
    • Checkbox / Switch:勾选框/开关
    • Radio / Slider:单选按钮/滑块
  5. 对话框

    • AlertDialog:提示对话框
    • showModalBottomSheet:底部弹窗

三、导航与路由

  1. 页面导航

    Navigator.push(context, MaterialPageRoute(builder: (context) => NextPage()));
    Navigator.pop(context); // 返回
    
  2. 命名路由

    // 定义路由表
    MaterialApp(routes: {'/home': (context) => HomePage(),'/detail': (context) => DetailPage(),},
    );
    // 跳转
    Navigator.pushNamed(context, '/detail');
    

四、状态管理控件

  1. 有状态组件

    • StatefulWidget + setState():局部状态刷新。
    • 示例:计数器应用。
  2. 状态管理方案(进阶)

    • Provider:官方推荐,依赖注入。
    • Bloc / Riverpod:响应式状态管理。
    • ValueListenableBuilder:监听值变化局部刷新。

五、Material & Cupertino 风格控件

  1. Material Design (Android)

    • Scaffold:页面骨架(AppBar、Drawer、BottomNavigationBar)。
    • AppBar:顶部导航栏。
    • BottomNavigationBar:底部导航。
    • Card:卡片容器。
  2. Cupertino (iOS)

    • CupertinoApp / CupertinoPageScaffold
    • CupertinoButton / CupertinoTextField
    • CupertinoPicker:iOS风格选择器。

六、动画与高级控件

  1. 隐式动画

    • AnimatedContainer:自动过渡的容器。
    • AnimatedOpacity:透明度渐变。
  2. 显式动画

    • AnimationController:控制动画周期。
    • Tween:定义动画值范围。
    • AnimatedBuilder:自定义动画构建。
  3. 高级组件

    • FutureBuilder:异步数据加载(如API请求)。
    • StreamBuilder:实时数据流(如WebSocket)。
    • Hero:页面间共享元素动画。

七、自定义控件

  1. 组合现有控件

    class CustomButton extends StatelessWidget {Widget build(BuildContext context) {return Container(decoration: BoxDecoration(...),child: Text("Click"),);}
    }
    
  2. 自绘控件

    • 继承 CustomPainter,使用 Canvas 绘制图形(如自定义图表)。

八、性能优化控件

  1. const 构造函数

    • 减少重建:const Text("Static")
  2. 懒加载控件

    • ListView.builder():仅渲染可见区域。
    • FutureBuilder:按需加载数据。
  3. RepaintBoundary

    • 隔离重绘区域,提升性能。

完整示例:基础页面结构

class HomePage extends StatelessWidget {Widget build(BuildContext context) {return Scaffold(appBar: AppBar(title: Text("首页")),body: Center(child: Column(mainAxisAlignment: MainAxisAlignment.center,children: [Text("Hello Flutter!"),ElevatedButton(onPressed: () => Navigator.pushNamed(context, '/detail'),child: Text("跳转详情"),),],),),bottomNavigationBar: BottomNavigationBar(items: [BottomNavigationBarItem(icon: Icon(Icons.home), ...],),);}
}

下面我将为Flutter的核心控件补充完整代码示例,涵盖布局、交互、导航和状态管理等关键场景:
下面我将为Flutter的核心控件补充完整代码示例,涵盖布局、交互、导航和状态管理等关键场景:

1. 基础布局组合示例

class LayoutDemo extends StatelessWidget {Widget build(BuildContext context) {return Scaffold(body: Column(children: [// 顶部导航栏Container(height: 60,color: Colors.blue,child: Row(children: [IconButton(icon: Icon(Icons.menu), onPressed: () {}),Text('布局示例', style: TextStyle(color: Colors.white)),],),),// 内容区域Expanded(child: ListView(children: [// 网格布局GridView.count(shrinkWrap: true,physics: NeverScrollableScrollPhysics(),crossAxisCount: 3,children: List.generate(9, (index) {return Container(margin: EdgeInsets.all(8),color: Colors.amber[100 * (index % 9)],child: Center(child: Text('Item $index')),);}),),// 层叠布局Stack(alignment: Alignment.center,children: [Container(height: 200, color: Colors.green),Positioned(bottom: 20,child: Card(elevation: 8,child: Padding(padding: E
http://www.xdnf.cn/news/1193473.html

相关文章:

  • Jenkins运行pytest时指令失效的原因以及解决办法
  • useCallback/useMemo
  • 大模型蒸馏(distillation)---从DeepseekR1-1.5B到Qwen-2.5-1.5B蒸馏
  • ARM SMMUv3控制器注册过程分析(八)
  • 二分函数 lower_bound upper_bound
  • 21-ospf多区域
  • 【Bluedroid】btif_av_sink_execute_service之服务器禁用源码流程解析
  • Apache Doris Data Agent 解决方案:开启智能运维与数据治理新纪元
  • 2025年入局苹果Vision Pro开发:从零到发布的完整路线图
  • LeetCode 刷题【15. 三数之和】
  • 如何关闭Windows自动更新?【图文详解】win10/win11关闭自动更新
  • CentOS 7 安装 MySQL 8.4.6(二进制包)指南
  • Linux——线程同步
  • CT、IT、ICT 和 DICT区别
  • 【架构】Docker简单认知构建
  • 【科研绘图系列】R语言绘制误差连线散点图
  • 秋招Day19 - 分布式 - 分布式事务
  • 生产环境使用云服务器(centOS)部署和使用MongoDB
  • Java操作Excel文档
  • opencv学习(图像金字塔)
  • 背包问题及 LIS 优化
  • 告别配置混乱!Spring Boot 中 Properties 与 YAML 的深度解析与最佳实践
  • C#编程基础:运算符与结构详解
  • 【Android】相对布局应用-登录界面
  • 2025.7.26字节掀桌子了,把coze开源了!!!
  • window下MySQL安装(三)卸载mysql
  • Fast_Lio 修改激光雷达话题
  • VLAN的划分(基于华为eNSP)
  • MySQL 8.0 OCP 1Z0-908 题目解析(37)
  • 尝试几道算法题,提升python编程思维