当前位置: 首页 > news >正文

Flutter+开源鸿蒙实战|智联邻里Day8 Lottie动画集成+url_launcher跳转拨号+个人中心完善+全局UI统一

Flutter+开源鸿蒙实战|智联邻里Day8 Lottie动画集成+url_launcher跳转拨号+个人中心完善+全局UI统一

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

<!-- Schema.org 结构化数据 --><scripttype="application/ld+json">{"@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开发板全设备。

今天核心开发目标清晰明确:

  1. 引入lottie第三方动画库:集成加载动画、空数据占位动画、页面启动动画,替代传统静态图标,提升APP高级感;
  2. 引入url_launcher第三方库:实现一键拨打电话、跳转浏览器、打开微信链接,适配邻里互助场景联系需求;
  3. 全面完善我的个人中心页面:布局重构、头像展示、功能列表菜单、版本信息、退出登录模拟;
  4. 全局统一UI规范:统一圆角、间距、主题色、文字字号,适配鸿蒙设计风格;
  5. 基于GetX整合所有逻辑:个人中心状态管理、页面跳转、弹窗提示全部沿用已有架构,保持项目代码风格统一;
  6. 深化鸿蒙多端适配:动画尺寸、菜单布局、弹窗比例针对大屏平板和开发板做专属适配,解决显示错位、动画拉伸问题。

依旧保持往期详细写作风格:库作用讲解、集成步骤、逐行代码注释、原理拆解、避坑指南、适配细节、效果测试、当日总结+下期预告,结构和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。

三、版块1:pubspec.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:name="android.permission.CALL_PHONE"/><uses-permissionandroid:name="android.permission.INTERNET"/>

开源鸿蒙设备自动兼容权限申请,无需额外原生代码修改。

四、版块2:Lottie动画第三方库集成与全局使用

4.1 为什么选用Lottie?

原生做加载动画、空状态页面只能用静态图片或者帧动画,体积大、缩放模糊、适配差;
Lottie 由Adobe AE导出JSON动画文件,第三方库直接解析渲染,优势:

  1. 矢量动画任意缩放,鸿蒙手机/平板/开发板无拉伸模糊;
  2. 文件体积极小,不增大安装包;
  3. 支持循环播放、暂停、手动控制动画进度;
  4. 开源免费动画资源丰富,直接下载即可接入项目。

4.2 项目引入Lottie资源文件

  1. 在项目lib同级新建assets/lottie文件夹;
  2. 下载加载动画、空数据动画JSON文件放入目录;
  3. pubspec.yaml 注册资源:
flutter:assets:-assets/lottie/

4.3 封装全局Lottie通用组件

新建lib/widget/lottie_widget.dart,全局封装,所有页面直接复用:

import'package:flutter/material.dart';import'package:lottie/lottie.dart';import'package:flutter_screenutil/flutter_screenutil.dart';classAppLottieextendsStatelessWidget{finalStringassetName;finaldouble?width;finaldouble?height;finalbool repeat;constAppLottie({super.key,requiredthis.assetName,this.width,this.height,this.repeat=true,});@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 鸿蒙多端适配细节

  1. 自动跟随screenutil尺寸,大屏平板自动放大动画尺寸,小屏手机自适应缩小;
  2. Lottie原生适配开源鸿蒙渲染引擎,无卡顿、无闪退;
  3. 动画比例固定为BoxFit.contain,杜绝开发板上拉伸变形。

五、版块3:url_launcher第三方库 一键拨号与链接跳转

5.1 库功能原理

url_launcher 封装了系统跳转底层逻辑,无需编写原生通道,一行代码实现:

  • 一键拨打电话号码
  • 跳转浏览器打开网页
  • 打开微信、QQ外部链接
    适配鸿蒙全设备,权限配置后直接调用。

5.2 封装工具类全局复用

新建lib/utils/launch_util.dart

import'package:url_launcher/url_launcher.dart';import'package:fluttertoast/fluttertoast.dart';classLaunchUtil{// 一键拨打电话staticFuture<void>callPhone(Stringphone)async{finalUriuri=Uri.parse("tel:$phone");if(awaitcanLaunchUrl(uri)){awaitlaunchUrl(uri);}else{Fluttertoast.showToast(msg:"无法发起拨号,请检查权限");}}// 跳转浏览器网页staticFuture<void>openBrowser(Stringurl)async{finalUriuri=Uri.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 适配与避坑说明

  1. 鸿蒙设备必须开启拨号权限,否则跳转失败;
  2. 电话号码必须纯数字,不能带空格和特殊符号;
  3. 开发板若无通话模块,会自动弹出Toast提示,不闪退崩溃。

六、版块4:个人中心页面完整重构完善

6.1 页面整体布局结构

我的页面分为三大模块:

  1. 顶部头像昵称信息栏;
  2. 中间功能菜单列表:我的收藏、消息通知、关于我们、意见反馈;
  3. 底部版本信息、退出登录按钮;
    全程采用GetX管理状态,无setState。

6.2 完整页面核心代码

import'package:flutter/material.dart';import'package:get/get.dart';import'package:flutter_screenutil/flutter_screenutil.dart';import'package:lottie/lottie.dart';import'package:zhilian_linli/utils/launch_util.dart';import'package:zhilian_linli/widget/lottie_widget.dart';classMinePageextendsStatelessWidget{constMinePage({super.key});@overrideWidgetbuild(BuildContextcontext){finalisLargeScreen=MediaQuery.of(context).size.width>=600;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 统一全局规范

  1. 主题色统一:主色调墨绿色0xFF2E8B57,全程所有按钮、图标、文字统一使用;
  2. 圆角统一:卡片、按钮、弹窗统一 8~12r 圆角;
  3. 间距统一:采用16.w、20.h 为基础内外边距,全局保持一致;
  4. 文字字号分级:标题1618sp、正文1314sp、辅助文字12sp,多设备自动适配。

7.2 多端专属适配

  1. 平板大屏:增大头像半径、菜单高度、文字字号,加宽弹窗内边距;
  2. 手机端:紧凑布局,保持视觉舒适不拥挤;
  3. DAYU200开发板:自动适配屏幕比例,Lottie动画不拉伸、菜单不溢出。

八、版块6:今日常见坑点避坑总结

  1. Lottie动画不显示:检查assets资源是否注册、文件路径是否大小写一致;
  2. url_launcher拨号失败:未配置鸿蒙拨号权限、号码含特殊字符;
  3. 个人中心菜单布局错乱:未用ScreenUtil适配,固定宽高导致大屏溢出;
  4. 动画循环失效:Lottie组件未开启repeat属性;
  5. 跳转链接打不开:网址未加https://协议头。

九、Day8 开发总结

  1. 新增lottie、url_launcher两大第三方库,实现矢量动画、一键拨号、外部链接跳转;
  2. 全局封装Lottie组件,复用在加载、空页面场景,提升APP视觉高级感;
  3. 完成个人中心页面全量重构,包含头像、菜单、版本、退出登录完整逻辑;
  4. 全局统一UI风格、配色、圆角、间距,项目规范化程度大幅提升;
  5. 全部功能基于GetX+第三方库开发,无原生冗余代码,完美适配鸿蒙多设备。

十、下期Day9预告

Day9 将继续基于第三方库开发:集成分享第三方库、完善政务服务页面接口模拟、全局性能优化、打包适配鸿蒙真机签名配置,为项目收尾上线做最后准备。

http://www.jsqmd.com/news/748022/

相关文章:

  • AI学术写作技能库:模块化设计赋能精准高效科研创作
  • AI协研系统:大语言模型如何革新科研与医疗
  • 微博图片溯源神器:3秒找到原作者,告别图片版权困扰
  • 2026.5.3:Docker高级:Docker Harbor安装与使用教程
  • 实战指南:基于快马模板部署高可用、可监控的Hermes Agent生产服务
  • 【工业级Python模型调试实战】:覆盖92%线上故障的7类可复现case及自动化检测脚本
  • SPI传感器网络架构与嵌入式通信优化实践
  • Fan Control:让Windows电脑风扇静音又高效的终极解决方案
  • CVPR 2024审稿人视角:除了创新性,你的论文在这些细节上可能已经丢分了
  • 中频电源技术拆解:广东双向直流电源、广东变频电源、广东直流电源、广东直流稳压电源、广东线性电源、广东脉冲电源、开关直流电源选择指南 - 优质品牌商家
  • claude-hud实战应用:在快马平台搭建团队代码协作助手
  • 《一种知识信息数据处理方法及产品》(申请号 00109380.0,公开号 CN 1274895A)专利文件的全文汉英双语对照版本+系统点评
  • 实战应用:基于快马AI生成代码构建可部署的全栈班级宠物园系统
  • 裸土数据集1117张VOC+YOLO格式
  • 小龙虾 OpenClaw 的图片提交问题
  • NVIDIA cuOpt:GPU加速的决策优化引擎实战指南
  • Navicat学生实用指南
  • ARM开发中Makefile的核心应用与优化实践
  • AI助力快速原型:用快马平台十分钟生成你的第一个谷歌浏览器截图扩展
  • 深蓝词库转换:跨平台词库迁移神器,支持30+输入法格式
  • 微信数据恢复指南:5分钟掌握WechatDecrypt解密技巧
  • Sunshine游戏串流服务器:技术架构解析与实战部署指南
  • dify 搭建ai作业批改流
  • 深圳名酒回收技术服务解析:深圳香梅酒业联系电话、拉塔西回收、拉菲回收、木桐回收、深圳红酒回收、玛歌回收、罗曼尼康帝回收选择指南 - 优质品牌商家
  • conda vs pip vs docker:遥感开发环境配置终极抉择,NASA开源项目实测性能差达47%
  • 2026实测:用Gemini 3镜像站理解复杂项目目录,秒级生成专业README
  • 2026年Q2高端雪茄哪家好:长城雪茄、雪茄体验、雪茄侍茄、雪茄养护、雪茄培训、雪茄收藏、非古雪茄、高希霸、中式雪茄选择指南 - 优质品牌商家
  • PhyCritic:多模态物理AI模型评估系统解析
  • 2026 年 5 月 AI 行业全景:普惠化落地加速,聚合工具成高效应用入口
  • 深度学习(15)卷积层