diff --git a/lib/core/extension/context/dialog.dart b/lib/core/extension/context/dialog.dart index a88129a0..50f4e44f 100644 --- a/lib/core/extension/context/dialog.dart +++ b/lib/core/extension/context/dialog.dart @@ -63,7 +63,6 @@ extension DialogX on BuildContext { Future showPwdDialog({ String? user, required String hostId, - void Function()? onCorrectPwd, }) async { if (!mounted) return null; return await showRoundDialog( diff --git a/lib/data/store/setting.dart b/lib/data/store/setting.dart index 912ffd67..e1050e8f 100644 --- a/lib/data/store/setting.dart +++ b/lib/data/store/setting.dart @@ -259,6 +259,10 @@ class SettingStore extends PersistentStore { /// Used for [DialogX.showPwdDialog] late final rememberPwdInMem = property('rememberPwdInMem', true); + /// SSH Term Theme + /// 0: follow app theme, 1: light, 2: dark + late final termTheme = property('termTheme', 0); + // Never show these settings for users // // ------BEGIN------ diff --git a/lib/view/page/setting/entry.dart b/lib/view/page/setting/entry.dart index 8dab621e..29623303 100644 --- a/lib/view/page/setting/entry.dart +++ b/lib/view/page/setting/entry.dart @@ -170,6 +170,7 @@ class _SettingPageState extends State { Widget _buildSSH() { return Column( children: [ + _buildTermTheme(), _buildFont(), _buildTermFontSize(), _buildTermCursor(), @@ -1090,4 +1091,40 @@ class _SettingPageState extends State { trailing: StoreSwitch(prop: _setting.rememberPwdInMem), ); } + + Widget _buildTermTheme() { + String index2Str(int index) { + switch (index) { + case 0: + return l10n.system; + case 1: + return l10n.light; + case 2: + return l10n.dark; + default: + return l10n.error; + } + } + + return ListTile( + title: Text(l10n.theme), + trailing: ValueListenableBuilder( + valueListenable: _setting.termTheme.listenable(), + builder: (_, val, __) => Text( + index2Str(val), + style: UIs.text15, + ), + ), + onTap: () async { + final selected = await context.showPickSingleDialog( + items: List.generate(3, (index) => index), + name: (p0) => index2Str(p0), + initial: _setting.termTheme.fetch(), + ); + if (selected != null) { + _setting.termTheme.put(selected); + } + }, + ); + } } diff --git a/lib/view/page/ssh/page.dart b/lib/view/page/ssh/page.dart index a6c86c5e..a8967a88 100644 --- a/lib/view/page/ssh/page.dart +++ b/lib/view/page/ssh/page.dart @@ -91,7 +91,11 @@ class _SSHPageState extends State with AutomaticKeepAliveClientMixin { super.didChangeDependencies(); _isDark = context.isDark; _media = MediaQuery.of(context); - _terminalTheme = _isDark ? TerminalThemes.dark : TerminalThemes.light; + _terminalTheme = switch (Stores.setting.termTheme.fetch()) { + 1 => TerminalThemes.light, + 2 => TerminalThemes.dark, + _ => _isDark ? TerminalThemes.dark : TerminalThemes.light, + }; // Because the virtual keyboard only displayed on mobile devices if (isMobile || isDebuggingMobileLayoutOnDesktop) {