feat: 新增工作台模式、系统托盘,修复多平台兼容性问题
1. 新增工作台三栏布局模式,适配宽屏设备 2. 添加跨平台系统托盘支持,新增托盘图标资源 3. 修复工作台模式下导航返回异常问题 4. 统一JSON类型安全解析,替换硬类型转换 5. 增加macOS深度链接支持,统一渠道分发信息 6. 优化部分页面生命周期和状态加载逻辑 7. 移除废弃的nearby_connections依赖
This commit is contained in:
@@ -41,6 +41,7 @@ import 'features/settings/services/settings_change_logger.dart';
|
||||
import 'features/auth/providers/auth_provider.dart';
|
||||
import 'features/discover/services/rss_service.dart';
|
||||
import 'features/discover/services/exchange_rate_service.dart';
|
||||
import 'package:path_provider/path_provider.dart';
|
||||
|
||||
bool kvStorageReady = false;
|
||||
bool _liquidGlassReady = false;
|
||||
@@ -68,6 +69,10 @@ Future<void> _appMain() async {
|
||||
minimumSize: Size(400, 600),
|
||||
title: '闲言',
|
||||
center: true,
|
||||
// 隐藏系统标题栏,使用自定义软件样式标题栏(DesktopWindowTitleBar)
|
||||
titleBarStyle: TitleBarStyle.hidden,
|
||||
// macOS: 隐藏原生红黄绿按钮,由 Flutter 侧自绘
|
||||
skipTaskbar: false,
|
||||
);
|
||||
await windowManager.waitUntilReadyToShow(windowOptions, () async {
|
||||
await windowManager.show();
|
||||
@@ -287,8 +292,18 @@ Future<void> _appMain() async {
|
||||
|
||||
// 初始化 Catcher2 异常捕获并启动应用
|
||||
// 使用 rootWidget 方式,Catcher2 内部调用 runApp,避免 Zone mismatch
|
||||
// 预先获取临时目录作为截图保存路径,避免 Catcher2 输出 "Screenshots path is empty" 警告
|
||||
String catcherScreenshotsPath = '';
|
||||
try {
|
||||
final tempDir = await getTemporaryDirectory();
|
||||
catcherScreenshotsPath = '${tempDir.path}/catcher_screenshots';
|
||||
} catch (e) {
|
||||
// 获取失败时保持空字符串,Catcher2 会输出警告但不影响功能
|
||||
}
|
||||
|
||||
if (_liquidGlassReady) {
|
||||
Catcher2ConfigService.instance.init(
|
||||
screenshotsPath: catcherScreenshotsPath,
|
||||
rootWidget: LiquidGlassWidgets.wrap(
|
||||
child: ProviderScope(
|
||||
overrides: [
|
||||
@@ -304,6 +319,7 @@ Future<void> _appMain() async {
|
||||
);
|
||||
} else {
|
||||
Catcher2ConfigService.instance.init(
|
||||
screenshotsPath: catcherScreenshotsPath,
|
||||
rootWidget: ProviderScope(
|
||||
overrides: [
|
||||
authStateProvider.overrideWith((ref) => ref.watch(authProvider)),
|
||||
|
||||
Reference in New Issue
Block a user