书籍

The Books 是一个用 Flutter 编写的面向编程的应用,用于列出一些书籍。

此应用仅为 iOS 和 Android 平台构建。尽管 Flutter SDK 对包括 Linux、Windows、MacOS 和 Web 在内的所有平台都有很好的支持。

本 README 旨在指导该项目的结构以及一些配置。

设置

本项目使用 Flutter SDK 和 Flutter 版本管理工具(也称为 FVM)。如果您不知道如何安装这些工具,可以在 Flutter – Get StartedFVM – Getting Started 中找到。

在本地安装了这些工具后,您可以运行 fvm flutter pub get 命令来获取依赖项。

架构

基于一些 Clean Architecture 的概念,该架构设计得更简单,不至于过度工程化,从而使事情不至于变得缓慢和困难。

我们有三个主要层:datadomainpresentation

表现层

所有用户通过一些应用交互的入口点。这一层负责渲染小部件和状态管理。

领域层

这一层包含应用程序的业务规则。此外,它还为 presentation 层提供数据,并访问 data 层。

数据层

负责访问外部数据,如外部数据库、本地数据库、API 等。

工具

该项目使用了一些工具,并且了解这些工具也有助于充分理解项目。

资源生成

我们可以使用 flutter_gen 包来生成资源(如字体、图片等)的路径。执行命令 flutter packages pub run build_runner buildassets/ 目录中的文件生成路径。

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,因为:

  • 它简单易用;
  • 它擅长处理异步操作;
  • 它拥有一个庞大的社区。

如果您不知道如何使用 Riverpod,可以查看 介绍

GitHub

查看 Github