Flutter for HarmonyOS 开发指南(二):Hello World

一:零基础快速入门Dart Flutter开发

这段代码是 Flutter 官方提供的标准“计数器”示例,也是学习 Flutter 的“Hello World”。现对它进行了一些修改(添加了全局主题配置)。

效果:

二:示例代码

main.dart代码如下:

import 'package:flutter/material.dart'; void main() { runApp(const MyApp()); } class MyApp extends StatelessWidget { const MyApp({super.key}); @override Widget build(BuildContext context) { return MaterialApp( title: 'Flutter Demo', theme: ThemeData( colorScheme: ColorScheme.fromSeed(seedColor: Colors.red.shade500), appBarTheme: const AppBarTheme( // 设置背景色(可选) // backgroundColor: Colors.white, // 设置标题文本的全局样式 titleTextStyle: TextStyle( color: Colors.black, // 全局标题颜色 fontSize: 18, // 全局字体大小 fontWeight: FontWeight.bold, ), ), ), home: const MyHomePage(title: '首页'), ); } } class MyHomePage extends StatefulWidget { const MyHomePage({super.key, required this.title}); final String title; @override State<MyHomePage> createState() => _MyHomePageState(); } class _MyHomePageState extends State<MyHomePage> { int _counter = 0; void _incrementCounter() { setState(() { _counter++; }); } @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( backgroundColor: Theme.of(context).colorScheme.inversePrimary, title: Text(widget.title), ), body: Center( child: Column( mainAxisAlignment: MainAxisAlignment.center, children: <Widget>[ const Text('You have pushed the button this many times:'), Text( '$_counter', style: Theme.of(context).textTheme.headlineMedium, ), ], ), ), floatingActionButton: FloatingActionButton( onPressed: _incrementCounter, tooltip: 'Increment', child: const Icon(Icons.add), ), ); } }

三:代码解读

1. 入口函数 (main)

void main() { runApp(const MyApp()); }
  • main(): 这是 Dart 程序的入口,一切从这里开始。

  • runApp(): 这是 Flutter 的核心函数。它接受一个 Widget(在这里是 MyApp),并将其作为根节点挂载到屏幕上。

2. 根组件 (MyApp)

class MyApp extends StatelessWidget { const MyApp({super.key}); @override Widget build(BuildContext context) { return MaterialApp( title: 'Flutter Demo', theme: ThemeData( colorScheme: ColorScheme.fromSeed(seedColor: Colors.red.shade500), appBarTheme: const AppBarTheme( // 设置背景色(可选) // backgroundColor: Colors.white, // 设置标题文本的全局样式 titleTextStyle: TextStyle( color: Colors.black, // 全局标题颜色 fontSize: 18, // 全局字体大小 fontWeight: FontWeight.bold, ), ), ), home: const MyHomePage(title: '首页'), ); } }
  • StatelessWidget: 表示这个组件是无状态的。也就是说,MyApp 初始化后,它自己的内部状态不会发生改变(它只是配置整个 App 的壳子)。

  • MaterialApp: 这是 Flutter 提供的一个顶层组件,它封装了 Google Material Design(安卓风格)的设计规范,提供了路由、主题等核心功能。

  • ThemeData: 定义 App 的外观。

  • ColorScheme.fromSeed: 这是 Material 3 的新特性。只需要给一个种子颜色(这里是白色),Flutter 会自动生成一套协调的配色方案(主色、副色、背景色等)。

  • appBarTheme: 这里是设置的全局样式。这意味着,只要在 App 里使用 AppBar 且不单独覆盖样式。

3. 有状态的主页 (MyHomePage)

class MyHomePage extends StatefulWidget { ... }
  • StatefulWidget: 这里变成了有状态组件。因为这个页面需要记录点击次数(_counter),数字会变化,所以界面需要随之刷新。

  • title: 这是一个参数,由父组件(MyApp)传递进来,在这里是 "首页"。

4. 状态逻辑与界面 (_MyHomePageState)

这是 MyHomePage 的“伴生”类,所有的逻辑和界面构建都在这里。

变量与逻辑
int _counter = 0; // 状态变量,记录点击次数 void _incrementCounter() { setState(() { _counter++; }); }
  • setState(() { ... }):这句最重要!在 Flutter 中,单纯改变变量 _counter++ 是不会更新界面的。必须调用 setState 通知 Flutter:“数据变了,请重新运行 build 方法刷新屏幕。”

界面构建 (build)
@override Widget build(BuildContext context) { return Scaffold( ... ); }
  • caffold: 意为“脚手架”。它实现了 Material Design 的基本页面布局结构,提供了 appBar(顶部导航栏)、body(中间内容)、floatingActionButton(悬浮按钮)等槽位。

这里的代码有一个“冲突”点:
appBar: AppBar( // 这里的设置优先级高于 MyApp 里的全局设置! backgroundColor: Theme.of(context).colorScheme.inversePrimary, title: Text(widget.title), ),
  • 注意:你在 MyApp 里设置了全局 backgroundColor: Colors.white,但是在这里(MyHomePage),代码显式地设置了 backgroundColor 为 inversePrimary(一种浅紫色)。

    • 结果:背景色会是浅紫色(局部覆盖了全局)。

    • 标题文字:因为这里没设置 TextStyle,所以它会使用你在 MyApp 定义的蓝色、18号字(全局样式生效)。

页面主体 (body)
body: Center( // 让内容居中 child: Column( // 垂直排列子组件 mainAxisAlignment: MainAxisAlignment.center, // 垂直方向居中 children: <Widget>[ const Text('You have pushed...'), // 固定文本 Text( '$_counter', // 显示计数变量 style: Theme.of(context).textTheme.headlineMedium, // 使用默认的大标题样式 ), ], ), ),

四:学习建议

  1. Widget 是积木:Flutter 也就是在拼积木。Text、Center、Column 都是积木。

  2. Stateless vs Stateful

    • 如果页面只是展示静态内容(如“关于我们”),用 StatelessWidget。

    • 如果页面有交互、数据会变(如“计数器”、“登录页”),用 StatefulWidget。

  3. 样式优先级:就像 CSS 一样,就近原则

    • MyApp 里的 theme 是全局样式。

    • 具体 Widget(如 AppBar)里的属性是局部样式,会覆盖全局样式。

欢迎加入开源鸿蒙跨平台社区 https://openharmonycrossplatform.csdn.net

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

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

相关文章

搜维尔科技:Manus数据手套遥操作机器人手机械手推荐

人工智能机器人训练 利用MANUS手套实现机器人可扩展学习 使用MANUS手套训练灵巧的机器人手,该手套专为超精确的手指追踪和实时动作捕捉而设计。这些机器人手套可生成高分辨率的CSV格式运动数据,以便无缝集成到机器学…

cmake构建c++项目时,vscode/cursor无法识别头文件路径,导致报错,解决方案

Cursor 里 C 头文件报错的原因与解决&#xff1a;使用 compile_commands.json今天在 chat-server-cpp 项目里遇到一个常见问题&#xff1a;CMake 能正常编译&#xff0c;但编辑器里一堆头文件红线&#xff0c;导致跳转、补全和诊断全是假的错误。本文记录问题原因与解决过程。现…

深入解析:城市生命线软件平台

深入解析:城市生命线软件平台pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco"…

流量一上来就崩?老实说,是你没提前想明白

流量一上来就崩?老实说,是你没提前想明白 ——聊聊如何防止流量突增把服务器直接送走 大家好,我是 Echo_Wish。 做运维、搞架构这么多年,我见过最“刺激”的场面,永远不是宕机本身,而是流量突然暴涨的那一刻。 你永远忘不了那种感觉: 监控曲线突然竖起来 📈 CPU 飙…

含文档+PPT+源码】基于Python的股票数据可视化及推荐系统的设计与实现

项目介绍 本课程演示的是一款基于Python的股票数据可视化及推荐系统的设计与实现&#xff0c;主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的 Python学习者。 1.包含&#xff1a;项目源码、项目文档、数据库脚本、软件工具等所有资料 2.带你从零开始部署运行…

吐血推荐!继续教育AI论文网站TOP8测评与推荐

吐血推荐&#xff01;继续教育AI论文网站TOP8测评与推荐 2026年继续教育AI论文网站测评背景与评测维度 随着人工智能技术在学术领域的不断渗透&#xff0c;越来越多的继续教育学员开始借助AI写作工具提升论文撰写效率。然而&#xff0c;面对市场上五花八门的平台&#xff0c;如…

pytorch深度学习实战:自定义数据集类型

本章围绕医学影像数据加载展开,核心是将 LUNA16 数据集的 CT 扫描文件(.mhd/.raw)与 CSV 标注文件转换为 PyTorch 可用的训练样本。首先合并并匹配候选结节标注信息,通过 Ct 类加载 CT 数据并裁剪 HU 值至合理范围…

机器学习 (1) 监督学习 - 教程

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

使用ncmpcpp结合mpd更加容易听音乐

参考:https://ubuntuhandbook.org/index.php/2025/07/install-mpd-ubuntu/ 使用ncmpcpp结合mpd更加容易听音乐安装软件sudo apt install mpd ncmpcpp配置MPD配置服务器端用户:~/.config/mpd/mpd.conf 系统:/etc/mpd…

Sketch为什么越来越少人用?UI设计工具的真实迁移方向

引言有很长一段时间里&#xff0c;产品圈和设计圈的闲聊里&#xff0c;Sketch这个名字出现得越来越少了。这让我想起几年前&#xff0c;它还是求职必备技能&#xff0c;如今却似乎悄然退居二线。大家更多的讨论变成了在线协作设计工具&#xff0c;直接在浏览器里改稿。是Sketch…

sparse4D V2核心要点

这个图是sparseV2的结构&#xff0c;单帧网络输出的instance和历史帧的instance是如何在多帧网络里融合的&#xff1f;因为单帧网络基于当前img检出的结果肯定跟历史帧是有重叠的&#xff0c;初读文章的疑问是&#xff1a;如何把重合的这部分一一对应上呢一句话先给结论&#x…

学霸同款2026 AI论文工具TOP9:自考毕业论文全攻略

学霸同款2026 AI论文工具TOP9&#xff1a;自考毕业论文全攻略 2026年自考论文写作工具测评&#xff1a;为何需要这份榜单&#xff1f; 随着人工智能技术的不断进步&#xff0c;AI论文工具逐渐成为学术写作的重要辅助手段。对于自考学生而言&#xff0c;撰写毕业论文不仅是学业的…

计算机Java毕设实战-基于Spring Boot的企业人力资源管理系统基于springboot的寿险公司人力资源管理系统【完整源码+LW+部署说明+演示视频,全bao一条龙等】

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

sparse4D v3

4个技术细节&#xff1a; temporal instance denoising quality estimation decoupled attention extend to tracking 1. Temporal Instance Denoising&#xff08;时序实例去噪&#xff09; 背景问题&#xff08;Sparse4D / v2 中的痛点&#xff09; Sparse4D 系列的核心是 …

具备DI、DO、AI、AO四类IO信号的采集/输出功能以及串口、网口的通信功能,主要用于对综合测试平台及样机的功能测试提供支撑。

核控卡件综合测试平台1&#xff09;系统简介核控卡件综合测试平台具备DI、DO、AI、AO四类IO信号的采集/输出功能以及串口、网口的通信功能&#xff0c;主要用于对综合测试平台及样机的功能测试提供支撑。综合测试平台集成测试设备的对外总线接口&#xff0c;主要包括RS422、以太…

计算机Java毕设实战-基于Spring Boot的保险销售员人力资源管理系统基于springboot的寿险公司人力资源管理系统【完整源码+LW+部署说明+演示视频,全bao一条龙等】

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

用于测量个防产品中各种活门的动态数据,提取活门的动态特性,为产品的研发提供测试条件和数据支持

个体防护装备活门性能测试系统 1&#xff09;系统简介 个体防护装备活门性能测试系统用于测量个防产品中各种活门的动态数据&#xff0c;提取活门的动态特性&#xff0c;为产品的研发提供测试条件和数据支持。该测试系统能够提供不同的接口与现有活门匹配&#xff0c;能够检测…

Java计算机毕设之基于Java+springboot的寿险公司人力资源管理系统基于SpringBoot的人力资源管理系统(完整前后端代码+说明文档+LW,调试定制等)

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

【剑斩OFFER】算法的暴力美学——力扣 675 题:为高尔夫比赛砍树

一、题目描述二、算法原理思路&#xff1a;BFS 算法1&#xff09;找到图中不是0&#xff0c;1值&#xff0c;用个二维数组来存储他们的下标2&#xff09;排序&#xff0c;根据下标对应的值的大小升序3&#xff09;升序&#xff1a;1 -> 2 -> 3......... 的本质就是 1 —&…

【课程设计/毕业设计】基于SpringBoot的人力资源管理系统基于springboot的寿险公司人力资源管理系统【附源码、数据库、万字文档】

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…