diff --git a/lib/main.dart b/lib/main.dart index bae362a..68b993b 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -26,14 +26,12 @@ void main() async { // 初始化用户偏好设置 await UserPrefs.init(); - // 初始化数据库 final appProvider = AppProvider(); - await appProvider.initDatabase(); - appProvider.initMainTabIndex(); - // 以下初始化不阻塞界面显示 + // 先显示界面,后台加载数据 + runApp(MyApp(appProvider: appProvider)); + unawaited(appProvider.initDatabase().then((_) => appProvider.initMainTabIndex())); unawaited(_initAutoBackup()); unawaited(_initUsageStats()); - runApp(MyApp(appProvider: appProvider)); } /// 初始化自动备份 diff --git a/lib/pages/sync/server_sync_page.dart b/lib/pages/sync/server_sync_page.dart index 4c3034d..fb83e29 100644 --- a/lib/pages/sync/server_sync_page.dart +++ b/lib/pages/sync/server_sync_page.dart @@ -58,7 +58,7 @@ class _ServerSyncPageState extends State { final exp = _prefs.syncExpiresAt; if (exp.isNotEmpty) { try { - final dt = DateTime.parse(exp); + final dt = DateTime.parse(exp).add(const Duration(hours: 8)); _expiresText = '有效期至 ${dt.year}-${dt.month.toString().padLeft(2, '0')}-${dt.day.toString().padLeft(2, '0')} ' '${dt.hour.toString().padLeft(2, '0')}:${dt.minute.toString().padLeft(2, '0')}'; } catch (_) { diff --git a/lib/utils/usage_stats_service.dart b/lib/utils/usage_stats_service.dart index 38f83ee..95f1968 100644 --- a/lib/utils/usage_stats_service.dart +++ b/lib/utils/usage_stats_service.dart @@ -17,7 +17,7 @@ class UsageStatsService with WidgetsBindingObserver { final UserPrefs _prefs = UserPrefs(); /// 统计服务器地址,发布前替换为实际地址,置空则禁用 - static String serverUrl = 'http://192.168.31.48:5000'; + static String serverUrl = 'http://api.mooknote.iletter.top/'; Timer? _heartbeatTimer; bool _started = false; @@ -54,23 +54,6 @@ class UsageStatsService with WidgetsBindingObserver { WidgetsBinding.instance.removeObserver(this); } - /// 获取统计信息(总用户数 / 在线数) - static Future?> fetchStats() async { - if (serverUrl.isEmpty) return null; - - try { - final response = await http - .get(Uri.parse('$serverUrl/api/stats')) - .timeout(const Duration(seconds: 5)); - if (response.statusCode == 200) { - return jsonDecode(response.body) as Map; - } - } catch (_) { - // 静默失败 - } - return null; - } - // ─── 内部方法 ────────────────────────────────────────────────────────── /// 确保设备有匿名ID @@ -106,8 +89,10 @@ class UsageStatsService with WidgetsBindingObserver { headers: {'Content-Type': 'application/json'}, body: jsonEncode({ 'device_hash': deviceId, - 'device_type': Platform.operatingSystem, // android/ios/windows/macos/linux - 'device_name': '${Platform.operatingSystem} ${Platform.operatingSystemVersion}', + 'device_type': + Platform.operatingSystem, // android/ios/windows/macos/linux + 'device_name': + '${Platform.operatingSystem} ${Platform.operatingSystemVersion}', }), ) .timeout(const Duration(seconds: 5));