蓝色日记
一个轻量级且高效的 Flutter 待办事项应用。支持英语和韩语。

用法
您可以自己构建和运行此应用程序。您需要先安装 Git、Flutter 和 Android Studio。之后,通过运行以下命令克隆此项目
$ git clone https://github.com/giantsol/Blue-Diary.git
使用 Android Studio 打开克隆的目录,它会提示您运行 `Packages get` 来安装依赖项。请执行此操作。
最后,当您尝试通过按顶部的“运行”按钮来运行项目时,构建将失败,因为此应用程序在 SettingsBloc 文件中使用 Sendgrid 发送电子邮件,而 `SENDGRID_AUTHORIZATION` 常量未被 Git 控制。
您可以通过两种方式解决此问题
- 您可以遵循 Sendgrid 指南,并将您自己的令牌分配给 `SENDGRID_AUTHORIZATION` 常量
// Create lib/Secrets.dart file
const SENDGRID_AUTHORIZATION = 'Bearer <<YOUR API KEY>>';
- 只需将 `SENDGRID_AUTHORIZATION` 替换为 `''` 即可。在这种情况下,电子邮件发送将无法正常工作,但其他应用程序功能将正常工作。在 SettingsBloc 文件中
headers: {
HttpHeaders.authorizationHeader: SENDGRID_AUTHORIZATION,
HttpHeaders.contentTypeHeader: 'application/json',
},
将上面的代码替换为以下内容
headers: {
HttpHeaders.authorizationHeader: '',
HttpHeaders.contentTypeHeader: 'application/json',
},
再次按“运行”按钮,它应该可以成功构建。
如果您仍然无法运行,请留下 反馈!
架构
此应用程序基于 BLoC 模式,并结合了我自己的架构实践。
在 lib 文件夹内,有三个主要文件夹
-
data:此文件夹包含实际从 Preferences、Databases 或 Network(尽管我们这里不使用 Network)更新/获取数据的 Dart 文件。其中大多数文件是 domain/repository 文件夹中声明的 Repository 接口的实现。
-
domain:此文件夹包含该应用程序所谓的“业务逻辑”。它进一步分为三个主要文件夹
- entity:包含纯数据类,如 ToDo 和 Category。
- repository:包含定义更新/获取数据功能的接口。实际实现位于 data 文件夹中。
- usecase:包含每个屏幕的业务逻辑,这些逻辑利用多个存储库来满足每个屏幕的需求。这是 presentation 层可以访问以利用应用程序数据的层。例如,WeekScreen 使用(实际上是 WeekBloc 使用)WeekUsecases 来与底层数据交互,而无需直接接触存储库。
-
presentation:此文件夹包含用于显示 UI 的 `Screen`、`Bloc` 和 `State`。它进一步划分为对应于应用程序中每个屏幕的目录。
- `**Screen`:调用 Widget 的 `build` 方法来构建显示给用户的实际 UI。UI 由 `State` 中的值决定,用户进行的任何交互(例如,单击按钮)都会委派给相应的 `Bloc`。
- `**Bloc`:这基本上是“用户做某事(例如,单击按钮)” -> “使用相应的 usecase 设置/获取数据并更新 `State` 对象中的值” -> “通知 `Screen` `State` 已更改,您必须重建”。
- `**State`:包含 `Screen` 需要绘制 UI 的所有信息。例如,`currentDate`、`todos` 和 `isLocked` 之类的内容。
上述三个目录的划分尽可能遵循 Uncle Bob 的 Clean Architecture 模式。非常欢迎任何尝试。
除了这些目录,还有 `lib` 文件夹内的平级 Dart 文件
- AppColors.dart:只是简单的颜色常量。
- Delegators.dart:当子级需要调用父级的方法时,我使用了委托。然而,随着我对 Flutter 越来越熟悉,我认为 ancestorStateOfType 可以完成这项工作……正在研究它!
- Dependencies.dart:包含单例对象,如存储库和用例。基本上,它允许一种非常简单的注入模式,例如 WeekBloc.dart 中的 `dependencies.weekUsecases`。
- Localization.dart:在此声明本地化文本。
- Main.dart:此应用程序的主入口点。
- Utils.dart:实用工具(显而易见)。
如果您有任何关于我为什么要做某些奇怪的事情的问题,或者有任何关于如何使此应用程序更好的建议,请通过 反馈 联系我。谢谢!
下载
iOS 版本,尚未提供。