Flutter 架构蓝图
Flutter 架构蓝图是一个介绍 MVVM 架构和项目结构方法来开发 Flutter 应用的项目。
文档
安装
- asdf
- Dart 2.14.4
- Flutter 2.5.3
- npm (用于 git hooks)
环境
iOS
- iOS 13+
Android
- Android 5.1+
- minSdkVersion 22
- targetSdkVersion 30
应用架构
- 基于 MVVM + Repository
代码风格
资源、字体
如果添加了任何资源或字体
- 使用 FlutterGen
模型
如果添加了用于 API 结果的模型
- 使用 Freezed
本地化
如果添加了任何本地化(例如,编辑了 *.arb 文件)
Git 提交消息风格
代码集合
项目设置
| 工作状态 | 类别 | 描述 | 代码 |
|---|---|---|---|
| ✅ | Dart | Dart 版本 | pubspec.yaml |
| ✅ | asdf | asdf | .tool-versions |
| ✅ | Dart | 在开发和生产环境之间切换 | constants.dart, runConfigurations, Makefile |
| ✅ | Dart | Lint / 分析 | analysis_options.yaml |
| ✅ | Android | Kotlin 版本 | build.gradle |
| ✅ | Android | APK 属性 | build.gradle (compileSdkVersion, applicationId, minSdkVersion, targetSdkVersion) |
| ✅ | Android | 在开发和生产环境之间切换 | build.gradle, Flavor 目录, signingConfigs |
| ✅ | iOS | Xcode 版本 | compatibilityVersion |
| ✅ | iOS | Podfile | Podfile |
| ✅ | iOS | 在开发和生产环境之间切换 | xcconfig, Podfile |
| ✅ | Firebase | [Android] 使用 flavor 在开发和生产环境之间切换 google-service.json | 开发和生产 |
| ✅ | Firebase | [iOS] 使用 run script 在开发和生产环境之间切换 GoogleService-Info.plist | copy_google_service.sh, 开发和生产 |
| ✅ | Firebase 认证 | 登录,登出 | auth_data_source_impl.dart |
| ✅ | Firebase Crashlytics | 崩溃报告 | main.dart |
| ✅ | Firebase Performance | 使用 dio_firebase_performance 进行网络监控 | app_dio.dart |
架构
| 工作状态 | 类别 | 描述 | 代码 |
|---|---|---|---|
| ✅ | 基础 | 使用 Riverpod + Hooks + ChangeNotifier + MVVM | news_page.dart, news_view_model.dart, news_repository.dart, news_data_source.dart |
| ✅ | 网络 | 使用 dio 和 Retofit | app_dio.dart, news_data_source.dart |
| ✅ | 数据层 | 使用 Freezed | 模型类 |
| ✅ | 常量 | 定义常量和路由名称 | constants.dart |
| ✅ | 本地化 | 使用 Intl 包在两种语言之间切换 | *.arb |
| ✅ | 错误处理 | 使用 Result 模式 – 一个表示成功或失败的值,并在每种情况下都包含一个关联值。 | result.dart, news_repository_impl.dart, home_page.dart |
UI
| 工作状态 | 类别 | 描述 | 代码 |
|---|---|---|---|
| ✅ | 主题 | 静态地在浅色和深色主题之间切换 | app_theme.dart |
| ✅ | 字体 | 使用 Google 字体 | app_theme.dart |
| ✅ | 过渡 | 使用 Hero 在屏幕之间进行简单动画 | article_item.dart, detail_page.dart |
测试
| 工作状态 | 类别 | 描述 | 代码 |
|---|---|---|---|
| ✅ | API (存储库) | 使用 mocktail | view_mode_test.dart |
| ✅️ | UI | 使用 mocktail | widget_test.dart |
| ✅ | 覆盖率报告 | 在 CI 中将报告发送到 Codecov | codecov.yml, codecov.sh, flutter-ci.yml |
CI
| 工作状态 | 类别 | 描述 | 代码 |
|---|---|---|---|
| ✅ | Git | 用于格式化和分析的 Git hooks | package.json, Makefile |
| ✅ | Git | .gitignore 设置 | .gitignore |
| ✅ | 构建 | 使用 Codemagic | codemagic.yaml |
| ✅ | 构建 | 使用 Bitrise | bitrise.yml |
| ✅ | 构建 | 使用 Github Actions | .github/workflows/flutter-ci.yml |
入门
设置
$ make setup
$ export PATH="$PATH":"$HOME/.pub-cache/bin" # Add your run-commands (.zshrc, .bashrc, etc)
$ make dependencies
$ make build-runner
如何添加资源(图片等)
- 添加资源
- 运行 FlutterGen
如何添加本地化
- 编辑 *.arb 文件。
- 运行 `flutter pub get` 生成
制作 .apk 和 .ipa 文件
Android
$ make build-android-dev
$ make build-android-prd
iOS
$ make build-ios-dev
$ make build-ios-prd
运行应用
$ make run-dev
$ make run-prd
特别鸣谢。
贡献者


