# oiocns-flutter **Repository Path**: orginone/oiocns-flutter ## Basic Information - **Project Name**: oiocns-flutter - **Description**: 奥集能前端flutter版本 - **Primary Language**: Unknown - **License**: MulanPSL-2.0 - **Default Branch**: master - **Homepage**: https://ocia.orginone.cn - **GVP Project**: No ## Statistics - **Stars**: 34 - **Forks**: 7 - **Created**: 2024-04-03 - **Last Updated**: 2026-07-06 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 奥集能移动端 ![Image text](https://user-images.githubusercontent.com/8328012/201800690-9f5e989e-4ed3-4817-85b9-b594ac89fd31.png) ## 架构简介 面向下一代互联网发展趋势,基于动态演化的复杂系统多主体建模方法,以所有权作为第一优先级,运用零信任安全机制,按自组织分形理念提炼和抽象"沟通、办事、门户、数据、关系"等通用本体,为b端和c端融合的全场景业务的提供新一代分布式应用架构和数据网络操作系统。 ## 基本功能 ### 奥集能 奥集能(Orginone 发音[ˈɔːdʒɪnʌn])个人和组织数字化一站式解决方案! 奥:奥妙,莫名其妙。集,聚集,无中生有。能,赋能,点石成金。 ### 门户 按权限自定义工作台、动态信息,新闻资讯,交易商城,监控大屏,驾驶舱等各类页面。以用户为中心,汇聚各类数据和信息。 ### 沟通 为个人和组织提供可靠、安全、私密的即时沟通工具,好友会话隐私保护作为第一优先级,同事和组织等工作会话单位数据权利归属优先。 ### 办事 满足个人、组织和跨组织协同办事需求,适应各类业务流程场景,支持发起、待办、已办、抄送、归档等不同状态流程类业务审核审批和查询。 ### 数据 用户对数据标准和存储方式拥有绝对控制权,自主选择存储资源,自定义数据标准、业务模型和管理流程,无代码配置应用,便捷迁移外部数据,支持通用文件系统管理功能。 ### 关系 支持个人、组织以及智能体的关系的建立,好友和成员的管理,家庭、群组、单位、部门、集团等各类组织形态的构建,快速将工作和业务关系数字化、在线化,支持对人员和智能体的灵活的权限、角色和岗位管理等不同颗粒度的访问控制功能。 ### 本存储是奥集能移动端基于dart和flutter框架的实现。 - PC端体验地址:https://orginone.cn - 注册账号登录后可以申请加入一起研究群:research,协同研发群:asset_devops # 项目目录 ``` ├── assets // 静态资源 ├── android // android 原生实现 ├── ios // ios 原生实现 ├── web // web 原生实现 ├── linux // linux 原生实现 ├── macos // macos 原生实现 ├── windows // windows 原生实现 └── lib // flutter 实现 ├── config // 配置 ├── components // 项目组件 │ ├── GlobalErrorBoundary // 全局错误边界组件 │ └── StandardComponents // 标准组件库 ├── dart // 前端内核数据层代码 │ ├── base // 基础设施 │ │ ├── api // API 封装 │ │ ├── common // 通用工具 │ │ │ ├── api_result.dart // 统一API响应封装 │ │ │ └── network_error_handler.dart // 统一错误处理 │ │ ├── model // 数据模型 │ │ ├── schema // 数据结构 │ │ └── storages // 存储封装 │ ├── core // 领域逻辑 │ │ ├── provider // 状态管理 │ │ ├── repository // Repository 数据访问层 │ │ │ ├── activity_repository.dart // 动态数据访问 │ │ │ ├── cache_repository.dart // 缓存管理 │ │ │ ├── chat_repository.dart // 会话数据访问 │ │ │ ├── setting_repository.dart // 设置数据访问 │ │ │ ├── user_repository.dart // 用户数据访问 │ │ │ └── work_repository.dart // 门户数据访问 │ │ └── target // 目标实体 │ └── controller // 全局编排 ├── pages // 页面模块目录 UI层 ├── chat // 沟通 ├── home // 门户 ├── login // 登录 ├── setting // 关系 ├── store // 数据 └── work // 办事 ├── utils // 工具库 ├── channel // 钱包频道 ├── common // 第三方通用服务 ├── env.dart // 环境参数 ├── main.dart // 主入口 ├── global.dart // 入口初始化共用逻辑 ├── main_dev.dart // 测试环境入口初始化处理 └── main_prod.dart // 正式环境环境入口初始化处理 ├── .gitignore // 忽视文件 ├── .metadata // 元数据 ├── pubspec.yaml // 包依赖配置 ├── pubspec.lock // 包依赖配置版本锁定目录 ├── test // 单元测试目录 ├── README.md // 奥技能项目介绍 ├── build // 构建打包生成目录 ├── build_apk_dev.sh // 测试环境打包可执行脚本文件 ├── build_apk_prod.sh // 正式环境打包可执行脚本文件 ├── auto └── analysis_options.yaml ``` ## 架构优化说明 ### Repository Pattern 数据访问层 项目采用 Repository Pattern 统一数据访问层,将数据获取逻辑从业务组件中分离出来,提高代码的可测试性和可维护性。 **核心 Repository**: | Repository | 功能描述 | |-----------|----------| | `ActivityRepository` | 动态数据统一访问,支持个人/群组动态加载、缓存管理 | | `WorkRepository` | 门户首页数据统一访问,支持空间内容加载、筛选 | | `ChatRepository` | 会话数据统一访问,支持会话加载、分类、未读计数 | | `UserRepository` | 用户数据统一访问,支持用户信息、空间管理 | | `SettingRepository` | 设置数据统一访问,管理主题、通知等配置 | | `CacheRepository` | 统一缓存管理,支持内存缓存、持久化缓存、过期策略 | **使用示例**: ```dart // 获取动态数据 final activities = await ActivityRepository.instance.loadAllActivities(); // 切换空间 final spaces = await UserRepository.instance.loadUserSpaces(); await UserRepository.instance.switchSpace(spaces[0]); // 使用缓存 final data = await CacheRepository.instance.getOrLoad( 'key', () => fetchData(), options: const CacheOptions(maxAge: Duration(minutes: 5)), ); ``` ### 全局错误边界 项目实现了 GlobalErrorBoundary 全局错误边界组件,用于捕获应用层未处理的异常,防止应用崩溃,并提供友好的错误提示界面。 **特性**: - 捕获 Flutter 运行时错误 - 用户友好的错误提示界面 - 支持错误详情查看 - 提供重试功能 - 分类错误处理(网络错误、认证错误、服务器错误等) **集成方式**: ```dart // main.dart return GlobalErrorBoundary( child: MaterialApp( // ... ), ); ``` ### 统一组件开发规范 项目定义了 StandardComponents 标准组件库,提供统一的状态管理和 UI 组件规范。 **核心组件**: | 组件 | 功能描述 | |------|----------| | `BaseState` | 标准状态基类,提供 setLoading/setSuccess/setEmpty/setError 方法 | | `LoadingState` | 标准化加载状态枚举(initial/loading/success/empty/error) | | `StandardLoadingWidget` | 标准加载组件 | | `StandardEmptyWidget` | 标准空状态组件 | | `StandardErrorWidget` | 标准错误组件,支持重试 | **使用示例**: ```dart class MyWidget extends BaseStatefulWidget { @override void loadData() async { setLoading(); try { final data = await fetchData(); setSuccess(); } catch (e) { setError(e); } } @override Widget buildContent(BuildContext context) { return buildBody(context); } } ``` ### 统一 API 响应和错误处理 项目实现了完整的 API 响应和错误处理体系。 **ApiResult 统一响应**: ```dart enum ResultStatus { success, // 成功 failure, // 失败 networkError, // 网络错误 authError, // 认证错误 serverError, // 服务器错误 validationError, // 验证错误 unknown, // 未知错误 } // 使用示例 final result = await ApiHandler.execute(() => apiCall()); result.when( success: (data) => print('成功: $data'), failure: (msg, error) => print('失败: $msg'), ); ``` **ErrorHandler 错误处理**: ```dart // 统一错误处理 ErrorHandler.handleError( exception, customMessage: '自定义错误提示', severity: ErrorSeverity.high, ); // 带重试的请求 await RetryHandler.execute( () => apiCall(), config: RetryConfig.defaultConfig, ); ``` ### 统一缓存策略 项目实现了双层缓存机制,提高数据访问性能。 **特性**: - 内存缓存 + 持久化缓存双重保障 - 自动过期清理(定时器) - LRU 淘汰策略 - 便捷的 getOrLoad 方法 - 缓存统计功能 ### git 规范 1. 命名要求: 1.1 统一前缀-姓名缩写-描述及日期。如 增加 XX 功能 `feature-lw-addmain1101` 1.2 分支名称前缀如下 - common:调整通用组件、通用功能、通用数据接口、通用样式等 - feature:新功能 - fix:bug 修复 - hotfix:线上紧急修复 - perf:性能优化 - other:配置信息调整等非上面 5 种的改动改动 1. 迭代要求: 2.1 `main` 分支为主干,所有迭代基于此分支进行获取 2.2 所有新功能迭代,问题修复等,需要进行发布,需要提交 `PR` 请求到 `main` 分支。 2.3 待系统上线后会拉出 `test` ,后续迭代与 `ISSUE`中问题进行关联的模式 ### 依赖环境 目前官方 Flutter 版本迭代较快,其中引用的一些库在新版本中并没有适配,,建议 Flutter 版本与以下相同,后期考虑兼容升级。 1. Flutter 3.27.1 2. Dart 3.5.0 3. DevTools 2.20.1 4. gradle plugin 7.4.2 5. gradle 8.0 6. jdk 11 Flutter 安装过程可以参考 [Flutter 中文开发者网站 - Flutter](https://flutter.cn/docs) ### 参与贡献 1. fork 项目 1. 首先,找到 fork 按钮,点击以后,你的存储内就会出现一个一模一样的项目。 2. 项目开发 1. 按照奥集能项目的编码规则,对代码进行开发。 3. 跟上主项目的步伐 1. 在你开发的过程中,主项目的代码也可能在更新。此时就需要你同步主项目的代码,找到 **Pull request** 按钮,点击。 2. 在左侧选择你的存储的项目,右侧为主项目,此时你能在下面看到两个项目的区别,**点击 create pull request 按钮。** 3. 填写 title,**点击 create pull request 按钮。** 4. 进入 pull request 页面,拉到最下面,**点击 Merge pull request 按钮并确认,**现在你和主项目的代码就是同步的了。 4. Pull request 1. 当你觉得你的代码开发完成,可以推送时,在确保你的修改全部推送到了你的存储的项目中,然后进入你的存储的项目页面,**点击 New pull request 按钮**, 2. 然后**点击 create pull request 按钮**进行代码提交。 5. 审核 1. 待项目的开发者审批完成之后,就是贡献成功了。 ## 开发组构成 ### 贡献者 Contributor - 要求:完成一次pr的提交和合并 ### 提交者 Committer - 要求: 完成至少5个pr的提交和合并,并得到mentor的邀请 - 权力:review和accept pr - Committer列表:@陈宣俊 ### 维护者 maintainer - 要求:能长期维护项目,并得到mentor的邀请 - 权力:合并pr进入主分支 - Maintainer列表: @realVeer @Socket_Captain ### 导师 Mentor - 权力:决定项目发展方向,对项目进行指导 - 导师 @panzhaohui