07-Flutter鸿蒙页面开发基础:路由、底部导航和常用组件
07. Flutter鸿蒙页面开发基础路由、底部导航和常用组件项目跑起来后就可以开始写 Flutter 页面。入门阶段不需要马上引入复杂状态管理先把入口、页面拆分、底部导航、列表、详情页和通用组件写清楚就能支撑大多数小型业务页面。页面目录推荐目录lib ├─ main.dart ├─ app.dart ├─ pages │ ├─ home_page.dart │ ├─ list_page.dart │ ├─ detail_page.dart │ └─ profile_page.dart └─ widgets └─ feature_card.dartApp 入口importpackage:flutter/material.dart;importpages/home_page.dart;voidmain(){runApp(constDemoApp());}classDemoAppextendsStatelessWidget{constDemoApp({super.key});overrideWidgetbuild(BuildContextcontext){returnMaterialApp(debugShowCheckedModeBanner:false,title:Flutter Ohos Demo,theme:ThemeData(colorSchemeSeed:Colors.blue,useMaterial3:true,),home:constHomePage(),);}}底部导航classHomePageextendsStatefulWidget{constHomePage({super.key});overrideStateHomePagecreateState()_HomePageState();}class_HomePageStateextendsStateHomePage{int _index0;finalListWidget_pagesconst[Center(child:Text(首页)),Center(child:Text(列表)),Center(child:Text(我的)),];overrideWidgetbuild(BuildContextcontext){returnScaffold(body:_pages[_index],bottomNavigationBar:NavigationBar(selectedIndex:_index,onDestinationSelected:(value){setState(()_indexvalue);},destinations:const[NavigationDestination(icon:Icon(Icons.home_outlined),label:首页),NavigationDestination(icon:Icon(Icons.list_alt),label:列表),NavigationDestination(icon:Icon(Icons.person_outline),label:我的),],),);}}列表与详情classDemoListPageextendsStatelessWidget{constDemoListPage({super.key});overrideWidgetbuild(BuildContextcontext){finalitemsList.generate(20,(index)第${index1}条内容);returnListView.separated(padding:constEdgeInsets.all(16),itemCount:items.length,separatorBuilder:(_,__)constSizedBox(height:10),itemBuilder:(context,index){returnListTile(shape:RoundedRectangleBorder(borderRadius:BorderRadius.circular(12)),tileColor:Colors.blue.withOpacity(0.08),title:Text(items[index]),trailing:constIcon(Icons.chevron_right),onTap:(){Navigator.of(context).push(MaterialPageRoute(builder:(_)DetailPage(title:items[index]),),);},);},);}}classDetailPageextendsStatelessWidget{finalStringtitle;constDetailPage({super.key,requiredthis.title});overrideWidgetbuild(BuildContextcontext){returnScaffold(appBar:AppBar(title:Text(title)),body:Center(child:Text(详情内容$title)),);}}组件拆分页面稳定后把重复 UI 抽成组件classFeatureCardextendsStatelessWidget{finalIconDataicon;finalStringtitle;finalStringdesc;finalVoidCallback?onTap;constFeatureCard({super.key,requiredthis.icon,requiredthis.title,requiredthis.desc,this.onTap,});overrideWidgetbuild(BuildContextcontext){returnInkWell(borderRadius:BorderRadius.circular(14),onTap:onTap,child:Container(padding:constEdgeInsets.all(16),decoration:BoxDecoration(color:Colors.white,borderRadius:BorderRadius.circular(14),border:Border.all(color:Colors.black12),),child:Row(children:[Icon(icon,size:32,color:Colors.blue),constSizedBox(width:12),Expanded(child:Column(crossAxisAlignment:CrossAxisAlignment.start,children:[Text(title,style:constTextStyle(fontSize:17,fontWeight:FontWeight.w600)),constSizedBox(height:4),Text(desc,style:constTextStyle(color:Colors.black54)),],),),],),),);}}页面状态不要散落在多个地方页面简单时可以用setState但状态变量要集中管理。例如底部导航只维护一个_index列表页只维护自己的加载状态。不要在父页面和子页面里同时维护相同状态否则刷新时容易不一致。classPageStateT{finalbool loading;finalT?data;finalObject?error;constPageState({this.loadingfalse,this.data,this.error,});}这个小类可以让页面状态更清楚加载中、成功、失败分别对应不同字段。页面尺寸适配鸿蒙设备可能有不同尺寸布局时尽量少写死宽度。优先使用LayoutBuilder(builder:(context,constraints){finalcompactconstraints.maxWidth420;returnPadding(padding:EdgeInsets.all(compact?12:20),child:constText(自适应内容),);},)这样页面在手机、折叠屏或平板场景下更容易继续扩展。(context, constraints) {final compact constraints.maxWidth 420;return Padding(padding: EdgeInsets.all(compact ? 12 : 20),child: const Text(‘自适应内容’),);},)这样页面在手机、折叠屏或平板场景下更容易继续扩展。

相关新闻

CCManager核心功能解析:多项目支持与智能会话管理的完整教程

CCManager核心功能解析:多项目支持与智能会话管理的完整教程

CCManager核心功能解析:多项目支持与智能会话管理的完整教程 【免费下载链接】ccmanager Coding Agent Session Manager for Claude Code / Gemini CLI / Codex CLI / Cursor Agent / Copilot CLI / Cline CLI / OpenCode / Kimi CLI 项目地址: https://gitcode.c…

2026/7/12 19:09:33阅读更多 →
【信息科学与工程学】【物理/化学和工程技术】第八十七篇液冷解决方案06

【信息科学与工程学】【物理/化学和工程技术】第八十七篇液冷解决方案06

编号 类型 领域 问题 问题的数学分析及数值分析 (Step推导链) 参数列表及边界范围及数值及各类常数 2232 芯片液冷系统集成 CDU架构 风液CDU与液液CDU的一次侧/二次侧热阻网络对比 Step 1 – 双级热阻网络 风液CDU:芯片→TIM→冷板→二次侧冷却液→CDU内风冷冷凝器→…

2026/7/12 19:09:32阅读更多 →
WaitingDots进阶技巧:如何扩展和定制动画行为

WaitingDots进阶技巧:如何扩展和定制动画行为

WaitingDots进阶技巧:如何扩展和定制动画行为 【免费下载链接】WaitingDots 项目地址: https://gitcode.com/gh_mirrors/wa/WaitingDots WaitingDots是一款专为Android开发者设计的弹跳点动画库,它能够为你的应用添加生动有趣的加载动画效果。这…

2026/7/12 19:09:32阅读更多 →
ScienceFictionCollection项目结构解析:如何高效管理海量科幻文学资源

ScienceFictionCollection项目结构解析:如何高效管理海量科幻文学资源

ScienceFictionCollection项目结构解析:如何高效管理海量科幻文学资源 【免费下载链接】ScienceFictionCollection 科幻小说作品集,在线地址:https://github-novel-read.vercel.app 项目地址: https://gitcode.com/gh_mirrors/sc/ScienceFi…

2026/7/12 22:24:49阅读更多 →
GeocoderLaravel实战案例:构建基于地理位置的Laravel应用

GeocoderLaravel实战案例:构建基于地理位置的Laravel应用

GeocoderLaravel实战案例:构建基于地理位置的Laravel应用 【免费下载链接】GeocoderLaravel Geocoder service provider for Laravel 项目地址: https://gitcode.com/gh_mirrors/ge/GeocoderLaravel GeocoderLaravel是一款专为Laravel框架设计的地理编码服务…

2026/7/12 22:24:49阅读更多 →
Qt 6.2 应用发布:3种单文件封装方案体积与兼容性对比

Qt 6.2 应用发布:3种单文件封装方案体积与兼容性对比

Qt 6.2 应用发布:3种单文件封装方案体积与兼容性对比当开发者完成一个Qt应用的开发后,如何将其优雅地交付给终端用户往往成为最后的挑战。特别是在Windows平台,用户期望获得一个干净、独立的可执行文件,而非附带大量依赖文件的文件…

2026/7/12 22:24:49阅读更多 →
为什么选择Pact Broker?探索消费者驱动契约测试的革命性工具

为什么选择Pact Broker?探索消费者驱动契约测试的革命性工具

为什么选择Pact Broker?探索消费者驱动契约测试的革命性工具 【免费下载链接】pact_broker Enables your consumer driven contracts workflow 项目地址: https://gitcode.com/gh_mirrors/pa/pact_broker Pact Broker是一款专为消费者驱动契约测试设计的强大…

2026/7/12 22:24:49阅读更多 →
如何快速上手Qwopus3.6-35B-A3B-Coder:5个简单步骤提升代码生成效率

如何快速上手Qwopus3.6-35B-A3B-Coder:5个简单步骤提升代码生成效率

如何快速上手Qwopus3.6-35B-A3B-Coder:5个简单步骤提升代码生成效率 【免费下载链接】Qwopus3.6-35B-A3B-Coder-MTP-GGUF 项目地址: https://ai.gitcode.com/hf_mirrors/Jackrong/Qwopus3.6-35B-A3B-Coder-MTP-GGUF Qwopus3.6-35B-A3B-Coder是一款专为高效代…

2026/7/12 22:24:49阅读更多 →
如果明天所有大模型都停服,你手头最重要的事,还能不能继续?

如果明天所有大模型都停服,你手头最重要的事,还能不能继续?

不是摆烂,是止损。你把“不再为工具的退化焦虑”等同于“放弃进步”,这恰恰是被工具PUA久了的后遗症。真正的摆烂是什么?是明明感觉模型变垃圾了,还逼自己写更复杂的提示词去“适配”它;是明知回答在注水,还…

2026/7/12 22:19:48阅读更多 →
VSCode TypeScript 环境配置对比:全局安装 vs 项目本地安装的4个关键差异

VSCode TypeScript 环境配置对比:全局安装 vs 项目本地安装的4个关键差异

VSCode TypeScript 环境配置对比:全局安装 vs 项目本地安装的4个关键差异当你在VSCode中启动一个新的TypeScript项目时,第一个技术决策往往从安装方式开始。这个看似简单的选择——全局安装还是项目本地安装——实际上会深刻影响你的开发流程、团队协作和…

2026/7/12 0:02:11阅读更多 →
智慧树刷课插件:5分钟实现自动化学习的智能助手

智慧树刷课插件:5分钟实现自动化学习的智能助手

智慧树刷课插件:5分钟实现自动化学习的智能助手 【免费下载链接】zhihuishu 智慧树刷课插件,自动播放下一集、1.5倍速度、无声 项目地址: https://gitcode.com/gh_mirrors/zh/zhihuishu 智慧树刷课插件是一款专为智慧树在线教育平台设计的Chrome浏…

2026/7/12 0:02:11阅读更多 →
Steam创意工坊下载器WorkshopDL:跨平台游戏模组获取的终极解决方案

Steam创意工坊下载器WorkshopDL:跨平台游戏模组获取的终极解决方案

Steam创意工坊下载器WorkshopDL:跨平台游戏模组获取的终极解决方案 【免费下载链接】WorkshopDL WorkshopDL - The Best Steam Workshop Downloader 项目地址: https://gitcode.com/gh_mirrors/wo/WorkshopDL 你是否在GOG或Epic Games Store购买了心仪的游戏…

2026/7/12 0:02:11阅读更多 →
VSCode TypeScript 环境配置对比:全局安装 vs 项目本地安装的4个关键差异

VSCode TypeScript 环境配置对比:全局安装 vs 项目本地安装的4个关键差异

VSCode TypeScript 环境配置对比:全局安装 vs 项目本地安装的4个关键差异当你在VSCode中启动一个新的TypeScript项目时,第一个技术决策往往从安装方式开始。这个看似简单的选择——全局安装还是项目本地安装——实际上会深刻影响你的开发流程、团队协作和…

2026/7/12 0:02:11阅读更多 →
智慧树刷课插件:5分钟实现自动化学习的智能助手

智慧树刷课插件:5分钟实现自动化学习的智能助手

智慧树刷课插件:5分钟实现自动化学习的智能助手 【免费下载链接】zhihuishu 智慧树刷课插件,自动播放下一集、1.5倍速度、无声 项目地址: https://gitcode.com/gh_mirrors/zh/zhihuishu 智慧树刷课插件是一款专为智慧树在线教育平台设计的Chrome浏…

2026/7/12 0:02:11阅读更多 →
Steam创意工坊下载器WorkshopDL:跨平台游戏模组获取的终极解决方案

Steam创意工坊下载器WorkshopDL:跨平台游戏模组获取的终极解决方案

Steam创意工坊下载器WorkshopDL:跨平台游戏模组获取的终极解决方案 【免费下载链接】WorkshopDL WorkshopDL - The Best Steam Workshop Downloader 项目地址: https://gitcode.com/gh_mirrors/wo/WorkshopDL 你是否在GOG或Epic Games Store购买了心仪的游戏…

2026/7/12 0:02:11阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/11 16:20:28阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/11 23:15:38阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/12 21:43:43阅读更多 →