Flutter for OpenHarmony 引导页萌系实战指南:给新用户一份软乎乎的欢迎礼✨
Flutter for OpenHarmony 引导页萌系实战指南:给新用户一份软乎乎的欢迎礼✨
欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.csdn.net
一、开篇:给鸿蒙 App 加上软乎乎的新用户欢迎礼🎁
哈喽~这次我给 Flutter 鸿蒙 App 装上了一个软乎乎的引导页!就像给新用户递上一份带着小卡片的欢迎礼,滑动就能了解 App 的可爱功能,最后一键进入主界面,用起来超暖心~
这次的小项目里,我搞定了三件大事:
设计了粉粉的多页引导卡片,每一页都像一张软萌小海报
实现了流畅的滑动切换效果,翻页像在翻一本可爱的小画册
加了跳过和完成按钮,用户可以按自己的节奏看完引导,超贴心~
接下来就和我一起看看,怎么给鸿蒙 App 加上这个软乎乎的新用户欢迎礼吧~
二、第一步:设计软乎乎的引导卡片,像翻一本可爱小画册🎨
引导页的关键就是让新用户一眼爱上 App!我设计了 3 张引导卡片,每一页都有可爱的图标、软萌的标题和暖心的说明文字,配色也和 App 整体风格统一,像翻一本会动的小画册~
踩过的小坑:
一开始设计的时候,卡片之间的间距没调好,滑动切换的时候会有 “卡顿感”,后来用PageView的pageSnapping属性,卡片就能稳稳停住,翻页体验一下子就丝滑多啦!还有鸿蒙设备上文字偶尔会溢出,我给文字加了maxLines和溢出省略号,再也不会破坏软乎乎的排版啦~
引导页 UI 核心代码
dartimport'package:flutter/material.dart';// 引导页卡片组件classGuideCardextendsStatelessWidget{finalStringicon;finalStringtitle;finalStringdesc;constGuideCard({super.key,requiredthis.icon,requiredthis.title,requiredthis.desc,});@overrideWidgetbuild(BuildContextcontext){returnPadding(padding:constEdgeInsets.all(32.0),child:Column(mainAxisAlignment:MainAxisAlignment.center,children:[// 软乎乎的图标(这里用Icon模拟,也可以换成本地图片)Icon(Icons.star,size:120,color:Colors.pink[200],),constSizedBox(height:30),Text(title,style:constTextStyle(fontSize:24,fontWeight:FontWeight.bold,color:Colors.black87,),),constSizedBox(height:16),Text(desc,textAlign:TextAlign.center,style:TextStyle(fontSize:16,color:Colors.grey[600],),maxLines:2,overflow:TextOverflow.ellipsis,),],),);}}三、第二步:实现滑动切换,像翻画册一样丝滑💡
为了让引导页更像翻画册,我用PageView实现了滑动切换效果,还加了底部的小圆点指示器,用户滑动的时候,指示器会跟着动,像在标记自己看到哪一页啦~
滑动切换与指示器代码
dartclassCuteGuidePageextendsStatefulWidget{constCuteGuidePage({super.key});@overrideState<CuteGuidePage>createState()=>_CuteGuidePageState();}class_CuteGuidePageStateextendsState<CuteGuidePage>{finalPageController_controller=PageController();int _currentPage=0;// 引导页数据finalList<Map<String,String>>guideData=[{'icon':'star','title':'欢迎来到软乎乎App','desc':'这里有超多可爱的功能,陪你度过每一天~',},{'icon':'favorite','title':'收藏你喜欢的一切','desc':'看到喜欢的内容,一键收藏,再也不怕找不到啦~',},{'icon':'chat','title':'和小伙伴轻松聊天','desc':'软乎乎的聊天室,和朋友分享日常超方便~',},];@overrideWidgetbuild(BuildContextcontext){returnScaffold(body:Column(children:[Expanded(child:PageView.builder(controller:_controller,onPageChanged:(index){setState(()=>_currentPage=index);},itemCount:guideData.length,itemBuilder:(context,index){returnGuideCard(icon:guideData[index]['icon']!,title:guideData[index]['title']!,desc:guideData[index]['desc']!,);},),),// 底部指示器+按钮Padding(padding:constEdgeInsets.symmetric(horizontal:24,vertical:32),child:Row(mainAxisAlignment:MainAxisAlignment.spaceBetween,children:[// 跳过按钮TextButton(onPressed:()=>_goToHome(),child:constText('跳过',style:TextStyle(color:Colors.grey)),),// 指示器Row(children:List.generate(guideData.length,(index)=>Container(margin:constEdgeInsets.symmetric(horizontal:4),width:_currentPage==index?12:8,height:8,decoration:BoxDecoration(color:_currentPage==index?Colors.pink:Colors.grey[300],borderRadius:BorderRadius.circular(4),),),),),// 下一页/完成按钮ElevatedButton(style:ElevatedButton.styleFrom(backgroundColor:Colors.pink[200],shape:RoundedRectangleBorder(borderRadius:BorderRadius.circular(20),),),onPressed:(){if(_currentPage<guideData.length-1){_controller.nextPage(duration:constDuration(milliseconds:300),curve:Curves.easeInOut,);}else{_goToHome();}},child:Text(_currentPage==guideData.length-1?'开始使用':'下一页'),),],),),],),);}// 跳转到主界面void_goToHome(){// 这里可以保存引导页已完成的状态,下次启动不再显示Navigator.pushReplacementNamed(context,'/home');}}四、第三步:适配鸿蒙细节,让引导页更贴心🎀
在鸿蒙真机上测试的时候,我发现了几个小细节,调整后引导页的体验更软乎乎啦~
- 适配不同屏幕尺寸
鸿蒙设备的屏幕尺寸差异挺大,一开始用固定高度的卡片,在小屏幕上会挤在一起。后来我给卡片用了Expanded和百分比布局,不管什么尺寸的鸿蒙设备,引导页都能乖乖适配,不会被裁剪~ - 控制滑动灵敏度
有些用户滑动引导页的时候,不小心滑一下就翻了两页,体验不太好。我给PageView加了physics: const PageScrollPhysics(),控制滑动灵敏度,用户轻轻滑一下只会翻一页,翻页体验更稳啦~ - 首次启动判断
为了不让老用户每次打开 App 都看到引导页,我用shared_preferences保存了用户是否已完成引导的状态,只有首次启动才会显示引导页,贴心又不打扰~
dart// 在main.dart中判断是否显示引导页Future<void>main()async{WidgetsFlutterBinding.ensureInitialized();finalprefs=awaitSharedPreferences.getInstance();finalisFirstLaunch=prefs.getBool('is_first_launch')??true;runApp(MyApp(isFirstLaunch:isFirstLaunch));}// 在引导页完成时保存状态void_goToHome()async{finalprefs=awaitSharedPreferences.getInstance();awaitprefs.setBool('is_first_launch',false);Navigator.pushReplacementNamed(context,'/home');}五、真机体验:软乎乎的引导页在鸿蒙设备上跑起来啦🎉
我把这个软乎乎的引导页装到鸿蒙真机上试了试,效果超棒:
滑动切换像翻画册一样丝滑,小圆点指示器会跟着动,超可爱
跳过和完成按钮位置很合理,用户可以按自己的节奏看完引导
不同尺寸的鸿蒙设备上,引导卡片都能乖乖适配,不会被裁剪
首次启动显示引导页,之后直接进入主界面,不打扰老用户~
这是我的运行截图:
六、复盘小技巧:让引导页在鸿蒙上更乖💡
折腾下来,我也总结了几个让引导页变乖的小技巧:
用 PageView 实现滑动切换,加个指示器,用户一眼就知道自己看到哪一页啦
跳过按钮一定要加,给不想看引导的用户留条快捷通道
用 shared_preferences 保存首次启动状态,老用户不会被重复引导打扰
真机测试比模拟器靠谱,鸿蒙设备上的滑动体验和适配效果只有真机才看得出来~
七、结尾:给新用户的软乎乎欢迎礼谁不爱呀~
这次给鸿蒙 App 装上的软乎乎引导页,不仅帮新用户快速了解了 App 的功能,还让他们第一次打开 App 就感受到了温暖~看着用户滑动翻页的样子,就像收到了一份带着小卡片的欢迎礼,超治愈!
