Skip to content

openapphub/flutter-template

Repository files navigation

# 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.dartlogin_res_model.dart
      • providers: API 提供者如 login_provider.dart
      • repositories: 业务逻辑仓库如 login_repository.dart
    • global_widgets: 可重用的小部件如 custom_button.dart
    • modules: 功能模块如 homeloginprofile 等。
      • 每个模块包含 bindingcontrollerview
    • 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 层可以显著改善代码结构和可维护性。

如果你需要进一步的解释或对特定场景的建议,请随时告诉我!

About

my flutter template

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published