feat: 新增多模块后端管理、数据同步工具与鸿蒙路由适配
本次提交新增了以下核心内容: 1. 后端管理模块:包含字体同步、插件元数据、插件用户设置、稍后读消息/共享列表的控制器、模型、验证器与多语言配置 2. Flutter数据同步模块:统一的事件总线与兼容层,替代分散的StreamController 3. 鸿蒙端路由适配:完整的路由定义、构建器与占位组件 4. 后端API接口:字体同步与插件更新的服务端API,支持自动建表与跨域请求 5. 鸿蒙权限校验脚本:用于校验module.json5与string.json的权限声明一致性
This commit is contained in:
45
lib/core/sync/data_sync_compat.dart
Normal file
45
lib/core/sync/data_sync_compat.dart
Normal 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统一管理
|
||||
}
|
||||
114
lib/core/sync/data_sync_event_bus.dart
Normal file
114
lib/core/sync/data_sync_event_bus.dart
Normal 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
10
lib/core/sync/sync.dart
Normal file
@@ -0,0 +1,10 @@
|
||||
/// ============================================================
|
||||
/// 闲言APP — 数据同步模块导出
|
||||
/// 创建时间: 2026-05-31
|
||||
/// 更新时间: 2026-05-31
|
||||
/// 作用: 统一导出数据同步相关类
|
||||
/// 上次更新: 初始创建
|
||||
/// ============================================================
|
||||
|
||||
export 'data_sync_event_bus.dart';
|
||||
export 'data_sync_compat.dart';
|
||||
Reference in New Issue
Block a user