[![English](https://img.shields.io/badge/Lang-English-blue)](README.en.md)

# Flutter Template

一个从实际项目中提炼的 Flutter 通用快速开发模板，开箱即用，避免重复搭建工程基础设施。

## 目标

- 支持 Android 和 iOS
- 不包含原业务页面、接口、Model、资源、文案和私有配置
- 保留通用工程化能力：路由、主题、网络、缓存、日志、权限、工具类、状态管理和常用 UI 组件
- 默认首页为 demo 页面，可直接替换为新业务首页

## 技术栈

| 类别     | 依赖                 | 用途                       |
| -------- | -------------------- | -------------------------- |
| 状态管理 | flutter_riverpod     | 编译安全、可测试的状态管理 |
| 网络请求 | dio                  | HTTP 客户端，支持拦截器链  |
| 本地缓存 | shared_preferences   | KV 持久化存储              |
| 网络监听 | connectivity_plus    | 实时网络状态监测           |
| 权限申请 | permission_handler   | 运行时权限请求             |
| 屏幕适配 | flutter_screenutil   | 设计稿尺寸适配             |
| 图片加载 | cached_network_image | 网络图片缓存               |
| SVG      | flutter_svg          | SVG 渲染                   |
| 下拉刷新 | pull_to_refresh      | 下拉刷新 / 上拉加载        |
| 加载提示 | flutter_easyloading  | Toast 和 loading           |
| 设备信息 | device_info_plus     | 设备元数据                 |
| 应用信息 | package_info_plus    | 版本号等应用信息           |
| 链接跳转 | url_launcher         | 外部 URL 打开              |
| 代码规范 | flutter_lints        | Dart 推荐 lint 规则        |

## 目录结构

```
lib/
├── app/                          # 应用壳
│   ├── app.dart                  # MaterialApp、主题、国际化、全局配置
│   ├── bootstrap.dart            # 启动初始化
│   ├── config/                   # 多环境配置 (dev/staging/prod)
│   ├── router/                   # Navigator 工具和路由栈跟踪
│   └── theme/                    # 亮色/暗色主题、颜色、间距
├── core/                         # 框架层基础设施
│   ├── cache/                    # SharedPreferences 封装和通用 key
│   ├── extensions/               # BuildContext 扩展
│   ├── logging/                  # 日志工具
│   ├── mixins/                   # 通用 mixin
│   ├── network/                  # Dio 封装、响应包装、异常处理
│   │   └── offline_queue/        # 拦截器、网络监听、离线请求队列
│   ├── permission/               # 权限请求封装
│   └── utils/                    # 日期、表单校验、防抖节流、设备、URL 工具
├── shared/
│   └── widgets/                  # 通用 UI 组件库
├── features/
│   └── demo/                     # 模板能力演示页，可删除
└── main.dart                     # 入口
```

## 内置能力

- **网络层** — ApiClient (Dio) + ApiResponse + ApiException + 请求头拦截器
- **网络监听** — 基于 connectivity_plus 的实时状态追踪
- **离线队列** — 请求入队、持久化、网络恢复自动重放
- **本地缓存** — AppStorage 封装 SharedPreferences
- **状态管理** — Riverpod Provider 体系
- **主题系统** — Material 3 亮/暗双主题 + 屏幕适配
- **UI 组件** — AppButton、AppTextField、AppCard、AppDialog、AppToast、AppEmptyView、AppErrorView、AppLoadingView、AppStatusView、AppAvatar、AppTag、AppSearchBar、AppRefreshList、AppNetworkImage、SafeAreaWrapper
- **工具类** — 日期格式化、表单校验、防抖节流、设备信息、URL 工具
- **工程配置** — flutter_lints、Android/iOS 平台工程

## 快速开始

```bash
cd record-tool
flutter pub get
flutter analyze
flutter test
flutter run
```

```bash
flutter run -d <device-id>
flutter build apk --debug
flutter build ios --debug --no-codesign
```

## 新业务接入指引

1. 修改 `lib/app/config/app_config.dart` 中的环境地址
2. 在 `lib/features/` 下新增业务模块
3. 通过 `core/network/providers/dio_providers.dart` 获取 ApiClient
4. 业务缓存 key 放在业务模块内，`core/cache/storage_keys.dart` 只放真正通用的 key
5. 删除 `features/demo/` 或替换为业务首页
