diff --git a/client/lib/screens/settings_page.dart b/client/lib/screens/settings_page.dart index 2c80289..d43cda6 100644 --- a/client/lib/screens/settings_page.dart +++ b/client/lib/screens/settings_page.dart @@ -2,6 +2,8 @@ // // 对照 ui_kits/desktop/dapp.jsx DSettings(精简):兑换入口 + 语言段控 + // 深色外观 + 协议 + 版本。开关组(开机自启/智能分流/Kill-switch)待 l10n 补齐后加。 +import 'dart:io'; + import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; @@ -39,9 +41,10 @@ class SettingsPage extends ConsumerWidget { right: Icon(PangolinIcons.chevronRight, size: 18, color: c.fg3), onTap: () {}), ]), const SizedBox(height: 16), - // 功能开关组 + // 功能开关组(开机自启是桌面端登录项概念,iOS/Android 无此能力,仅桌面显示) _Card(children: [ - _Row(title: t.autostart, sub: t.autostartSub, right: sw(s.autostart, settings.setAutostart)), + if (Platform.isMacOS || Platform.isWindows || Platform.isLinux) + _Row(title: t.autostart, sub: t.autostartSub, right: sw(s.autostart, settings.setAutostart)), _Row(title: t.autoConnect, sub: t.autoConnectSub, right: sw(s.autoConnect, settings.setAutoConnect)), _Row(title: t.smartRoute, sub: t.smartRouteSub, right: sw(s.smartRoute, settings.setSmartRoute)), _Row(title: t.killSwitch, sub: t.killSwitchSub, last: true, right: sw(s.killSwitch, settings.setKillSwitch)), diff --git a/client/lib/shell/tablet_shell.dart b/client/lib/shell/tablet_shell.dart index c09506a..921378b 100644 --- a/client/lib/shell/tablet_shell.dart +++ b/client/lib/shell/tablet_shell.dart @@ -8,7 +8,9 @@ import 'package:flutter_riverpod/flutter_riverpod.dart'; import '../pangolin_theme.dart'; import '../screens/account_page.dart'; import '../screens/connect_page.dart'; +import '../screens/contact_page.dart'; import '../screens/nodes_page.dart'; +import '../screens/settings_page.dart'; import '../screens/stats_page.dart'; import '../state/app_providers.dart'; import '../state/navigation_provider.dart'; @@ -25,11 +27,13 @@ class TabletShell extends ConsumerWidget { final t = ref.watch(appTextProvider); final view = ref.watch(navViewProvider); - // 「我的」移到侧栏顶部品牌按钮(见 NavSidebar)。 + // 「我的」移到侧栏顶部品牌按钮(见 NavSidebar);设置/联系我们对齐桌面侧栏。 final items = [ (icon: PangolinIcons.power, label: t.tabConnect, view: NavView.connect), (icon: PangolinIcons.globe, label: t.tabServers, view: NavView.servers), (icon: PangolinIcons.barChart, label: t.tabStats, view: NavView.stats), + (icon: PangolinIcons.settings, label: t.settingsTitle, view: NavView.settings), + (icon: PangolinIcons.messageCircle, label: t.contactTitle, view: NavView.contact), ]; final titles = { @@ -37,6 +41,8 @@ class TabletShell extends ConsumerWidget { NavView.servers: t.tabServers, NavView.stats: t.tabStats, NavView.account: t.tabMe, + NavView.settings: t.settingsTitle, + NavView.contact: t.contactTitle, }; void go(NavView v) => ref.read(navViewProvider.notifier).state = v; @@ -49,22 +55,31 @@ class TabletShell extends ConsumerWidget { return NodesPage(isWide: true, onPicked: () => go(NavView.connect)); case NavView.stats: return const StatsPage(isWide: true); - default: // account / contact / settings / plans / redeem → 账户(tablet 一级只 4 项) + case NavView.settings: + return const SettingsPage(); + case NavView.contact: + return const ContactPage(); + default: // account / plans / redeem / devices → 账户(其余下钻在账户页内) return const AccountPage(isWide: true); } } return ColoredBox( color: c.bg, - child: Row(children: [ - NavSidebar(items: items, width: 232, dense: false), - Expanded( - child: Column(children: [ - ContentTopBar(title: titles[view] ?? t.tabMe, showThemeToggle: false, titleSize: 19), - Expanded(child: content()), - ]), - ), - ]), + // iPad 上内容会顶到状态栏(时间/电量/notch)。SafeArea 加顶部安全区,避开重叠; + // 底部留给页面自行处理(home indicator)。 + child: SafeArea( + bottom: false, + child: Row(children: [ + NavSidebar(items: items, width: 232, dense: false), + Expanded( + child: Column(children: [ + ContentTopBar(title: titles[view] ?? t.tabMe, showThemeToggle: false, titleSize: 19), + Expanded(child: content()), + ]), + ), + ]), + ), ); } }