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

【flutter for open harmony】第三方库Flutter 鸿蒙版 心情日记 实战指南(适配 1.0.0)✨

【Flutter for OpenHarmony】鸿蒙版心情日记实战指南(适配OpenHarmony 1.0.0)

Flutter实战:开源鸿蒙睡眠记录组件
Flutter 三方库 cached_network_image 的鸿蒙化适配与实战指南
欢迎加入开源鸿蒙跨平台社区: https://openharmonycrossplatform.csdn.net

摘要

本文基于Flutter for OpenHarmony生态,从零实现一款鸿蒙平台专属的心情日记应用,完整覆盖心情选择、文字记录、本地存储、历史查看、时间戳核心功能,同时详解cached_network_image第三方库的鸿蒙化适配方案,提供可直接运行的完整代码,助力开发者快速掌握Flutter跨平台开发鸿蒙应用的核心流程。


一、前言

在OpenHarmony(开源鸿蒙)生态快速发展的背景下,Flutter作为主流跨平台框架,已实现对鸿蒙系统的完整适配。心情记录是轻量化工具类应用的典型场景,兼具学习价值与实用价值。

本文将以心情日记为实战案例,从环境搭建、界面实现、功能开发、三方库适配全流程讲解,最终产出可直接部署到鸿蒙设备的完整应用。


二、核心功能与效果展示

2.1 功能特性

功能模块详细描述
心情表情选择5种常用情绪表情(悲伤/烦躁/平静/开心/狂喜)一键切换
心情文本记录支持多行文本输入,记录当日心情详情
自动时间戳记录保存时自动绑定当前日期+时间
本地持久化数据本地存储,重启应用不丢失
历史记录查看列表展示所有历史心情,支持回溯查看

2.2 界面效果

  1. 主界面:大尺寸当前心情表情+底部表情切换栏+文本输入框
  2. 保存功能:一键保存当前记录,自动追加到历史列表
  3. 历史页:时间倒序展示所有心情记录,清晰直观

三、开发环境准备

3.1 基础环境

  • Flutter SDK:≥3.10.0
  • OpenHarmony SDK:1.0.0
  • 开发工具:Android Studio / VS Code
  • 目标设备:鸿蒙模拟器/真机

3.2 核心依赖

pubspec.yaml添加本地存储依赖(鸿蒙适配版):

dependencies:flutter:sdk:fluttershared_preferences:^2.2.2# 本地存储(鸿蒙兼容)cached_network_image:^3.3.0# 网络图片库(本文适配鸿蒙)

执行依赖安装:

flutter pub get

四、完整代码实现

4.1 主页面完整代码(含存储+历史功能)

import'package:flutter/material.dart';import'package:shared_preferences/shared_preferences.dart';import'dart:convert';// 心情记录模型classMoodRecord{finalStringemoji;finalStringnote;finalStringtime;MoodRecord({requiredthis.emoji,requiredthis.note,requiredthis.time,});// 转JSONMap<String,String>toJson()=>{'emoji':emoji,'note':note,'time':time,};// 从JSON解析staticMoodRecordfromJson(Map<String,dynamic>json)=>MoodRecord(emoji:json['emoji'],note:json['note'],time:json['time'],);}classMoodDiaryPageextendsStatefulWidget{constMoodDiaryPage({super.key});@overrideState<MoodDiaryPage>createState()=>_MoodDiaryPageState();}class_MoodDiaryPageStateextendsState<MoodDiaryPage>{// 当前选中心情String_selectedMood='😊';// 输入控制器finalTextEditingController_noteController=TextEditingController();// 心情表情列表finalList<String>_moodEmojis=['😢','😕','😐','😊','😄'];// 历史记录List<MoodRecord>_historyRecords=[];@overridevoidinitState(){super.initState();// 初始化加载历史记录_loadHistory();}// 加载本地历史记录Future<void>_loadHistory()async{finalprefs=awaitSharedPreferences.getInstance();finalString?recordsJson=prefs.getString('mood_records');if(recordsJson!=null){finalList<dynamic>jsonList=jsonDecode(recordsJson);setState((){_historyRecords=jsonList.map((e)=>MoodRecord.fromJson(e)).toList();});}}// 保存心情记录Future<void>_saveMood()async{if(_noteController.text.trim().isEmpty){ScaffoldMessenger.of(context).showSnackBar(constSnackBar(content:Text('请输入心情内容~')),);return;}// 创建记录finalnewRecord=MoodRecord(emoji:_selectedMood,note:_noteController.text.trim(),time:DateTime.now().toString().substring(0,19),);// 追加并存储setState((){_historyRecords.insert(0,newRecord);});finalprefs=awaitSharedPreferences.getInstance();awaitprefs.setString('mood_records',jsonEncode(_historyRecords.map((e)=>e.toJson()).toList()),);// 清空输入框_noteController.clear();ScaffoldMessenger.of(context).showSnackBar(constSnackBar(content:Text('心情保存成功!')),);}@overrideWidgetbuild(BuildContextcontext){returnScaffold(appBar:AppBar(title:constText('鸿蒙心情日记'),centerTitle:true,),body:SingleChildScrollView(padding:constEdgeInsets.all(16),child:Column(children:[// 当前选中心情Text(_selectedMood,style:constTextStyle(fontSize:100),),constSizedBox(height:20),// 心情选择栏Row(mainAxisAlignment:MainAxisAlignment.spaceEvenly,children:_moodEmojis.map((emoji)=>GestureDetector(onTap:()=>setState(()=>_selectedMood=emoji),child:Text(emoji,style:TextStyle(fontSize:36,color:_selectedMood==emoji?Colors.blue:Colors.grey,),),),).toList(),),constSizedBox(height:30),// 心情输入框TextField(controller:_noteController,maxLines:5,decoration:constInputDecoration(hintText:'记录今天的心情...',border:OutlineInputBorder(),),),constSizedBox(height:20),// 保存按钮SizedBox(width:double.infinity,child:ElevatedButton(onPressed:_saveMood,style:ElevatedButton.styleFrom(padding:constEdgeInsets.symmetric(vertical:14),),child:constText('保存心情',style:TextStyle(fontSize:16),),),),constSizedBox(height:30),// 历史记录标题constText('历史心情记录',style:TextStyle(fontSize:18,fontWeight:FontWeight.bold),),constSizedBox(height:10),// 历史记录列表..._historyRecords.map((record){returnCard(margin:constEdgeInsets.only(bottom:8),child:Padding(padding:constEdgeInsets.all(12),child:Column(crossAxisAlignment:CrossAxisAlignment.start,children:[Row(children:[Text(record.emoji,style:constTextStyle(fontSize:24)),constSizedBox(width:10),Text(record.time),],),constSizedBox(height:6),Text(record.note),],),),);}),],),),);}}

4.2 入口文件配置

main.dart注册页面:

import'package:flutter/material.dart';import'mood_diary_page.dart';voidmain(){runApp(constMyApp());}classMyAppextendsStatelessWidget{constMyApp({super.key});@overrideWidgetbuild(BuildContextcontext){returnMaterialApp(title:'鸿蒙心情日记',theme:ThemeData(primarySwatch:Colors.blue),home:constMoodDiaryPage(),);}}

五、cached_network_image 鸿蒙化适配指南

cached_network_image是Flutter常用网络图片缓存库,鸿蒙平台适配步骤:

  1. 确保依赖版本:cached_network_image: ^3.3.0
  2. 鸿蒙平台无需额外修改原生代码,Flutter层直接调用即可:
CachedNetworkImage(imageUrl:'https://xxx.png',placeholder:(context,url)=>constCircularProgressIndicator(),errorWidget:(context,url,error)=>constIcon(Icons.error),)
  1. 若出现兼容性问题,升级flutter_cache_manager至鸿蒙兼容版本。

六、运行与部署

  1. 连接鸿蒙模拟器/真机
  2. 执行运行命令:
flutter run-dohos
  1. 应用成功安装后,即可体验完整心情记录功能。

七、功能扩展方向

  1. 增加心情统计图表(周/月情绪趋势)
  2. 支持图片上传(搭配鸿蒙相册适配)
  3. 云同步功能(对接鸿蒙云服务)
  4. 主题切换(深色/浅色模式)

八、总结

本文通过心情日记实战,完整演示了Flutter开发鸿蒙应用的全流程,包含界面搭建、状态管理、本地存储、三方库适配核心知识点。

Flutter for OpenHarmony已具备成熟的开发能力,开发者可基于现有Flutter技术栈,快速开发鸿蒙平台应用,大幅降低跨平台开发成本。


九、参考资料

  1. Flutter官方文档
  2. OpenHarmony官方开发指南
  3. Flutter for OpenHarmony 开源社区
http://www.jsqmd.com/news/825944/

相关文章:

  • 为 OpenClaw 智能体框架配置 Taotoken 作为模型供应商的要点
  • DeepSeek在MMLU基准测试中狂揽86.7分:这3个被99%开发者忽略的推理优化技巧,立竿见影!
  • 基于Gemini CLI的深度研究工具:命令行AI助手的架构与实战
  • 【DeepSeek Chat功能测试全链路指南】:20年AI工程师亲测的7大核心场景验证法
  • 训练篇第6节:NCCL(三)——性能调优:NVLink vs. PCIe vs. InfiniBand
  • Qt 主窗口全家桶:菜单栏、工具栏、状态栏与对话框完全指南
  • GaN飞跨电容三电平逆变器调制与均压【附代码】
  • 概率计算与RRAM硬件在分子对接中的应用与优势
  • 服务器入侵应急处置:痕迹清理、漏洞封堵与事后加固全流程
  • 线程相关知识
  • 12 - AI Native“基因测序法”:你的产品是“数字生命”还是“行尸走肉”?
  • 训练篇第7节:混合并行实战——以Megatron-LM和DeepSpeed为例剖析3D并行
  • ContextGit:为代码库注入结构化上下文,提升代码可追溯性与团队协作效率
  • 绝缘子缺陷检测数据集2148张VOC+YOLO格式
  • 中小企业云上安全从零搭建:低成本防护架构落地指南
  • Arm Ethos-U85 NPU架构解析与边缘AI优化实践
  • 使用go-ios运行fastbot
  • DNS优化实战:从运营商DNS到HttpDNS的进化之路
  • MySQL 登录报错排查:1045、2003 错误,新手快速解决
  • 软件交付质量与风险管理的关键指标与实践
  • 汽车电源管理系统:同步降压转换器与LDO技术解析
  • Flutter for OpenHarmony列表刷新加载实战
  • 从 LLM 到 Agent:Harness Engineering 的角色演变
  • 矢量图转换神器:5分钟将普通图片升级为无限放大的矢量图
  • (2)达梦数据库--SQl基础实践
  • 交货期约束平行机在线调度优化【附代码】
  • 05手写画布实现-鸿蒙PC端Electron开发
  • 2026年评价高的双法兰伸缩接头/双法兰限位伸缩接头深度厂家推荐 - 行业平台推荐
  • 数据库缓冲池优化:数组翻译技术的原理与实践
  • TestDisk与PhotoRec:免费开源的数据恢复双雄终极指南