Flutter 模板

Flutter 模板项目 – 一个简单的待办事项列表应用。该模板提供了简单的UI和可扩展的项目结构,超越了简单的计数器示例。

该应用具有基本的登录和注册屏幕、任务列表、任务详情和设置屏幕。它支持多语言和应用内语言切换,以及浅色和深色主题。

它已配置为使用 BLoC 进行状态管理,使用 Chopper 进行网络请求,支持 Navigation 2.0,使用 GetIt 作为服务定位器,并包含 UserManager、Repository 模式、Logger 以及工具和便捷方法。

   
Light theme
    
Dark theme

首次运行

如果您运行 **MOCK** 风格,则项目已配置为使用模拟数据。请参阅下一节以配置运行配置。

在安装了包依赖项后,使用

flutter pub get

运行代码生成工具

flutter pub run build_runner build

运行配置

除了 Flutter 的构建模式(debug、profile、release)之外,
该项目还有 4 种风格/模式用于定义环境

  • mock – 使用模拟值的模拟环境。启动 main_mock.dart
  • dev – 针对开发服务器的开发环境。启动 main_dev.dart
  • staging – 针对预发布服务器的预发布环境。启动 main_staging.dart
  • production – 针对生产服务器的生产环境。启动 main_production.dart

要运行应用程序,请使用以下命令

flutter run --flavor dev -t lib/main_dev.dart

或在 Android Studio 中编辑运行配置

  • 转到“编辑配置…”
  • 输入配置名称:DEV, STAGE, PROD
  • 输入 Dart 入口点:main_dev.dart, main_staging.dart, main_production.dart
  • 输入附加运行参数:–flavor=dev, –flavor=staging, –flavor=production
  • 输入构建风格:dev, staging, production

有关环境特定配置,请参阅 flavor_config.dart

要添加额外的 Flutter 风格,请参阅 官方文档
以及 这篇博文

用作模板

您可以使用“使用此模板”按钮复制此存储库,然后从中开始,或者下载代码并在您的项目中进行使用。
之后,您需要重命名项目并更改应用程序ID和配置。项目中有分布的 TODO 项,它们将帮助您将此项目过渡到您的需求。

Use as template

前往 Wiki 页面查看项目文档。

解决 TODOs

检查项目中散布的 TODO 项,并尽可能多地解决它们。它们将帮助您根据需要配置项目。

在 AndroidStudio 中,您可以在底部标签页中查看所有 TODO 项,如下图所示

TODOs bottom tab in AS

应用配置

要为您的环境配置应用程序,请转到 /config 目录

  • FlavorConfig -> FlavorValues 中添加特定于风格的值
  • FirebaseConfig 中配置 Firebase,很简单
  • network_constants 中配置 API 常量
  • 另请参阅 pre_app_configpost_app_config 以预加载必要的应用程序组件

有关更多信息,请参阅 Wiki 配置页面

幕后

数据管理

Alt text

TasksDataSource

这是访问和操作任务数据的首要入口点。应用程序的其余部分不应直接调用任务的端点或查询缓存数据。所有任务操作都应通过此服务进行。

实现

ApiService

API 通信的抽象,它定义了(所有)端点。
此模板使用 Chopper,一个 http 客户端生成器,来发出网络请求。

JSON 和序列化

JSON 模型使用代码生成库进行序列化。

要进行一次性代码生成,请在终端中运行此命令:flutter pub run build_runner build

对于后续具有冲突输出的代码生成:flutter pub run build_runner build --delete-conflicting-outputs

有关更多信息和生成代码,请参阅 文档

声明式 UI 和状态管理

Flutter 是一个声明式框架。这意味着 Flutter 构建其用户界面以反映应用程序的当前状态。

High level diagram

此模板试图保持不倾向于特定工具,并且尚未使用的 状态管理工具 …现在我们使用 BLoC 了。但是,每个应用程序服务都有一个更新 Stream,客户端可以订阅以接收状态更新。请参阅 UpdatesStream mixin。您可以自行选择使用任何工具,或者根本不使用。
请参阅 TasksRepository 中的 TasksRepository#taskEventUpdatesStreamTasksRepository#taskGroupUpdatesStream

依赖管理

依赖项在 service_locator.dart 文件中管理。本示例使用 GetIt,一个轻量级的服务定位器。此模板中定义了 2 个范围:全局范围和用户范围。有关更多信息,请访问 Wiki 服务定位器页面

Logger

此项目使用自定义 Logger 配置为

  1. 打印到控制台,生产环境除外
  2. 写入文件,生产环境除外 – 对 QA 报告有用
  3. 记录到 Firebase 或向 Firebase 报告非致命错误

优先使用此 Logger 而非 print 语句。

  • Log.d(message) 用于调试消息
  • Log.w(message) 用于警告消息
  • Log.e(object) 用于错误消息(这将同时报告 Firebase 非致命错误)

测试

test 包包含几乎所有组件的单元测试。请务必看一下。

GitHub

查看 Github