Flutter 模板
Flutter 模板项目 – 一个简单的待办事项列表应用。该模板提供了简单的UI和可扩展的项目结构,超越了简单的计数器示例。
该应用具有基本的登录和注册屏幕、任务列表、任务详情和设置屏幕。它支持多语言和应用内语言切换,以及浅色和深色主题。
它已配置为使用 BLoC 进行状态管理,使用 Chopper 进行网络请求,支持 Navigation 2.0,使用 GetIt 作为服务定位器,并包含 UserManager、Repository 模式、Logger 以及工具和便捷方法。
首次运行
如果您运行 **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 项,它们将帮助您将此项目过渡到您的需求。
前往 Wiki 页面查看项目文档。
解决 TODOs
检查项目中散布的 TODO 项,并尽可能多地解决它们。它们将帮助您根据需要配置项目。
在 AndroidStudio 中,您可以在底部标签页中查看所有 TODO 项,如下图所示
应用配置
要为您的环境配置应用程序,请转到 /config 目录
- 在
FlavorConfig->FlavorValues中添加特定于风格的值 - 在
FirebaseConfig中配置 Firebase,很简单 - 在
network_constants中配置 API 常量 - 另请参阅
pre_app_config和post_app_config以预加载必要的应用程序组件
有关更多信息,请参阅 Wiki 配置页面。
幕后
数据管理
TasksDataSource
这是访问和操作任务数据的首要入口点。应用程序的其余部分不应直接调用任务的端点或查询缓存数据。所有任务操作都应通过此服务进行。
实现
- TasksRemoteDataSource – 使用 ApiService 联系远程服务器;
- TasksCacheDataSource – 使用内存缓存检索任务;
- TasksRepository – 同时使用 _TasksRemoteDataSource_ 和 _TasksCacheDataSource_ 在可用时获取缓存数据;提供更新订阅;
ApiService
API 通信的抽象,它定义了(所有)端点。
此模板使用 Chopper,一个 http 客户端生成器,来发出网络请求。
- UserApiService – 用户相关的端点
- UserAuthApiService – 用户重新认证端点
- TasksApiService – 任务、任务组和任务操作端点
JSON 和序列化
JSON 模型使用代码生成库进行序列化。
要进行一次性代码生成,请在终端中运行此命令:flutter pub run build_runner build
对于后续具有冲突输出的代码生成:flutter pub run build_runner build --delete-conflicting-outputs
有关更多信息和生成代码,请参阅 文档。
声明式 UI 和状态管理
Flutter 是一个声明式框架。这意味着 Flutter 构建其用户界面以反映应用程序的当前状态。
此模板试图保持不倾向于特定工具,并且尚未使用的 状态管理工具。 …现在我们使用 BLoC 了。但是,每个应用程序服务都有一个更新 Stream,客户端可以订阅以接收状态更新。请参阅 UpdatesStream mixin。您可以自行选择使用任何工具,或者根本不使用。
请参阅 TasksRepository 中的 TasksRepository#taskEventUpdatesStream 和 TasksRepository#taskGroupUpdatesStream。
依赖管理
依赖项在 service_locator.dart 文件中管理。本示例使用 GetIt,一个轻量级的服务定位器。此模板中定义了 2 个范围:全局范围和用户范围。有关更多信息,请访问 Wiki 服务定位器页面。
Logger
此项目使用自定义 Logger 配置为
- 打印到控制台,生产环境除外
- 写入文件,生产环境除外 – 对 QA 报告有用
- 记录到 Firebase 或向 Firebase 报告非致命错误
优先使用此 Logger 而非 print 语句。
Log.d(message)用于调试消息Log.w(message)用于警告消息Log.e(object)用于错误消息(这将同时报告 Firebase 非致命错误)
测试
test 包包含几乎所有组件的单元测试。请务必看一下。





