Flutter+开源鸿蒙实战|智联邻里Day8 Lottie动画集成+url_launcher跳转拨号+个人中心完善+全局UI统一
Flutter开源鸿蒙实战智联邻里Day8 Lottie动画集成url_launcher跳转拨号个人中心完善全局UI统一欢迎加入开源鸿蒙跨平台社区https://openharmonycrossplatform.csdn.net!-- Schema.org 结构化数据 --scripttypeapplication/ldjson{context:https://schema.org,type:BlogPosting,headline:Flutter开源鸿蒙实战 智联邻里Day8 Lottie动画集成url_launcher拨号跳转个人中心完善全局UI统一,author:{type:Person,name:鸿蒙跨端开发者},publisher:{type:Organization,name:CSDN开源鸿蒙跨平台社区},datePublished:2026-05-06,description:智联邻里Day8 引入第三方库lottie动画、url_launcher一键拨号跳转完善我的个人中心页面全局统一UI样式、适配鸿蒙多端基于GetX全套架构开发,keywords:Flutter,开源鸿蒙,OpenHarmony,智联邻里Day8,Lottie动画,url_launcher,个人中心,一键拨号,GetX,鸿蒙多端适配}/script一、前言哈喽各位小伙伴智联邻里Day8准时更新回顾前面七天我们已经完成了项目基础框架搭建、底部导航、首页布局、邻里闲置发布、详情删除、GetX全局架构重构、EasyRefresh高级下拉刷新、Fluttertoast全局提示、网络状态监听、image_picker相册相机选图、cached_network_image网络图片缓存整个项目的业务骨架和核心技术栈已经全部搭建完毕并且全程基于第三方库企业级开发不再依赖原生冗余写法。来到Day8我们继续严格沿用第三方库开发标准新增两个项目必备主流第三方库lottie动画库、url_launcher跳转拨号库同时重点完善我的个人中心页面、全局统一UI样式规范、优化整体交互细节补齐项目空页面、加载动画、一键联系拨号等生活化实用功能进一步拔高项目完整度和视觉质感适配鸿蒙手机、平板、DAYU200开发板全设备。今天核心开发目标清晰明确引入lottie第三方动画库集成加载动画、空数据占位动画、页面启动动画替代传统静态图标提升APP高级感引入url_launcher第三方库实现一键拨打电话、跳转浏览器、打开微信链接适配邻里互助场景联系需求全面完善我的个人中心页面布局重构、头像展示、功能列表菜单、版本信息、退出登录模拟全局统一UI规范统一圆角、间距、主题色、文字字号适配鸿蒙设计风格基于GetX整合所有逻辑个人中心状态管理、页面跳转、弹窗提示全部沿用已有架构保持项目代码风格统一深化鸿蒙多端适配动画尺寸、菜单布局、弹窗比例针对大屏平板和开发板做专属适配解决显示错位、动画拉伸问题。依旧保持往期详细写作风格库作用讲解、集成步骤、逐行代码注释、原理拆解、避坑指南、适配细节、效果测试、当日总结下期预告结构和Day1-Day7完全一致。二、Day8 新增第三方库说明本次Day8新增两个行业通用第三方库延续项目全第三方库生态第三方库核心作用替代/新增能力鸿蒙适配优势lottie引入JSON矢量动画实现加载、空页面、引导动画替代传统静态图片、逐帧动画体积小、不失真、任意缩放适配鸿蒙多设备屏幕url_launcher一键拨打电话、跳转浏览器、打开外部链接原生需要原生通道调用库直接封装一行调用完美兼容开源鸿蒙设备拨号、应用跳转权限已有保留第三方库全部继续沿用flutter_screenutil、dio、shared_preferences、getx、flutter_easy_refresh、fluttertoast、connectivity_plus、image_picker、cached_network_image。三、版块1pubspec.yaml 新增依赖配置打开项目根目录pubspec.yaml在原有依赖基础上追加今天两个新库完整依赖可直接覆盖dependencies:flutter:sdk:flutterflutter_screenutil:^5.9.0dio:^5.4.0shared_preferences:^2.2.2getx:^4.6.55flutter_easy_refresh:^3.4.0fluttertoast:^8.2.2connectivity_plus:^5.0.1image_picker:^1.1.1cached_network_image:^3.3.0# Day8 新增第三方库lottie:^2.7.0url_launcher:^6.2.5终端执行安装命令同步依赖flutter pub get鸿蒙权限配置必配url_launcher 需要拨号、联网跳转权限在android/app/src/main/AndroidManifest.xml添加uses-permissionandroid:nameandroid.permission.CALL_PHONE/uses-permissionandroid:nameandroid.permission.INTERNET/开源鸿蒙设备自动兼容权限申请无需额外原生代码修改。四、版块2Lottie动画第三方库集成与全局使用4.1 为什么选用Lottie原生做加载动画、空状态页面只能用静态图片或者帧动画体积大、缩放模糊、适配差Lottie 由Adobe AE导出JSON动画文件第三方库直接解析渲染优势矢量动画任意缩放鸿蒙手机/平板/开发板无拉伸模糊文件体积极小不增大安装包支持循环播放、暂停、手动控制动画进度开源免费动画资源丰富直接下载即可接入项目。4.2 项目引入Lottie资源文件在项目lib同级新建assets/lottie文件夹下载加载动画、空数据动画JSON文件放入目录pubspec.yaml 注册资源flutter:assets:-assets/lottie/4.3 封装全局Lottie通用组件新建lib/widget/lottie_widget.dart全局封装所有页面直接复用importpackage:flutter/material.dart;importpackage:lottie/lottie.dart;importpackage:flutter_screenutil/flutter_screenutil.dart;classAppLottieextendsStatelessWidget{finalStringassetName;finaldouble?width;finaldouble?height;finalbool repeat;constAppLottie({super.key,requiredthis.assetName,this.width,this.height,this.repeattrue,});overrideWidgetbuild(BuildContextcontext){returnLottie.asset(assets/lottie/$assetName,width:width??120.w,height:height??120.h,repeat:repeat,fit:BoxFit.contain,);}}4.4 业务页面接入动画使用1. 列表空数据占位动画闲置列表无数据时替换空白页面展示Lottie空状态动画if(idleController.idleList.isEmpty)Center(child:Column(mainAxisAlignment:MainAxisAlignment.center,children:[AppLottie(assetName:empty.json),SizedBox(height:20.h),Text(暂无闲置物品快去发布吧,style:TextStyle(fontSize:13.sp,color:Colors.grey)),],),)2. 全局加载中动画网络请求、缓存读取时展示加载动画if(idleController.isLoading.value)Center(child:AppLottie(assetName:loading.json,width:80.w,height:80.h))4.5 鸿蒙多端适配细节自动跟随screenutil尺寸大屏平板自动放大动画尺寸小屏手机自适应缩小Lottie原生适配开源鸿蒙渲染引擎无卡顿、无闪退动画比例固定为BoxFit.contain杜绝开发板上拉伸变形。五、版块3url_launcher第三方库 一键拨号与链接跳转5.1 库功能原理url_launcher 封装了系统跳转底层逻辑无需编写原生通道一行代码实现一键拨打电话号码跳转浏览器打开网页打开微信、QQ外部链接适配鸿蒙全设备权限配置后直接调用。5.2 封装工具类全局复用新建lib/utils/launch_util.dartimportpackage:url_launcher/url_launcher.dart;importpackage:fluttertoast/fluttertoast.dart;classLaunchUtil{// 一键拨打电话staticFuturevoidcallPhone(Stringphone)async{finalUriuriUri.parse(tel:$phone);if(awaitcanLaunchUrl(uri)){awaitlaunchUrl(uri);}else{Fluttertoast.showToast(msg:无法发起拨号请检查权限);}}// 跳转浏览器网页staticFuturevoidopenBrowser(Stringurl)async{finalUriuriUri.parse(url);if(awaitcanLaunchUrl(uri)){awaitlaunchUrl(uri,mode:LaunchMode.externalApplication);}else{Fluttertoast.showToast(msg:链接打开失败);}}}5.3 闲置详情页集成一键拨号在闲置详情页联系方式区域新增点击拨号功能GestureDetector(onTap:()LaunchUtil.callPhone(idle.contact),child:Container(padding:EdgeInsets.all(12.w),decoration:BoxDecoration(color:Colors.grey[100],borderRadius:BorderRadius.circular(8.r),),child:Row(children:[Icon(Icons.contact_phone,color:Color(0xFF2E8B57),size:isLargeScreen?20.sp:18.sp),SizedBox(width:8.w),Text(点击一键拨号${idle.contact},style:TextStyle(fontSize:isLargeScreen?14.sp:13.sp,fontWeight:FontWeight.w500,color:Color(0xFF2E8B57),),),],),),)5.4 适配与避坑说明鸿蒙设备必须开启拨号权限否则跳转失败电话号码必须纯数字不能带空格和特殊符号开发板若无通话模块会自动弹出Toast提示不闪退崩溃。六、版块4个人中心页面完整重构完善6.1 页面整体布局结构我的页面分为三大模块顶部头像昵称信息栏中间功能菜单列表我的收藏、消息通知、关于我们、意见反馈底部版本信息、退出登录按钮全程采用GetX管理状态无setState。6.2 完整页面核心代码importpackage:flutter/material.dart;importpackage:get/get.dart;importpackage:flutter_screenutil/flutter_screenutil.dart;importpackage:lottie/lottie.dart;importpackage:zhilian_linli/utils/launch_util.dart;importpackage:zhilian_linli/widget/lottie_widget.dart;classMinePageextendsStatelessWidget{constMinePage({super.key});overrideWidgetbuild(BuildContextcontext){finalisLargeScreenMediaQuery.of(context).size.width600;returnScaffold(backgroundColor:Colors.grey[50],body:SingleChildScrollView(child:Column(children:[// 顶部头像区域Container(width:double.infinity,height:isLargeScreen?220.h:180.h,color:Color(0xFF2E8B57),child:Column(mainAxisAlignment:MainAxisAlignment.center,children:[CircleAvatar(radius:isLargeScreen?45.r:38.r,backgroundImage:AssetImage(assets/images/avatar.png),),SizedBox(height:12.h),Text(邻里用户,style:TextStyle(fontSize:16.sp,color:Colors.white,fontWeight:FontWeight.bold)),SizedBox(height:4.h),Text(智联邻里 · 美好生活共享,style:TextStyle(fontSize:12.sp,color:Colors.white70)),],),),SizedBox(height:20.h),// 功能菜单列表_buildMenuItem(Icons.favorite,我的收藏,(){},isLargeScreen),_buildMenuItem(Icons.notifications,消息通知,(){},isLargeScreen),_buildMenuItem(Icons.info,关于我们,(){LaunchUtil.openBrowser(https://openharmonycrossplatform.csdn.net);},isLargeScreen),_buildMenuItem(Icons.feedback,意见反馈,(){},isLargeScreen),SizedBox(height:30.h),// 退出登录按钮Padding(padding:EdgeInsets.symmetric(horizontal:20.w),child:SizedBox(width:double.infinity,child:ElevatedButton(style:ElevatedButton.styleFrom(padding:EdgeInsets.symmetric(vertical:12.h),backgroundColor:Colors.white,side:BorderSide(color:Colors.redAccent),shape:RoundedRectangleBorder(borderRadius:BorderRadius.circular(8.r)),),onPressed:()_loginOut(),child:Text(退出登录,style:TextStyle(fontSize:14.sp,color:Colors.redAccent)),),),),SizedBox(height:30.h),// 版本信息Text(当前版本V1.0.0 适配开源鸿蒙,style:TextStyle(fontSize:12.sp,color:Colors.grey)),SizedBox(height:20.h),],),),);}// 封装菜单条目Widget_buildMenuItem(IconDataicon,Stringtitle,VoidCallbackonTap,bool isLargeScreen){returnPadding(padding:EdgeInsets.symmetric(horizontal:16.w,vertical:6.h),child:Container(decoration:BoxDecoration(color:Colors.white,borderRadius:BorderRadius.circular(10.r),),child:ListTile(leading:Icon(icon,color:Color(0xFF2E8B57),size:isLargeScreen?24.sp:22.sp),title:Text(title,style:TextStyle(fontSize:isLargeScreen?15.sp:14.sp)),trailing:Icon(Icons.arrow_forward_ios,size:14.sp,color:Colors.grey),onTap:onTap,),),);}// 退出登录弹窗void_loginOut(){Get.dialog(AlertDialog(title:Text(退出登录),content:Text(确定要退出当前账号吗),actions:[TextButton(onPressed:()Get.back(),child:Text(取消)),TextButton(onPressed:(){Get.back();Fluttertoast.showToast(msg:已退出登录);},child:Text(确定,style:TextStyle(color:Colors.red))),],),);}}七、版块5全局UI样式统一与鸿蒙适配优化7.1 统一全局规范主题色统一主色调墨绿色0xFF2E8B57全程所有按钮、图标、文字统一使用圆角统一卡片、按钮、弹窗统一 8~12r 圆角间距统一采用16.w、20.h 为基础内外边距全局保持一致文字字号分级标题1618sp、正文1314sp、辅助文字12sp多设备自动适配。7.2 多端专属适配平板大屏增大头像半径、菜单高度、文字字号加宽弹窗内边距手机端紧凑布局保持视觉舒适不拥挤DAYU200开发板自动适配屏幕比例Lottie动画不拉伸、菜单不溢出。八、版块6今日常见坑点避坑总结Lottie动画不显示检查assets资源是否注册、文件路径是否大小写一致url_launcher拨号失败未配置鸿蒙拨号权限、号码含特殊字符个人中心菜单布局错乱未用ScreenUtil适配固定宽高导致大屏溢出动画循环失效Lottie组件未开启repeat属性跳转链接打不开网址未加https://协议头。九、Day8 开发总结新增lottie、url_launcher两大第三方库实现矢量动画、一键拨号、外部链接跳转全局封装Lottie组件复用在加载、空页面场景提升APP视觉高级感完成个人中心页面全量重构包含头像、菜单、版本、退出登录完整逻辑全局统一UI风格、配色、圆角、间距项目规范化程度大幅提升全部功能基于GetX第三方库开发无原生冗余代码完美适配鸿蒙多设备。十、下期Day9预告Day9 将继续基于第三方库开发集成分享第三方库、完善政务服务页面接口模拟、全局性能优化、打包适配鸿蒙真机签名配置为项目收尾上线做最后准备。