news 2026/5/6 8:09:46

Flutter for OpenHarmony 智能备忘录笔记APP 实战DAY7:笔记收藏功能+收藏状态持久化+收藏专属分类+列表收藏图标标识

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Flutter for OpenHarmony 智能备忘录笔记APP 实战DAY7:笔记收藏功能+收藏状态持久化+收藏专属分类+列表收藏图标标识

Flutter for OpenHarmony 智能备忘录笔记APP 实战DAY7:笔记收藏功能+收藏状态持久化+收藏专属分类+列表收藏图标标识

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

大家好,继续Flutter鸿蒙智能备忘录实战连载DAY7!
DAY6我们完成了顶部搜索栏、关键词模糊检索、分类+搜索双重组合筛选,笔记查找能力已经完全成型。
今天DAY7重点新增笔记收藏核心功能,给每条笔记增加收藏状态、本地持久化存储、列表显示收藏图标、新增「收藏」专属分类筛选、支持一键收藏/取消收藏,完美升级备忘录收藏收藏夹管理能力。

🚀 本期开发目标

  1. 改造笔记Model实体类,新增收藏标识字段isStar
  2. 完善JSON序列化适配新增字段,保证兼容旧数据
  3. 改造笔记列表Item,右上角增加收藏星星图标
  4. 实现点击星星切换收藏/取消收藏状态
  5. 收藏状态写入本地存储,重启APP状态不丢失
  6. 顶部分类栏新增「收藏」分类,只筛选已收藏笔记
  7. 兼容原有搜索、分类、筛选逻辑,新增收藏功能互不冲突

📦 第一步:升级NoteModel新增收藏字段

打开note_model.dart,给实体类新增isStar布尔字段,用来标记是否收藏。

finalbool isStar;NoteModel({requiredthis.id,requiredthis.title,requiredthis.content,requiredthis.time,requiredthis.tag,this.isStar=false,});

默认值设为false,兼容之前未带收藏字段的旧笔记数据,不会出现编译报错、空值异常。

🔄 第二步:同步更新fromJson与toJson

适配新增收藏字段,完成序列化和反序列化,保证存入本地、读取解析正常无误。

factoryNoteModel.fromJson(Map<String,dynamic>json){returnNoteModel(id:json['id'],title:json['title'],content:json['content'],time:json['time'],tag:json['tag'],isStar:json['isStar']??false,);}Map<String,dynamic>toJson(){return{'id':id,'title':title,'content':content,'time':time,'tag':tag,'isStar':isStar,};}

读取时做空值兜底,老版本无收藏字段笔记自动默认未收藏,适配兼容平滑升级。

🏷️ 第三步:全局常量新增收藏分类

打开标签常量类,在分类列表最末尾加入「收藏」分类,和其他标签统一管理。

staticconstList<String>tagList=["全部","个人","工作","学习","生活","收藏"];

自动适配顶部横向标签栏,无需额外修改UI代码,自动多出一栏收藏分类入口。

🧩 第四步:笔记卡片新增右上角收藏图标

修改自定义笔记Item卡片布局,在右上角添加星星图标,实心代表已收藏、空心代表未收藏。

Row(mainAxisAlignment:MainAxisAlignment.spaceBetween,children:[Expanded(child:Column(crossAxisAlignment:CrossAxisAlignment.start,children:[Text(note.title,style:TextStyle(fontSize:16,fontWeight:FontWeight.bold)),SizedBox(height:6),Text(note.content,maxLines:2,overflow:TextOverflow.ellipsis),],)),SizedBox(width:10),Icon(note.isStar?Icons.star:Icons.star_border,color:note.isStar?Colors.amber:Colors.grey,)],)

黄色实心星星标识已收藏,灰色空心为未收藏,视觉区分明显,符合鸿蒙简约UI风格。

⭐ 第五步:点击图标切换收藏状态

给收藏图标添加点击事件,根据笔记ID找到对应条目,反转isStar状态,重新保存到本地。

voidtoggleStar(StringnoteId)async{List<NoteModel>list=StorageUtil.getNoteList();int index=list.indexWhere((e)=>e.id==noteId);if(index==-1)return;// 反转收藏状态list[index]=NoteModel(id:list[index].id,title:list[index].title,content:list[index].content,time:list[index].time,tag:list[index].tag,isStar:!list[index].isStar,);awaitStorageUtil.saveNoteList(list);// 刷新列表filterNoteByTagAndSearch();}

状态反转后立即更新本地存储,并重新执行筛选刷新UI,点击即生效,无延迟。

🔍 第六步:改造筛选逻辑适配收藏分类

修改组合筛选方法,当选中「收藏」标签时,只过滤出isStar为true的笔记。

// 原有分类筛选逻辑基础上新增if(curSelectTag=="收藏"){tempList=originList.where((e)=>e.isStar==true).toList();}elseif(curSelectTag=="全部"){tempList=originList;}else{tempList=originList.where((e)=>e.tag==curSelectTag).toList();}

逻辑分支清晰,收藏分类独立过滤,和普通标签分类互不干扰,同时兼容搜索关键词筛选。

✏️ 第七步:新增/编辑笔记兼容收藏字段

在新增和编辑笔记保存逻辑里,默认带入isStar状态,保持数据结构完整统一。

NoteModelnote=NoteModel(id:id,title:title,content:content,time:time,tag:selectTag,isStar:false,);

新建笔记默认未收藏,后续可手动点击星星标记收藏,数据结构完整闭环。

✅ DAY7 真机运行实测效果

  1. 笔记实体成功升级收藏字段,兼容历史旧笔记数据无报错;
  2. 每条笔记右上角展示收藏星星图标,已收藏黄色高亮显示;
  3. 点击星星可一键切换收藏/取消收藏,状态即时生效;
  4. 收藏状态永久存入本地,退出重启APP仍保留收藏标记;
  5. 顶部分类栏多出「收藏」选项,点击只展示所有已收藏笔记;
  6. 收藏功能与原有分类、搜索、编辑、删除完全兼容,互不冲突;
  7. UI样式圆角、配色、布局完全适配OpenHarmony设计规范。

🎯 DAY7 知识点总结 & DAY8预告

本节核心知识点

  1. Flutter实体模型增量升级、新增字段兼容旧数据写法;
  2. Model序列化适配新增字段,空值兜底兼容方案;
  3. 列表自定义布局角标图标摆放、状态动态切换UI;
  4. 根据唯一ID定位条目、局部修改对象属性的实战技巧;
  5. 新增业务分类标签、扩展筛选逻辑,做到低侵入式迭代开发。

下一节DAY8预告

DAY8我们将开发:

  • 笔记时间排序优化,最新笔记置顶展示
  • 全局主题深浅色模式切换,适配鸿蒙系统深色模式
  • 应用设置页面搭建,提供主题切换、数据清空入口
  • 优化整体性能,列表滑动流畅度升级
  • 冗余代码清理、项目结构进一步规整
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/6 8:05:38

G-Helper:华硕笔记本的轻量化性能管家,告别臃肿控制中心

G-Helper&#xff1a;华硕笔记本的轻量化性能管家&#xff0c;告别臃肿控制中心 【免费下载链接】g-helper Fast, native tool for tuning performance, fans, GPU, battery, and RGB on any Asus laptop or handheld - ROG Zephyrus, Flow, Strix, TUF, Vivobook, Zenbook, Pr…

作者头像 李华
网站建设 2026/5/6 8:02:50

突破系统限制:开源工具实现动态光标自定义与无限增强

1. 项目概述&#xff1a;一个能无限增强你光标体验的“神器”如果你和我一样&#xff0c;每天有超过8小时的时间是和电脑屏幕上的光标打交道&#xff0c;那你一定对那个千篇一律的白色箭头或细竖线感到过厌倦。效率、个性化、甚至是那么一点点的“酷”&#xff0c;都成了我们这…

作者头像 李华
网站建设 2026/5/6 8:00:31

华硕笔记本性能调优新方案:告别臃肿系统,拥抱极致轻量化

华硕笔记本性能调优新方案&#xff1a;告别臃肿系统&#xff0c;拥抱极致轻量化 【免费下载链接】g-helper Fast, native tool for tuning performance, fans, GPU, battery, and RGB on any Asus laptop or handheld - ROG Zephyrus, Flow, Strix, TUF, Vivobook, Zenbook, Pr…

作者头像 李华
网站建设 2026/5/6 7:57:40

让老旧电视重获新生:MyTV-Android原生电视直播应用深度解析

让老旧电视重获新生&#xff1a;MyTV-Android原生电视直播应用深度解析 【免费下载链接】mytv-android 使用Android原生开发的视频播放软件 项目地址: https://gitcode.com/gh_mirrors/my/mytv-android 你是否还在为家中老旧智能电视无法流畅观看直播节目而烦恼&#xf…

作者头像 李华
网站建设 2026/5/6 7:56:29

SAP-CPI-SF问题收集005 继承成本中心集成增强方案

导读成本中心继承:在SAP组织架构中&#xff0c;部门和财务的成本中心是有关联关系&#xff0c;但是现实生活中&#xff0c;部门也存在大部门与小部门&#xff0c;所以有可能多个部门对于同一个成本中心&#xff0c;为减少成本中心与组织维护的工作量&#xff0c;系统提供一个成…

作者头像 李华
网站建设 2026/5/6 7:54:27

ai赋能开发:让快马智能诊断与解决anaconda环境依赖冲突,告别配置噩梦

作为一名经常和Python环境打交道的开发者&#xff0c;我深刻理解Anaconda环境配置的痛点。特别是当项目依赖复杂时&#xff0c;各种包版本冲突简直让人抓狂。最近尝试用AI辅助解决这个问题&#xff0c;发现效果出奇地好&#xff0c;今天就把这套方法分享给大家。 环境诊断的智能…

作者头像 李华