Skip to content

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

Stars

2 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages