### 详细变更:
1. **文档与配置**:更新AGENTS.md添加命令超时约束,升级Rive依赖至0.14.7并替换平台插件引用
2. **UI优化**:重构AppInfo页面布局、移除图表冗余配置、锁定部分系统设置项
3. **功能增强**:
- 新增工具面板拖拽状态管理与介绍弹窗
- 新增进度页面编辑/重排/清空用户进度功能
- 新增摇一摇路由作用域拦截逻辑
4. **体验优化**:
- 统一外部链接跳转弹窗,添加文件打开确认逻辑
- 修复设备卡片IP溢出、Android权限声明问题
- 后台任务初始化增加协议校验
5. **代码重构**:拆分工具面板配置、拖拽逻辑与动画参数,优化状态管理代码
6. **工具脚本**:新增协议文件上传脚本
133 lines
3.9 KiB
Dart
133 lines
3.9 KiB
Dart
// ============================================================
|
||
// 闲言APP — 协议同意后初始化器
|
||
// 创建时间: 2026-05-30
|
||
// 更新时间: 2026-05-30
|
||
// 作用: 将权限敏感的服务初始化延迟到用户同意协议后执行
|
||
// 上次更新: 首次创建,从main.dart拆分权限敏感初始化
|
||
// ============================================================
|
||
|
||
import '../storage/kv_storage.dart';
|
||
import '../utils/logger.dart';
|
||
import '../utils/platform/platform_utils.dart' as pu;
|
||
import '../router/app_router.dart' show rootNavigatorKey;
|
||
import 'network/connectivity_service.dart';
|
||
import 'clipboard_monitor_service.dart';
|
||
import 'background/background_task_service.dart';
|
||
import 'notification/local_notification_service.dart';
|
||
import 'device/screen_wake_service.dart';
|
||
import 'device/battery_optimization_service.dart';
|
||
import 'notification/readlater_reminder_service.dart';
|
||
import 'data/home_widget_service.dart';
|
||
import 'readlater/sharing_receiver_service.dart';
|
||
import '../../features/discover/services/chat_migration_service.dart';
|
||
|
||
class PostAgreementInitializer {
|
||
PostAgreementInitializer._();
|
||
|
||
static bool _initialized = false;
|
||
|
||
static bool get isInitialized => _initialized;
|
||
|
||
static Future<void> init() async {
|
||
if (_initialized) return;
|
||
|
||
Log.i('PostAgreementInitializer: 开始初始化权限敏感服务...');
|
||
|
||
if (!pu.isWeb) {
|
||
try {
|
||
SharingReceiverService().init();
|
||
SharingReceiverService().setNavigatorKey(rootNavigatorKey);
|
||
Log.i('分享接收服务初始化完成');
|
||
} catch (e, st) {
|
||
Log.e('分享接收服务初始化失败', e, st);
|
||
}
|
||
}
|
||
|
||
if (!pu.isWeb) {
|
||
try {
|
||
await LocalNotificationService.init();
|
||
Log.i('本地通知服务初始化完成');
|
||
} catch (e, st) {
|
||
Log.e('本地通知服务初始化失败', e, st);
|
||
}
|
||
}
|
||
|
||
if (!pu.isWeb) {
|
||
try {
|
||
await ScreenWakeService.init();
|
||
Log.i('屏幕常亮服务初始化完成');
|
||
} catch (e, st) {
|
||
Log.e('屏幕常亮服务初始化失败', e, st);
|
||
}
|
||
}
|
||
|
||
if (!pu.isWeb) {
|
||
try {
|
||
await BatteryOptimizationService.init();
|
||
Log.i('电池优化服务初始化完成');
|
||
} catch (e, st) {
|
||
Log.e('电池优化服务初始化失败', e, st);
|
||
}
|
||
}
|
||
|
||
if (!pu.isWeb) {
|
||
try {
|
||
await ReadlaterReminderService.startMonitoring();
|
||
Log.i('稍后读提醒服务初始化完成');
|
||
} catch (e, st) {
|
||
Log.e('稍后读提醒服务初始化失败', e, st);
|
||
}
|
||
}
|
||
|
||
try {
|
||
await ChatMigrationService.migrateIfNeeded();
|
||
Log.i('聊天数据迁移检查完成');
|
||
} catch (e, st) {
|
||
Log.e('聊天数据迁移检查失败', e, st);
|
||
}
|
||
|
||
if (!pu.isWeb) {
|
||
try {
|
||
await HomeWidgetService.instance.init();
|
||
Log.i('桌面小组件服务初始化完成');
|
||
} catch (e, st) {
|
||
Log.e('桌面小组件服务初始化失败', e, st);
|
||
}
|
||
}
|
||
|
||
if (!pu.isWeb) {
|
||
try {
|
||
await ClipboardMonitorService.instance.initFromStore();
|
||
Log.i('剪贴板监控服务初始化完成');
|
||
} catch (e, st) {
|
||
Log.e('剪贴板监控服务初始化失败', e, st);
|
||
}
|
||
}
|
||
|
||
if (!pu.isWeb) {
|
||
try {
|
||
await ConnectivityService.init();
|
||
Log.i('网络状态检测服务初始化完成');
|
||
} catch (e, st) {
|
||
Log.e('网络状态检测服务初始化失败', e, st);
|
||
}
|
||
}
|
||
|
||
if (!pu.isWeb) {
|
||
try {
|
||
await BackgroundTaskService.instance.init();
|
||
Log.i('后台任务服务初始化完成');
|
||
} catch (e, st) {
|
||
Log.e('后台任务服务初始化失败', e, st);
|
||
}
|
||
}
|
||
|
||
_initialized = true;
|
||
Log.i('PostAgreementInitializer: 所有权限敏感服务初始化完成 ✓');
|
||
}
|
||
|
||
static bool shouldInit() {
|
||
return KvStorage.isOnboardingCompleted && !_initialized;
|
||
}
|
||
}
|