feat: 新增多模块后端管理、数据同步工具与鸿蒙路由适配

本次提交新增了以下核心内容:
1. 后端管理模块:包含字体同步、插件元数据、插件用户设置、稍后读消息/共享列表的控制器、模型、验证器与多语言配置
2. Flutter数据同步模块:统一的事件总线与兼容层,替代分散的StreamController
3. 鸿蒙端路由适配:完整的路由定义、构建器与占位组件
4. 后端API接口:字体同步与插件更新的服务端API,支持自动建表与跨域请求
5. 鸿蒙权限校验脚本:用于校验module.json5与string.json的权限声明一致性
This commit is contained in:
Developer
2026-06-01 05:50:13 +08:00
parent 9ea8d3d606
commit 5a083bdbab
159 changed files with 15621 additions and 10565 deletions

View File

@@ -0,0 +1,45 @@
/// ============================================================
/// 闲言APP — 数据同步兼容层
/// 创建时间: 2026-05-31
/// 更新时间: 2026-05-31
/// 作用: 提供向后兼容的notifyXxxRefresh/xxxRefreshStream接口
/// 上次更新: 初始创建桥接旧API到DataSyncEventBus
/// ============================================================
import 'dart:async';
import 'data_sync_event_bus.dart';
/// 稍后读刷新通知兼容旧API
void notifyReadlaterRefresh({String? source}) {
DataSyncEventBus.instance.notify(
DataSyncEventType.readlater,
source: source,
);
}
/// 稍后读刷新事件流兼容旧API
Stream<void> get readlaterRefreshStream =>
DataSyncEventBus.instance.on(DataSyncEventType.readlater);
/// 收藏刷新通知兼容旧API
void notifyFavoriteRefresh({String? source}) {
DataSyncEventBus.instance.notify(
DataSyncEventType.favorite,
source: source,
);
}
/// 收藏刷新事件流兼容旧API
Stream<void> get favoriteRefreshStream =>
DataSyncEventBus.instance.on(DataSyncEventType.favorite);
/// 释放稍后读刷新控制器兼容旧API现在由EventBus统一管理
void disposeReadlaterRefreshController() {
// 不再单独关闭由DataSyncEventBus统一管理
}
/// 释放收藏刷新控制器兼容旧API现在由EventBus统一管理
void disposeFavoriteRefreshController() {
// 不再单独关闭由DataSyncEventBus统一管理
}

View File

@@ -0,0 +1,114 @@
/// ============================================================
/// 闲言APP — 数据同步事件总线
/// 创建时间: 2026-05-31
/// 更新时间: 2026-06-01
/// 作用: 统一管理稍后读、收藏等数据变更通知替代分散的StreamController
/// 上次更新: 增强防御性——isClosed检查 + Hot Restart自动重建 + dispose标记
/// ============================================================
import 'dart:async';
/// 数据同步事件类型
enum DataSyncEventType {
/// 稍后读数据变更
readlater,
/// 收藏数据变更
favorite,
}
/// 数据同步事件
class DataSyncEvent {
const DataSyncEvent({required this.type, this.source, this.payload});
/// 事件类型
final DataSyncEventType type;
/// 事件来源标识(如 'home_interaction', 'sharing_receiver', 'chat_flow'
final String? source;
/// 可选附加数据
final Map<String, dynamic>? payload;
@override
String toString() => 'DataSyncEvent(type: $type, source: $source)';
}
/// 全局数据同步事件总线
///
/// 统一管理所有数据变更通知,替代之前分散在各 Provider 中的
/// StreamController。所有数据变更通过 [notify] 发送,订阅者通过
/// [on] 按事件类型过滤接收。
///
/// 防御性设计:
/// - [notify] / [on] / [all] 在控制器已关闭时自动重建,避免 Hot Restart 后失效
/// - [dispose] 标记为已释放但不再真正关闭控制器,防止单例状态不一致
///
/// 使用示例:
/// ```dart
/// // 发送事件
/// DataSyncEventBus.instance.notify(DataSyncEventType.readlater, source: 'home');
///
/// // 订阅特定类型事件
/// DataSyncEventBus.instance.on(DataSyncEventType.favorite).listen((_) {
/// // 刷新收藏数据
/// });
/// ```
class DataSyncEventBus {
DataSyncEventBus._() {
_controller = StreamController<DataSyncEvent>.broadcast();
}
/// 全局单例实例
static final DataSyncEventBus instance = DataSyncEventBus._();
/// 内部广播控制器
late StreamController<DataSyncEvent> _controller;
/// 是否已标记释放
bool _disposed = false;
/// 确保控制器可用Hot Restart 安全重建)
void _ensureAlive() {
if (_controller.isClosed) {
_controller = StreamController<DataSyncEvent>.broadcast();
_disposed = false;
}
}
/// 发送数据同步事件
void notify(
DataSyncEventType type, {
String? source,
Map<String, dynamic>? payload,
}) {
_ensureAlive();
_controller.add(
DataSyncEvent(type: type, source: source, payload: payload),
);
}
/// 订阅特定类型的数据同步事件
Stream<DataSyncEvent> on(DataSyncEventType type) {
_ensureAlive();
return _controller.stream.where((event) => event.type == type);
}
/// 订阅所有数据同步事件
Stream<DataSyncEvent> get all {
_ensureAlive();
return _controller.stream;
}
/// 标记释放
///
/// 作为全局单例App 退出时进程即将终止,无需手动释放。
/// 此方法仅标记状态,不再真正关闭控制器,防止 Hot Restart 后
/// 单例已关闭但不会重新创建导致事件总线失效。
void dispose() {
_disposed = true;
}
/// 当前是否已标记释放
bool get isDisposed => _disposed;
}

10
lib/core/sync/sync.dart Normal file
View File

@@ -0,0 +1,10 @@
/// ============================================================
/// 闲言APP — 数据同步模块导出
/// 创建时间: 2026-05-31
/// 更新时间: 2026-05-31
/// 作用: 统一导出数据同步相关类
/// 上次更新: 初始创建
/// ============================================================
export 'data_sync_event_bus.dart';
export 'data_sync_compat.dart';