[MAUI 项目实战] 笔记App:程序设计

前言

有人说现在记事类app这么多,市场这么卷,为什么还想做一个笔记类App?

一来,去年小孩刚出生,需要一个可以记录喂奶时间的app,发现市面上没有一款app能够在两步内简单记录一个时间,可能iOS可以通过备忘录配合捷径做到快速记录,但是安卓上就没有类似的app。

二是,自去年做的音乐播放器以来,很长一段时间我在博客上的XF,MAUI都是在介绍局部的功能,[MAUI 项目实战]专题也很长没更新了,这次通过笔记类App做一次完整项目,包括如何上架MAUI应用等内容一并更新了。

一开始用MAUI简单做了一个功能,就记录喂奶量 + 喂奶时间 + 提醒。后期逐步做成一个可以动态添加摘要片段的功能。取名为《凡事摘要》。

目前安卓版本已发布打包,并上架腾讯应用商城:凡事摘要,iOS版本的部分页面还有问题需要调试,最近比较忙,我会抽出时间继续完善。在这个时间点我决定把App所有的代码都放在GitHub上,方便大家学习。也欢迎有兴趣的小伙伴一起参与。

框架

使用Abp框架,我之前写过如何 将Abp移植进.NET MAUI项目,本项目也是按照这篇博文完成项目搭建。

这次的项目,主要通过原型和工厂模式建设基于模板的笔记内容。

没有使用过多的跨平台特性,如果需要了解更多MAUI跨平台知识,请参考之前音乐播放器系列文章

定义

  • Note - 笔记,可以成整页打开的内容
  • NoteTemplate - 笔记模板,或称为场景,是可以快速创建笔记的模板
  • NoteSegment - 笔记片段,它是一个笔记(Note)的组成
  • NoteSegmentTemplate - 笔记片段模板,对应场景中可快速创建笔记片段的模板
  • NoteSegmentPayload - 笔记片段负载,存储具体笔记片段的内容
  • NoteSegmentService - 笔记片段服务类,为笔记片段,或笔记片段模板提供增删改等具体的业务逻辑
  • NoteSegmentServiceFactory - 笔记片段服务工厂,为笔记片段服务类提供工厂方法

核心类

INoteSegment:它是笔记片段的抽象类,模板类NoteSegmentTemplate和笔记片段类NoteSegment都实现了INoteSegment

它包含了笔记片段的属性,如标题、颜色、图标、是否隐藏、是否可删除、排序、状态、类型等。同时它关联一个笔记片段负载类INoteSegmentPayload

复制代码
public interface INoteSegment
{
    string Color { get; set; }
    string Desc { get; set; }
    string Icon { get; set; }
    bool IsHidden { get; set; }
    bool IsRemovable { get; set; }
    int Rank { get; set; }
    string Status { get; set; }
    string Title { get; set; }
    string Type { get; set; }

    INoteSegmentPayload GetNoteSegmentPayload(string key);
    INoteSegmentPayload GetOrSetNoteSegmentPayload(string key, INoteSegmentPayload noteSegmentPayload);
    void SetNoteSegmentPayload(INoteSegmentPayload noteSegmentPayload);
}

INoteSegementService:凡事摘要拥有不同的笔记类型,如:时间戳片段,文本片段,文件片段等,App中可以通过添加片段按钮查看所有类型。

这些片段通过片段服务类(NoteSegementService)来描述该如何存储,使用Payload中的数据。

不同的片段类型,通过不同的片段服务类来实现。比如,在时间戳片段中,我们要存储当前时间和计算倒计时,而文件片段中,我们要存储文件路径,文件名,文件大小,文件类型等信息。

这些都是通过片段服务类来实现的。

具体类型如下:

类型 描述
DateTimeSegmentService 时间戳片段服务类
KeyValueSegmentService 数值片段服务类
FileSegmentService 文件片段服务类
TextSegmentService 文本片段服务类
TodoSegmentService 待办片段服务类
WeatherSegmentService 天气片段服务类
LocationSegmentService 地点片段服务类
TimerSegmentService 闹钟片段服务类
ContactSegmentService 联系人片段服务类
VoiceSegmentService 录音片段服务类
MediaSegmentService 媒体片段服务类
ScriptSegmentService 绘制片段服务类
DocumentSegmentService 文件片段服务类

片段服务类包含了一个INoteSegment,它是当前的笔记片段对象

INoteSegmentServiceFactory:

片段服务类的工厂类,除此之外还有一个INoteSegmentTemplateServiceFactory,他们都是根据笔记片段,或者笔记模板中的片段类型创建对应的片段服务类。

用于笔记的片段服务类的工厂类:

复制代码
public interface INoteSegmentServiceFactory: ISingletonDependency
{
    INoteSegmentService GetNoteSegmentService(NoteSegment noteSegment);
}

用于笔记模板的片段服务类的工厂类

复制代码
public interface INoteSegmentTemplateServiceFactory: ISingletonDependency
{
    INoteSegmentService GetNoteSegmentService(NoteSegmentTemplate noteSegmentTemplate);
}

NoteSegmentService作为笔记片段服务的基类,它继承了ViewModelBase,实际上服务基类是各笔记片段视图层的ViewModel,视图界面元素通过绑定服务类中的属性来显示或更新数据。

每一种服务类都对应的一个视图。渲染时,Xaml通过NoteSegmentDataTemplateSelector模板选择器来选择对应的视图。有关界面部分将在另一篇文章介绍。

项目地址

GitHub:MatoProductivity

相关推荐
FinClip1 天前
微信AI小程序“亿元计划”来了!你的APP如何一键接入,抢先变现?
前端·微信小程序·app
大熊猫侯佩3 天前
拒绝“假死”:为何上滑关闭是测试大忌?揭秘 iOS 真实 OOM 触发指南
app·swift·apple
iOS阿玮3 天前
苹果开发者账号申请的痛点,包含新限制说明!
uni-app·app·apple
方白羽4 天前
告别onActivityResult:Android数据回传的三大痛点与终极方案
android·app·客户端
鹏程十八少5 天前
Android 深入剖析Android内存泄漏:ViewPager2与Fragment的生命周期陷阱
android·前端·app
方白羽5 天前
Kotlin object 单例设计:为何选择饿汉式而非懒汉式?
android·app·客户端
Bigger9 天前
Tauri (24)——窗口在隐藏期间自动收起导致了位置漂移
前端·react.js·app
iOS阿玮10 天前
鸿蒙激励的羊毛,你"薅"到了么?
uni-app·app·apple
方白羽11 天前
Android 16 (Target 36) 应用适配指南
android·app·客户端
私人珍藏库11 天前
[Android] 无印2.2视频解析去水印工具,支持多个平台 2025.12.29更新
android·app·安卓·工具·软件·音乐·music