chore: 批量完成2026-05-24版本迭代更新

本次提交涵盖多项功能优化与重构:
1. 重构pro_image_editor依赖为官方托管版本,移除本地包引用
2. 拆分角色表情枚举至独立文件,优化代码复用性
3. 新增壁纸收藏、预加载、健康检测服务与本地存储支持
4. 完善API响应类型安全检查与排行榜服务能力
5. 新增应用锁设置路由与页面支持
6. 优化路由跳转使用常量路径替代硬编码字符串
7. 新增阅读报告分享功能与设置变更日志服务
8. 修复多处类型转换与空指针风险问题
9. 调整API超时时间优化网络请求表现
10. 统一文件头格式与部分UI组件样式
This commit is contained in:
Developer
2026-05-24 04:00:49 +08:00
parent f5a75cb6d3
commit df1f127a12
84 changed files with 11368 additions and 2176 deletions

View File

@@ -1,9 +1,9 @@
// ============================================================
// 闲言APP — 特效互斥调度器
// 创建时间: 2026-05-22
// 更新时间: 2026-05-22
// 更新时间: 2026-05-24
// 作用: 限制同一时刻运行的重量级特效数量防止GPU过载
// 上次更新: 初始创建
// 上次更新: 添加acquire()超时机制,防止永久阻塞
// ============================================================
import 'dart:async';
@@ -51,9 +51,11 @@ class EffectMutex {
///
/// 如果当前活跃特效数未达上限,立即返回 token
/// 否则等待直到有槽位释放。
/// [timeout] 不为 null 时,超时后从等待队列移除并抛出 TimeoutException。
Future<EffectToken> acquire(
String name, {
EffectPriority priority = EffectPriority.decoration,
Duration? timeout,
}) async {
if (_active.length < maxConcurrent) {
final token = EffectToken._(this, name);
@@ -65,10 +67,26 @@ class EffectMutex {
}
final completer = Completer<EffectToken>();
_pending.add(_PendingEffect(name, priority, completer));
final pending = _PendingEffect(name, priority, completer);
_pending.add(pending);
Log.i(
'EffectMutex: "$name" 排队等待 (优先级=${priority.name}, 队列=${_pending.length})',
);
if (timeout != null) {
pending._timer = Timer(timeout, () {
if (!completer.isCompleted) {
_pending.remove(pending);
completer.completeError(
TimeoutException(
'EffectMutex: "$name" 等待超时 (${timeout.inMilliseconds}ms)',
),
);
Log.i('EffectMutex: "$name" 等待超时');
}
});
}
return completer.future;
}
@@ -81,6 +99,7 @@ class EffectMutex {
if (_pending.isNotEmpty) {
_pending.sort((a, b) => a.priority.value.compareTo(b.priority.value));
final next = _pending.removeAt(0);
next._timer?.cancel();
final newToken = EffectToken._(this, next.name);
_active.add(newToken);
next.completer.complete(newToken);
@@ -96,4 +115,5 @@ class _PendingEffect {
final String name;
final EffectPriority priority;
final Completer<EffectToken> completer;
Timer? _timer;
}