书籍
The Books 是一个用 Flutter 编写的面向编程的应用,用于列出一些书籍。
此应用仅为 iOS 和 Android 平台构建。尽管 Flutter SDK 对包括 Linux、Windows、MacOS 和 Web 在内的所有平台都有很好的支持。
本 README 旨在指导该项目的结构以及一些配置。
设置
本项目使用 Flutter SDK 和 Flutter 版本管理工具(也称为 FVM)。如果您不知道如何安装这些工具,可以在 Flutter – Get Started 和 FVM – Getting Started 中找到。
在本地安装了这些工具后,您可以运行 fvm flutter pub get 命令来获取依赖项。
架构
基于一些 Clean Architecture 的概念,该架构设计得更简单,不至于过度工程化,从而使事情不至于变得缓慢和困难。
我们有三个主要层:data、domain 和 presentation。
表现层
所有用户通过一些应用交互的入口点。这一层负责渲染小部件和状态管理。
领域层
这一层包含应用程序的业务规则。此外,它还为 presentation 层提供数据,并访问 data 层。
数据层
负责访问外部数据,如外部数据库、本地数据库、API 等。
工具
该项目使用了一些工具,并且了解这些工具也有助于充分理解项目。
资源生成
我们可以使用 flutter_gen 包来生成资源(如字体、图片等)的路径。执行命令 flutter packages pub run build_runner build 为 assets/ 目录中的文件生成路径。
Golden Tests (黄金测试)
安装了 Alchesmit 包,可以使用 testGoldens() 更轻松地为小部件的外观创建测试。
如果您想深入了解 Flutter 中使用 *Alchesmit* 进行小部件外观测试,可以阅读 Testing the widget’s appearance in Flutter。
集成测试
Flutter 的 integration_test 功能做得很好,但有些功能无法使用标准 API 进行测试,例如一些 *原生交互*。The Books 项目使用了 Patrol 集成测试工具,为在 Flutter 框架中编写集成测试提供了一种简单的方法。
在开始 Books 项目的 *集成测试* 之前,您需要在本地安装 patrol_cli。
在本地安装 patrol_cli 后,您可以通过执行 patrol test --target integration_test/integration_test.dart --verbose --no-label 命令来运行测试。
本地化
Books 项目使用 Flutter SDK 的 flutter_localizations 进行语言国际化。使用 localization 全局变量来访问国际化,如下例所示:
class MyWidget extends StatelessWidget {
const MyWidget({super.key});
@override
Widget build(BuildContext context) {
return AppText.paragraph12(localizations.home)
}
}
Riverpod
在 Flutter 环境中,有很多状态管理工具。但是,Books 项目使用了 Riverpod,因为:
- 它简单易用;
- 它擅长处理异步操作;
- 它拥有一个庞大的社区。




