# flutter-template
我的 Flutter 模板项目结构。
## 开始使用
### 生成模型
从 JSON 文件生成模型,使用以下命令:
```sh
get generate model on model with assets/models/user.json --skipProvider
从返回 JSON 的 URL 生成模型,使用:
get generate model on model from "https://api.github.com/users/CpdnCristiano"
创建用于 API 调用的提供者,使用:
get create provider:api on data
生成语言文件,使用:
get generate locales lib/lang
项目结构如下:
.
├── app
│ ├── data
│ │ ├── model
│ │ │ ├── login_req_model.dart
│ │ │ └── login_res_model.dart
│ │ ├── providers
│ │ │ └── login_provider.dart
│ │ └── repositories
│ │ └── login_repository.dart
│ ├── global_widgets
│ │ ├── custom_bottom_nav_item.dart
│ │ ├── custom_button.dart
│ │ └── custom_text_field.dart
│ ├── modules
│ │ ├── home
│ │ │ ├── home_binding.dart
│ │ │ ├── home_controller.dart
│ │ │ └── home_view.dart
│ │ ├── login
│ │ │ ├── login_binding.dart
│ │ │ ├── login_controller.dart
│ │ │ └── login_view.dart
│ │ ├── main
│ │ │ ├── main_binding.dart
│ │ │ ├── main_controller.dart
│ │ │ └── main_view.dart
│ │ ├── profile
│ │ │ ├── profile_binding.dart
│ │ │ ├── profile_controller.dart
│ │ │ └── profile_view.dart
│ │ ├── root
│ │ │ ├── root_binding.dart
│ │ │ ├── root_controller.dart
│ │ │ └── root_view.dart
│ │ └── settings
│ │ ├── settings_binding.dart
│ │ ├── settings_controller.dart
│ │ └── settings_view.dart
│ └── routes
│ ├── app_pages.dart
│ └── app_routes.dart
├── core
│ ├── theme
│ │ ├── app_themes.dart
│ │ ├── color_schemes.dart
│ │ ├── text_styles.dart
│ │ └── theme_service.dart
│ ├── translation
│ │ └── translation_service.dart
│ ├── utils
│ │ └── helpers
│ │ └── date_helper.dart
│ └── values
├── generated
│ └── locales.g.dart
├── infrastructure
│ ├── navigation
│ │ ├── navigation_controller.dart
│ │ └── route_guards
│ │ └── auth_guard.dart
│ └── services
│ ├── analytics
│ ├── api
│ │ ├── api_endpoints.dart
│ │ ├── api_interceptors.dart
│ │ └── api_service.dart
│ ├── auth
│ │ └── auth_service.dart
│ ├── connectivity
│ ├── logger
│ │ └── log_service.dart
│ ├── storage
│ │ ├── storage_keys.dart
│ │ └── storage_service.dart
│ └── ui
│ └── ui_service.dart
├── initializer.dart
├── lang
│ ├── en_US.json
│ └── zh_CN.json
└── main.dart
- app: 包含主要应用程序代码。
- data: 处理数据模型、提供者和仓库。
- model: 数据模型如
login_req_model.dart
和login_res_model.dart
。 - providers: API 提供者如
login_provider.dart
。 - repositories: 业务逻辑仓库如
login_repository.dart
。
- model: 数据模型如
- global_widgets: 可重用的小部件如
custom_button.dart
。 - modules: 功能模块如
home
、login
、profile
等。- 每个模块包含
binding
、controller
和view
。
- 每个模块包含
- routes: 应用程序路由和页面配置。
- data: 处理数据模型、提供者和仓库。
- core: 核心功能如主题、翻译、工具和值。
- theme: 应用程序主题和样式。
- translation: 国际化服务。
- utils: 辅助函数和工具。
- values: 常量值和配置。
- generated: 自动生成的文件如语言翻译。
- infrastructure: 基础设施服务如导航、API、认证等。
- navigation: 导航控制器和路由守卫。
- services: 各种服务如分析、API、认证、连接性、日志、存储和 UI。
- initializer.dart: 应用程序初始化逻辑。
- lang: 语言文件用于国际化。
- main.dart: 应用程序的入口点。
你询问了在 GetX 架构中引入仓库层的好处。以下是一些主要优势:
-
关注点分离:
- Controller: 管理视图状态和用户交互。
- Repository: 处理业务逻辑和数据操作。
- Provider: 管理网络请求或数据源交互。
-
可测试性:
- 将业务逻辑放在 Repository 中使得单元测试变得更加容易。
- 可以轻松模拟(mock)Repository 来测试 Controller。
-
代码复用:
- 多个 Controller 可能需要相同的数据操作逻辑。将这些逻辑放在 Repository 中可以避免代码重复。
-
数据源抽象:
- Repository 可以抽象化数据来源(API、本地数据库、缓存等),使 Controller 不需要关心数据的具体来源。
-
易于维护:
- 当需要更改数据获取逻辑时,只需要修改 Repository,而不需要修改所有使用该数据的 Controller。
-
符合单一职责原则:
- 每个类都有明确的职责,使代码结构更清晰。
对于较大的项目,特别是涉及复杂的数据操作或多个数据源时,引入 Repository 层可以显著改善代码结构和可维护性。
如果你需要进一步的解释或对特定场景的建议,请随时告诉我!