Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/openapphub/flutter-template
my flutter template
https://github.com/openapphub/flutter-template
Last synced: 20 days ago
JSON representation
my flutter template
- Host: GitHub
- URL: https://github.com/openapphub/flutter-template
- Owner: openapphub
- License: mit
- Created: 2024-08-06T14:44:00.000Z (5 months ago)
- Default Branch: main
- Last Pushed: 2024-08-11T15:42:39.000Z (5 months ago)
- Last Synced: 2024-11-05T15:49:29.993Z (2 months ago)
- Language: Dart
- Size: 315 KB
- Stars: 0
- Watchers: 1
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
```markdown
# flutter-template我的 Flutter 模板项目结构。
## 开始使用
### 生成模型
从 JSON 文件生成模型,使用以下命令:
```sh
get generate model on model with assets/models/user.json --skipProvider
```从返回 JSON 的 URL 生成模型,使用:
```sh
get generate model on model from "https://api.github.com/users/CpdnCristiano"
```### 添加提供者
创建用于 API 调用的提供者,使用:
```sh
get create provider:api on data
```### 国际化
生成语言文件,使用:
```sh
get generate locales lib/lang
```## 项目结构
项目结构如下:
```plaintext
.
├── 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`。
- **global_widgets**: 可重用的小部件如 `custom_button.dart`。
- **modules**: 功能模块如 `home`、`login`、`profile` 等。
- 每个模块包含 `binding`、`controller` 和 `view`。
- **routes**: 应用程序路由和页面配置。
- **core**: 核心功能如主题、翻译、工具和值。
- **theme**: 应用程序主题和样式。
- **translation**: 国际化服务。
- **utils**: 辅助函数和工具。
- **values**: 常量值和配置。
- **generated**: 自动生成的文件如语言翻译。
- **infrastructure**: 基础设施服务如导航、API、认证等。
- **navigation**: 导航控制器和路由守卫。
- **services**: 各种服务如分析、API、认证、连接性、日志、存储和 UI。
- **initializer.dart**: 应用程序初始化逻辑。
- **lang**: 语言文件用于国际化。
- **main.dart**: 应用程序的入口点。## 仓库模式的好处
你询问了在 GetX 架构中引入仓库层的好处。以下是一些主要优势:
1. **关注点分离**:
- **Controller**: 管理视图状态和用户交互。
- **Repository**: 处理业务逻辑和数据操作。
- **Provider**: 管理网络请求或数据源交互。2. **可测试性**:
- 将业务逻辑放在 Repository 中使得单元测试变得更加容易。
- 可以轻松模拟(mock)Repository 来测试 Controller。3. **代码复用**:
- 多个 Controller 可能需要相同的数据操作逻辑。将这些逻辑放在 Repository 中可以避免代码重复。4. **数据源抽象**:
- Repository 可以抽象化数据来源(API、本地数据库、缓存等),使 Controller 不需要关心数据的具体来源。5. **易于维护**:
- 当需要更改数据获取逻辑时,只需要修改 Repository,而不需要修改所有使用该数据的 Controller。6. **符合单一职责原则**:
- 每个类都有明确的职责,使代码结构更清晰。对于较大的项目,特别是涉及复杂的数据操作或多个数据源时,引入 Repository 层可以显著改善代码结构和可维护性。
如果你需要进一步的解释或对特定场景的建议,请随时告诉我!
```