Files
xianyan/lib/main.dart
Developer 283950ea07 chore: 批量代码优化与功能迭代更新
本次提交包含大量代码优化、功能新增与服务端配置更新:
1. 修复分析报告统计数据,调整CMake策略设置
2. 优化APP权限配置、编辑器与聊天界面组件
3. 更新依赖库版本与pubspec配置
4. 新增文件传输服务端、信令服务器相关配置与脚本
5. 完善用户注销功能与数据库迁移脚本
6. 优化多处动画效果、代码风格与日志输出
7. 新增多种调试与部署脚本,修复已知BUG
2026-05-12 06:28:04 +08:00

171 lines
4.9 KiB
Dart

// ============================================================
// 闲言APP — 应用入口
// 创建时间: 2026-04-20
// 更新时间: 2026-04-28
// 作用: main 函数,初始化存储 + 液态玻璃 + 异常捕获 + 启动 App
// 上次更新: 接入 Hive + 深度链接初始化
// ============================================================
import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:catcher_2/catcher_2.dart';
import 'package:catcher_2/model/platform_type.dart';
import 'package:liquid_glass_widgets/liquid_glass_widgets.dart';
import 'package:flutter/services.dart';
import 'app/app.dart';
import 'core/services/deep_link_service.dart';
import 'core/services/local_notification_service.dart';
import 'core/services/screen_wake_service.dart';
import 'core/services/sound_service.dart';
import 'core/services/battery_optimization_service.dart';
import 'core/services/readlater_reminder_service.dart';
import 'core/storage/app_kv_store.dart';
import 'core/storage/kv_storage.dart';
import 'core/utils/logger.dart';
import 'core/registry/page_registry.dart';
import 'core/router/app_router.dart';
import 'editor/services/3d/platform_3d_service.dart';
import 'features/inspiration/services/chat_migration_service.dart';
bool kvStorageReady = false;
void main() async {
WidgetsFlutterBinding.ensureInitialized();
SystemChrome.setEnabledSystemUIMode(SystemUiMode.edgeToEdge);
SystemChrome.setSystemUIOverlayStyle(
const SystemUiOverlayStyle(
statusBarColor: Colors.black,
statusBarIconBrightness: Brightness.light,
statusBarBrightness: Brightness.dark,
systemNavigationBarColor: Colors.black,
systemNavigationBarIconBrightness: Brightness.light,
systemNavigationBarDividerColor: Colors.black,
),
);
try {
await KvStorage.init();
kvStorageReady = true;
Log.i('KV 存储初始化完成');
} catch (e) {
Log.e('KV 存储初始化失败', e);
}
try {
await AppKVStore.init();
Log.i('AppKVStore (Hive) 初始化完成');
} catch (e) {
Log.e('AppKVStore 初始化失败', e);
}
await LiquidGlassWidgets.initialize();
Log.i('LiquidGlassWidgets 初始化完成');
await Platform3DService.instance.detectDeviceCapability();
Log.i('3D平台设备检测完成 (lowEnd=${Platform3DService.instance.isLowEnd})');
_validatePageRegistry();
try {
await DeepLinkService.init();
Log.i('深度链接服务初始化完成');
} catch (e) {
Log.e('深度链接服务初始化失败', e);
}
try {
await LocalNotificationService.init();
Log.i('本地通知服务初始化完成');
} catch (e) {
Log.e('本地通知服务初始化失败', e);
}
try {
await ScreenWakeService.init();
Log.i('屏幕常亮服务初始化完成');
} catch (e) {
Log.e('屏幕常亮服务初始化失败', e);
}
try {
await SoundService.init();
Log.i('音效服务初始化完成');
} catch (e) {
Log.e('音效服务初始化失败', e);
}
try {
await BatteryOptimizationService.init();
Log.i('电池优化服务初始化完成');
} catch (e) {
Log.e('电池优化服务初始化失败', e);
}
try {
await ReadlaterReminderService.startMonitoring();
Log.i('稍后读提醒服务初始化完成');
} catch (e) {
Log.e('稍后读提醒服务初始化失败', e);
}
try {
await ChatMigrationService.migrateIfNeeded();
Log.i('聊天数据迁移检查完成');
} catch (e) {
Log.e('聊天数据迁移检查失败', e);
}
Catcher2(
runAppFunction: () {
runApp(LiquidGlassWidgets.wrap(const ProviderScope(child: XianyanApp())));
},
debugConfig: Catcher2Options(
SilentReportMode(),
[_RateLimitedHandler()],
localizationOptions: [LocalizationOptions.buildDefaultChineseOptions()],
),
releaseConfig: Catcher2Options(SilentReportMode(), []),
profileConfig: Catcher2Options(SilentReportMode(), []),
);
}
class _RateLimitedHandler extends ReportHandler {
DateTime? _lastLog;
static const _cooldown = Duration(seconds: 5);
@override
Future<bool> handle(Report report, BuildContext? context) async {
final now = DateTime.now();
if (_lastLog == null || now.difference(_lastLog!) > _cooldown) {
_lastLog = now;
Log.e('Catcher2: ${report.error}');
}
return true;
}
@override
List<PlatformType> getSupportedPlatforms() => PlatformType.values.toList();
@override
bool isContextRequired() => false;
}
/// 页面注册表强制验证
void _validatePageRegistry() {
final errors = PageRegistry.validateAll();
if (errors.isNotEmpty) {
for (final e in errors) {
Log.e('页面注册表验证失败: $e');
}
} else {
Log.i('页面注册表验证通过,共 ${PageRegistry.pageCount} 个页面已注册');
}
const route = AppRoutes.home;
if (!PageRegistry.isRouteRegistered(route)) {
Log.e('页面注册表验证: 首页路由 $route 未注册!');
}
}