【flutter for open harmony】第三方库Flutter 鸿蒙版 心情日记 实战指南(适配 1.0.0)✨
【Flutter for OpenHarmony】鸿蒙版心情日记实战指南适配OpenHarmony 1.0.0Flutter实战开源鸿蒙睡眠记录组件Flutter 三方库 cached_network_image 的鸿蒙化适配与实战指南欢迎加入开源鸿蒙跨平台社区 https://openharmonycrossplatform.csdn.net摘要本文基于Flutter for OpenHarmony生态从零实现一款鸿蒙平台专属的心情日记应用完整覆盖心情选择、文字记录、本地存储、历史查看、时间戳核心功能同时详解cached_network_image第三方库的鸿蒙化适配方案提供可直接运行的完整代码助力开发者快速掌握Flutter跨平台开发鸿蒙应用的核心流程。一、前言在OpenHarmony开源鸿蒙生态快速发展的背景下Flutter作为主流跨平台框架已实现对鸿蒙系统的完整适配。心情记录是轻量化工具类应用的典型场景兼具学习价值与实用价值。本文将以心情日记为实战案例从环境搭建、界面实现、功能开发、三方库适配全流程讲解最终产出可直接部署到鸿蒙设备的完整应用。二、核心功能与效果展示2.1 功能特性功能模块详细描述心情表情选择5种常用情绪表情悲伤/烦躁/平静/开心/狂喜一键切换心情文本记录支持多行文本输入记录当日心情详情自动时间戳记录保存时自动绑定当前日期时间本地持久化数据本地存储重启应用不丢失历史记录查看列表展示所有历史心情支持回溯查看2.2 界面效果主界面大尺寸当前心情表情底部表情切换栏文本输入框保存功能一键保存当前记录自动追加到历史列表历史页时间倒序展示所有心情记录清晰直观三、开发环境准备3.1 基础环境Flutter SDK≥3.10.0OpenHarmony SDK1.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 主页面完整代码含存储历史功能importpackage:flutter/material.dart;importpackage:shared_preferences/shared_preferences.dart;importdart:convert;// 心情记录模型classMoodRecord{finalStringemoji;finalStringnote;finalStringtime;MoodRecord({requiredthis.emoji,requiredthis.note,requiredthis.time,});// 转JSONMapString,StringtoJson(){emoji:emoji,note:note,time:time,};// 从JSON解析staticMoodRecordfromJson(MapString,dynamicjson)MoodRecord(emoji:json[emoji],note:json[note],time:json[time],);}classMoodDiaryPageextendsStatefulWidget{constMoodDiaryPage({super.key});overrideStateMoodDiaryPagecreateState()_MoodDiaryPageState();}class_MoodDiaryPageStateextendsStateMoodDiaryPage{// 当前选中心情String_selectedMood;// 输入控制器finalTextEditingController_noteControllerTextEditingController();// 心情表情列表finalListString_moodEmojis[,,,,];// 历史记录ListMoodRecord_historyRecords[];overridevoidinitState(){super.initState();// 初始化加载历史记录_loadHistory();}// 加载本地历史记录Futurevoid_loadHistory()async{finalprefsawaitSharedPreferences.getInstance();finalString?recordsJsonprefs.getString(mood_records);if(recordsJson!null){finalListdynamicjsonListjsonDecode(recordsJson);setState((){_historyRecordsjsonList.map((e)MoodRecord.fromJson(e)).toList();});}}// 保存心情记录Futurevoid_saveMood()async{if(_noteController.text.trim().isEmpty){ScaffoldMessenger.of(context).showSnackBar(constSnackBar(content:Text(请输入心情内容~)),);return;}// 创建记录finalnewRecordMoodRecord(emoji:_selectedMood,note:_noteController.text.trim(),time:DateTime.now().toString().substring(0,19),);// 追加并存储setState((){_historyRecords.insert(0,newRecord);});finalprefsawaitSharedPreferences.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(()_selectedMoodemoji),child:Text(emoji,style:TextStyle(fontSize:36,color:_selectedMoodemoji?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注册页面importpackage:flutter/material.dart;importmood_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常用网络图片缓存库鸿蒙平台适配步骤确保依赖版本cached_network_image: ^3.3.0鸿蒙平台无需额外修改原生代码Flutter层直接调用即可CachedNetworkImage(imageUrl:https://xxx.png,placeholder:(context,url)constCircularProgressIndicator(),errorWidget:(context,url,error)constIcon(Icons.error),)若出现兼容性问题升级flutter_cache_manager至鸿蒙兼容版本。六、运行与部署连接鸿蒙模拟器/真机执行运行命令flutter run-dohos应用成功安装后即可体验完整心情记录功能。七、功能扩展方向增加心情统计图表周/月情绪趋势支持图片上传搭配鸿蒙相册适配云同步功能对接鸿蒙云服务主题切换深色/浅色模式八、总结本文通过心情日记实战完整演示了Flutter开发鸿蒙应用的全流程包含界面搭建、状态管理、本地存储、三方库适配核心知识点。Flutter for OpenHarmony已具备成熟的开发能力开发者可基于现有Flutter技术栈快速开发鸿蒙平台应用大幅降低跨平台开发成本。九、参考资料Flutter官方文档OpenHarmony官方开发指南Flutter for OpenHarmony 开源社区