资讯动态

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

发布时间:2026/9/12 18:55:15 来源:尧图企业网站定制
Flutter for OpenHarmony 智能备忘录笔记APP 实战DAY7笔记收藏功能收藏状态持久化收藏专属分类列表收藏图标标识欢迎加入开源鸿蒙跨平台社区https://openharmonycrossplatform.csdn.net大家好继续Flutter鸿蒙智能备忘录实战连载DAY7DAY6我们完成了顶部搜索栏、关键词模糊检索、分类搜索双重组合筛选笔记查找能力已经完全成型。今天DAY7重点新增笔记收藏核心功能给每条笔记增加收藏状态、本地持久化存储、列表显示收藏图标、新增「收藏」专属分类筛选、支持一键收藏/取消收藏完美升级备忘录收藏收藏夹管理能力。 本期开发目标改造笔记Model实体类新增收藏标识字段isStar完善JSON序列化适配新增字段保证兼容旧数据改造笔记列表Item右上角增加收藏星星图标实现点击星星切换收藏/取消收藏状态收藏状态写入本地存储重启APP状态不丢失顶部分类栏新增「收藏」分类只筛选已收藏笔记兼容原有搜索、分类、筛选逻辑新增收藏功能互不冲突 第一步升级NoteModel新增收藏字段打开note_model.dart给实体类新增isStar布尔字段用来标记是否收藏。finalbool isStar;NoteModel({requiredthis.id,requiredthis.title,requiredthis.content,requiredthis.time,requiredthis.tag,this.isStarfalse,});默认值设为false兼容之前未带收藏字段的旧笔记数据不会出现编译报错、空值异常。 第二步同步更新fromJson与toJson适配新增收藏字段完成序列化和反序列化保证存入本地、读取解析正常无误。factoryNoteModel.fromJson(MapString,dynamicjson){returnNoteModel(id:json[id],title:json[title],content:json[content],time:json[time],tag:json[tag],isStar:json[isStar]??false,);}MapString,dynamictoJson(){return{id:id,title:title,content:content,time:time,tag:tag,isStar:isStar,};}读取时做空值兜底老版本无收藏字段笔记自动默认未收藏适配兼容平滑升级。️ 第三步全局常量新增收藏分类打开标签常量类在分类列表最末尾加入「收藏」分类和其他标签统一管理。staticconstListStringtagList[全部,个人,工作,学习,生活,收藏];自动适配顶部横向标签栏无需额外修改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{ListNoteModellistStorageUtil.getNoteList();int indexlist.indexWhere((e)e.idnoteId);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收藏){tempListoriginList.where((e)e.isStartrue).toList();}elseif(curSelectTag全部){tempListoriginList;}else{tempListoriginList.where((e)e.tagcurSelectTag).toList();}逻辑分支清晰收藏分类独立过滤和普通标签分类互不干扰同时兼容搜索关键词筛选。✏️ 第七步新增/编辑笔记兼容收藏字段在新增和编辑笔记保存逻辑里默认带入isStar状态保持数据结构完整统一。NoteModelnoteNoteModel(id:id,title:title,content:content,time:time,tag:selectTag,isStar:false,);新建笔记默认未收藏后续可手动点击星星标记收藏数据结构完整闭环。✅ DAY7 真机运行实测效果笔记实体成功升级收藏字段兼容历史旧笔记数据无报错每条笔记右上角展示收藏星星图标已收藏黄色高亮显示点击星星可一键切换收藏/取消收藏状态即时生效收藏状态永久存入本地退出重启APP仍保留收藏标记顶部分类栏多出「收藏」选项点击只展示所有已收藏笔记收藏功能与原有分类、搜索、编辑、删除完全兼容互不冲突UI样式圆角、配色、布局完全适配OpenHarmony设计规范。 DAY7 知识点总结 DAY8预告本节核心知识点Flutter实体模型增量升级、新增字段兼容旧数据写法Model序列化适配新增字段空值兜底兼容方案列表自定义布局角标图标摆放、状态动态切换UI根据唯一ID定位条目、局部修改对象属性的实战技巧新增业务分类标签、扩展筛选逻辑做到低侵入式迭代开发。下一节DAY8预告DAY8我们将开发笔记时间排序优化最新笔记置顶展示全局主题深浅色模式切换适配鸿蒙系统深色模式应用设置页面搭建提供主题切换、数据清空入口优化整体性能列表滑动流畅度升级冗余代码清理、项目结构进一步规整

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价