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

Flutter for OpenHarmony核心组件学习: MaterialApp、Scaffold 两大基础组件以及有无状态组件

Flutter for OpenHarmony核心组件学习: MaterialApp、Scaffold 两大基础组件以及有无状态组件


作者:爱吃大芒果

个人主页 爱吃大芒果

本文所属专栏Flutter

更多专栏
Ascend C 算子开发教程(进阶)
鸿蒙集成
OpenAgents
openJiuwen
从0到1自学C++


前言

本次学习主要掌握 Flutter 中MaterialAppScaffold两大基础组件的用法,以及无状态组件(StatelessWidget)和有状态组件(StatefulWidget)的定义与区别。


核心知识点梳理

1. 根组件MaterialApp

  • 作用:作为 Flutter 应用的入口,是 Material Design 风格应用的全局配置中心。
  • 核心配置项
    • title:应用标题,会显示在任务管理器或应用切换列表中。
    • theme:全局主题配置,可统一设置scaffoldBackgroundColor等样式。
    • home:应用启动后显示的第一个页面,通常是Scaffold组件。
  • 踩坑记录
    最初错误地用Color(const Color.fromARGB(...))设置主题色,导致类型不匹配。
    正确做法是直接使用Color.fromARGB(255, 173, 186, 189)Colors.blue

2. 页面骨架Scaffold

  • 作用:封装了常见的页面结构元素,快速搭建符合 Material Design 规范的页面。
  • 常用属性
    • appBar:顶部导航栏,可设置标题、图标和操作按钮。
    • body:页面主体内容区域,承载主要业务组件。
    • bottomNavigationBar:底部导航栏,适合实现多页面切换。
  • 实践效果
    通过Scaffold快速搭建了包含顶部标题栏、居中内容和底部导航的完整页面,开发效率显著提升。

3. 无状态组件StatelessWidget

  • 特点:组件内容固定,初始化后数据不可变,仅依赖传入的final类型参数构建。
  • 适用场景:静态展示类组件,如标题、文本标签。
  • 核心方法:仅需实现build方法,返回要渲染的 Widget 树。
  • 示例代码
    classmainpageextendsStatelessWidget{@overrideWidgetbuild(BuildContextcontext){returnMaterialApp(home:Scaffold(appBar:AppBar(title:Text('爱吃大芒果')),body:Center(child:Text('爱吃大西瓜')),),);}}

4. 有状态组件StatefulWidget

  • 特点:包含可变状态(State),状态变化时会触发组件重新构建,实现动态交互。
  • 适用场景:需要动态更新的组件,如计数器、表单输入。
  • 核心结构
    分为StatefulWidget类和对应的State类,前者负责创建State,后者管理状态和构建 UI。
  • 示例代码
    classmainpageextendsStatefulWidget{@overrideState<mainpage>createState()=>_mainpagestate();}class_mainpagestateextendsState<mainpage>{@overrideWidgetbuild(BuildContextcontext){returnMaterialApp(home:Scaffold(appBar:AppBar(title:Text('爱吃大芒果')),body:Center(child:Text('爱吃大西瓜')),),);}}


总结

  1. 组件关系MaterialApp是应用的根,Scaffold是页面的骨架,二者结合构成了 Flutter 应用的基础结构。
  2. 组件选型:静态内容用StatelessWidget,动态交互用StatefulWidget,可有效提升性能和代码可维护性。
  3. 避坑提示:使用Color时,直接调用Color.fromARGB()Colors.xxx即可,无需额外用Color()包裹。

http://www.jsqmd.com/news/299691/

相关文章:

  • 机械革命 AMD H255 CPU 无法从AMD官网下载显卡驱动的解决办法
  • 被裁后半月面试8家公司无果,凭借这份Java面试指南成功入职阿里
  • 猎杀时刻,阿里高工总结spring全栈笔记,疯狂狩猎大厂offer!
  • 第一天!
  • 关于得物月付额度怎么提现,看完秒懂
  • [Linux]Kubuntu下mpv播放器安装与最佳配置(无mpv4补帧)
  • SQL数据类型转换:CAST详解及实践
  • KingbaseES 解锁时序数据:国产数据库在物联网时代的突围之路
  • 破局时序数据困局:KingbaseES从医疗到交通的国产化实践启示录
  • 智能农业决策优化:提示工程架构师的AI技术分享
  • 得物月付消费购物额度怎么变现
  • LoRA 微调参数调优流程
  • 串口屏丨串口屏厂家丨液晶屏厂家丨继电保护仪显示屏选型避坑指南:如何解决强电磁干扰、数据跳变与户外严苛工况适配难题?
  • 被低估的Excel艺术大师:用REPT函数一键生成条形图与星级评分
  • 深入理解Linux套接字(Socket)编程:从原理到实践
  • 如何强制ANY CPU的.net程序按32位或64位模式运行?
  • ollama本地安装与大模型与DeepSeek模型调用
  • 数据驱动决策:大数据在决策预测中的关键作用
  • 洛谷 P3395 路障 题解
  • 实用指南:第七十五篇: 数据可视化(一):Matplotlib基础绘图与样式配置
  • 讲解得物月付分期购额度怎么回收变现出来
  • 26年寒假生活指导1.25
  • 如何通过市场数据 API 计算 RSI、MACD 与移动平均线MA
  • Python Dash数据分析实战
  • 解读大数据领域数据中台的价值与意义
  • 深入了解大数据领域Hive的HQL语言特性
  • 【BUG】【Python】【爬虫】爬取加载中的数据
  • 【BUG】【Python】清除字符串空格问题
  • ParseNet: LOOKING WIDER TO SEE BETTER——拓宽视野以更好地理解 - 实践
  • Python Dash 快速搭建交互式Web应用