new: support pick ssh term theme

This commit is contained in:
lollipopkit
2023-02-02 16:52:30 +08:00
parent c479d18714
commit 82a201d3dc
15 changed files with 366 additions and 63 deletions

View File

@@ -342,7 +342,7 @@ class _ServerDetailPageState extends State<ServerDetailPage>
SizedBox(
width: width,
child: Text(
'${ns.speedIn(device: device)}\n${ns.totalIn(device: device)}',
'${ns.speedIn(device: device)} | ${ns.totalIn(device: device)}',
style: textSize11,
textAlign: TextAlign.center,
textScaleFactor: 0.87,
@@ -351,7 +351,7 @@ class _ServerDetailPageState extends State<ServerDetailPage>
SizedBox(
width: width,
child: Text(
'${ns.speedOut(device: device)}\n${ns.totalOut(device: device)}',
'${ns.speedOut(device: device)} | ${ns.totalOut(device: device)}',
style: textSize11,
textAlign: TextAlign.right,
textScaleFactor: 0.87,

View File

@@ -1,6 +1,7 @@
import 'package:flutter/material.dart';
import 'package:flutter_material_color_picker/flutter_material_color_picker.dart';
import 'package:provider/provider.dart';
import 'package:toolbox/data/model/ssh/terminal_color.dart';
import '../../core/update.dart';
import '../../core/utils/ui.dart';
@@ -24,20 +25,19 @@ class SettingPage extends StatefulWidget {
class _SettingPageState extends State<SettingPage> {
late final SettingStore _setting;
late int _selectedColorValue;
late int _launchPageIdx;
late final ServerProvider _serverProvider;
late MediaQueryData _media;
late ThemeData _theme;
late S _s;
var _updateInterval = 5.0;
late int _selectedColorValue;
late int _launchPageIdx;
late int _termThemeIdx;
late double _updateInterval;
@override
void didChangeDependencies() {
super.didChangeDependencies();
_media = MediaQuery.of(context);
_theme = Theme.of(context);
_s = S.of(context);
}
@@ -47,6 +47,7 @@ class _SettingPageState extends State<SettingPage> {
_serverProvider = locator<ServerProvider>();
_setting = locator<SettingStore>();
_launchPageIdx = _setting.launchPage.fetch()!;
_termThemeIdx = _setting.termColorIdx.fetch()!;
_updateInterval = _setting.serverStatusUpdateInterval.fetch()!.toDouble();
}
@@ -64,6 +65,7 @@ class _SettingPageState extends State<SettingPage> {
_buildCheckUpdate(),
_buildLaunchPage(),
_buildDistLogoSwitch(),
_buildTermTheme(),
].map((e) => RoundRectCard(e)).toList(),
),
);
@@ -218,10 +220,7 @@ class _SettingPageState extends State<SettingPage> {
contentPadding: EdgeInsets.zero,
title: Text(
tabTitleName(context, tabs.indexOf(e)),
style: TextStyle(
fontSize: 14,
color: _theme.textTheme.bodyMedium!.color!.withAlpha(177),
),
style: textSize13,
),
trailing: _buildRadio(tabs.indexOf(e)),
),
@@ -242,4 +241,49 @@ class _SettingPageState extends State<SettingPage> {
},
);
}
Widget _buildTermTheme() {
return ExpansionTile(
textColor: primaryColor,
childrenPadding: const EdgeInsets.only(left: 17),
title: Text(
_s.termTheme,
style: textSize13,
),
trailing: Text(
TerminalColorsPlatform.values[_termThemeIdx].name,
style: textSize13,
),
children: _buildTermThemeRadioList(),
);
}
List<Widget> _buildTermThemeRadioList() {
return TerminalColorsPlatform.values
.map(
(e) => ListTile(
contentPadding: EdgeInsets.zero,
title: Text(
e.name,
style: textSize13,
),
trailing: _buildTermThemeRadio(e),
),
)
.toList();
}
Radio _buildTermThemeRadio(TerminalColorsPlatform platform) {
return Radio<int>(
value: platform.index,
groupValue: _termThemeIdx,
onChanged: (int? value) {
setState(() {
value ??= 0;
_termThemeIdx = value!;
_setting.termColorIdx.put(value!);
});
},
);
}
}

View File

@@ -6,6 +6,7 @@ import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:provider/provider.dart';
import 'package:toolbox/data/model/ssh/terminal_color.dart';
import 'package:toolbox/generated/l10n.dart';
import 'package:xterm/xterm.dart';
@@ -17,6 +18,7 @@ import '../../data/provider/virtual_keyboard.dart';
import '../../data/res/color.dart';
import '../../data/res/terminal_theme.dart';
import '../../data/res/virtual_key.dart';
import '../../data/store/setting.dart';
import '../../locator.dart';
class SSHPage extends StatefulWidget {
@@ -36,6 +38,7 @@ class _SSHPageState extends State<SSHPage> {
final TerminalController _terminalController = TerminalController();
final ContextMenuController _menuController = ContextMenuController();
late TextStyle _menuTextStyle;
late TerminalColors _termColors;
late S _s;
var _isDark = false;
@@ -43,6 +46,7 @@ class _SSHPageState extends State<SSHPage> {
@override
void initState() {
super.initState();
_termColors = TerminalColorsPlatform.values[locator<SettingStore>().termColorIdx.fetch()!].colors;
initTerminal();
}
@@ -102,7 +106,7 @@ class _SSHPageState extends State<SSHPage> {
final termTheme = _isDark ? termDarkTheme : termLightTheme;
return Scaffold(
backgroundColor: termTheme.background,
body: _buildBody(termTheme),
body: _buildBody(termTheme.toTerminalTheme(_termColors)),
bottomNavigationBar: _buildBottom(),
);
}