尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
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(‘自适应内容’),);},)这样页面在手机、折叠屏或平板场景下更容易继续扩展。
RELATED

相关推荐

如何解决React Native Text Input Mask常见问题:兼容性、性能优化与测试策略终极指南

如何解决React Native Text Input Mask常见问题:兼容性、性能优化与测试策略终极指南

如何解决React Native Text Input Mask常见问题:兼容性、性能优化与测试策略终极指南 【免费下载链接】react-native-text-input-mask Text input mask for React Native, Android and iOS 项目地址: https://gitcode.com/gh_mirrors/re/react-native-text-input-…

📅 2026/9/15 6:23:42
10分钟上手highcharter:从安装到绘制第一个交互式图表的完整教程

10分钟上手highcharter:从安装到绘制第一个交互式图表的完整教程

10分钟上手highcharter:从安装到绘制第一个交互式图表的完整教程 【免费下载链接】highcharter R wrapper for highcharts 项目地址: https://gitcode.com/gh_mirrors/hi/highcharter 想要在R中创建专业级交互式图表吗?highcharter是你的完美选择…

📅 2026/10/15 7:11:02
HarmonyOS7 ArkUI 歌词滚动播放器 - 歌词同步高亮、进度控制与翻译切换实战:从状态到页面反馈

HarmonyOS7 ArkUI 歌词滚动播放器 - 歌词同步高亮、进度控制与翻译切换实战:从状态到页面反馈

文章目录前言真实页面会关心什么列表、状态和反馈关键片段片段 1:get currentLineIndex(): number {片段 2:get progress(): number {使用方式完整代码可扩展点前言 如果刚开始写 HarmonyOS7 页面,我建议多拆这种案例。代码量不夸张&#xf…

📅 2026/10/7 10:57:53
MORE NEWS

更多资讯

📰

电工证考试心里没底怕挂科?听真实经历聊聊辰溪电工证考试怎么过

电工证考试心里没底怕挂科?听真实经历聊聊辰溪电工证考试怎么过 实操考试心里没底怕挂科?别担心,很多人第一次考的时候都和你一样紧张。我认识的一位郑州项目现场管理员,也是抱着这种心态去考的辰溪电工证,结果一考就过了。他说,其实考试难度没想象中那…

📰

办理室内电工作业技能需要什么材料

之前考的证在外省能不能转过来?真实经历告诉你答案 之前考的证在外省能不能转过来?这个问题我跟不少同行聊过,他们大多经历过跨省转证的困扰。今天就以我身边一位 洛阳涧西区 的转岗电工的真实经历为例,给你讲讲 室内电工作业技能…

📰

江苏电工证在哪里年审 怎么考才能保持含金量

江苏电工证在哪里年审 怎么考才能保持含金量 证书过期了不知道怎么复审延期,这事儿很多人其实都遇到过。尤其是像你这样刚毕业的河南工程类学生,刚拿到电工证就想着怎么在江苏发展,结果没多久就忘了年审的事儿,一不小心就让含金量打了折扣。…

📰

不同电工证对应薪资多少钱 电工证过期怎么复审延期

不同电工证对应薪资多少钱 电工证过期怎么复审延期 证书过期了不知道怎么复审延期,现在找工作、换岗位、升职加薪都卡在这一步,别慌,今天就给你讲清楚不同电工证对应薪资多少钱,还有复审的流程和注意事项。…

📰

工地太忙根本没时间复习考试?渝中电工证在哪里考试良心建议来了

工地太忙根本没时间复习考试?渝中电工证在哪里考试良心建议来了 工地太忙根本没时间复习考试,这是很多一线电工的常态。你可能在赶工期、抢进度,根本没有多余的时间去准备电工证的考试。但你知道吗, 渝中电工证在哪里考试…

📰

府谷县酒店电工证多少钱 电工证报考门槛低不低

府谷县酒店电工证多少钱 电工证报考门槛低不低 学历不高怕报不上名,是不是你也在考虑报考府谷县酒店电工证?别急,下面这几点告诉你,其实报名门槛没有你想象的那么高,而且 府谷县酒店电工证多少钱 也并不是你想象中的天价。…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬