|
12 hours ago | |
---|---|---|
.vscode | 2 months ago | |
android | 3 weeks ago | |
assets | 2 months ago | |
ios | 2 months ago | |
lib | 12 hours ago | |
linux | 3 weeks ago | |
macos | 3 weeks ago | |
web | 2 months ago | |
windows | 3 weeks ago | |
.gitignore | 2 months ago | |
.metadata | 2 months ago | |
README.md | 3 weeks ago | |
analysis_options.yaml | 1 month ago | |
build.bat | 3 weeks ago | |
build_flutter_app.dart | 3 weeks ago | |
devtools_options.yaml | 2 months ago | |
pubspec.lock | 20 hours ago | |
pubspec.yaml | 20 hours ago |
README.md
项目名称:现场问题检查系统
核心功能
本系统旨在为现场工作人员提供一个高效的问题记录与管理平台,支持离线操作和数据同步。
1.1 在线/离线登录 需求: 用户能够使用用户名和密码进行登录。如果设备曾成功登录过,即使在离线状态下也能进入应用。
技术实现思路:
在线: 登录成功后,从服务器获取用户身份信息和Token。
离线: 将登录凭证(如Token)安全地存储在本地数据库中,启动时优先检查本地凭证。如果凭证有效,直接进入主界面。
1.2 问题数据离线增删改查 需求: 用户在离线状态下能完整地创建、编辑、删除和查询问题数据。
技术实现思路:
本地数据库: 使用 SQFlite 作为本地数据库。
数据结构: 设计清晰的数据库表结构,包含问题描述、图片路径、创建时间、状态(如“待上传”)等字段。
操作: 所有的增删改查操作都直接在本地数据库上进行。
1.3 问题数据上传/下载 需求: 在有网络连接时,系统能自动或手动将本地数据同步到服务器,并从服务器下载最新数据。
技术实现思路:
上传队列: 在本地数据库中新增一个“待上传”队列。当用户离线进行增删改操作时,将这些操作记录在队列中。
智能同步: 当网络恢复时,按顺序处理上传队列中的任务。使用统一的 HTTP/Dio 拦截器处理身份验证和错误重试。
差异化下载: 从服务器下载数据时,只拉取自上次同步以来有更新的数据,避免全量下载。
- 系统架构:MVVM + 仓库模式 此架构能有效分离关注点,提高代码的可测试性和可维护性。
模型 (Model): 负责数据管理。定义问题数据的实体类,如 Problem。
视图模型 (ViewModel): 作为视图和模型之间的桥梁。
负责业务逻辑、状态管理和数据处理。
通过 GetX 管理 UI 状态,并与视图进行绑定。
使用 GetX 的依赖注入(DI)管理 Repository 实例。
视图 (View): 负责 UI 展示。
使用 Flutter Widgets 构建界面。
通过 GetX 提供的响应式组件(如 Obx),监听 ViewModel 中的状态变化并自动更新 UI。
仓库 (Repository): 负责统一数据源(本地数据库和网络)。
封装数据访问逻辑,向 ViewModel 提供统一的数据接口。
根据网络状态,决定是从 SQFlite 获取数据还是从网络请求。
- 技术栈 Flutter SDK: 跨平台应用开发框架。
GetX:
状态管理: 轻量高效,用于管理 UI 状态。
路由管理: 简化页面跳转。
依赖注入: 方便管理和提供单例服务(如 Repository)。
SQFlite: 本地数据库,用于离线数据存储。
Image Picker: 用于从图库或相机选择图片。
HTTP/Dio: 网络请求库。推荐使用 Dio,因为它提供了更强大的拦截器、表单数据处理和错误处理功能。