#146 new: option of server tab old ui

This commit is contained in:
lollipopkit
2023-08-30 15:41:41 +08:00
parent f7278fc890
commit 8004c41094
5 changed files with 198 additions and 128 deletions

View File

@@ -26,6 +26,23 @@ enum ServerTabMenuType {
return Icons.terminal;
}
}
String text(S s) {
switch (this) {
case ServerTabMenuType.sftp:
return 'SFTP';
case ServerTabMenuType.snippet:
return s.snippet;
case ServerTabMenuType.pkg:
return s.pkg;
case ServerTabMenuType.docker:
return 'Docker';
case ServerTabMenuType.process:
return s.process;
case ServerTabMenuType.terminal:
return s.terminal;
}
}
}
enum DockerMenuType {

View File

@@ -146,4 +146,11 @@ class SettingStore extends PersistentStore {
'sftpRmrfDir',
true,
);
/// Discussion #146
late final serverTabUseOldUI = StoreProperty(
box,
'serverTabUseOldUI',
false,
);
}

View File

@@ -238,7 +238,9 @@ class _ServerPageState extends State<ServerPage>
),
),
height13,
if (_settingStore.moveOutServerTabFuncBtns.fetch())
if (_settingStore.moveOutServerTabFuncBtns.fetch() &&
// Discussion #146
!_settingStore.serverTabUseOldUI.fetch())
SizedBox(
height: 27,
child: ServerFuncBtns(spi: spi, s: _s),
@@ -283,7 +285,13 @@ class _ServerPageState extends State<ServerPage>
)
],
),
Row(
children: [
_buildTopRightText(ss, cs),
if (_settingStore.serverTabUseOldUI.fetch())
ServerFuncBtnsTopRight(spi: spi, s: _s)
],
)
],
),
);
@@ -446,7 +454,9 @@ class _ServerPageState extends State<ServerPage>
if (cs != ServerState.finished) {
return 23.0;
}
if (_settingStore.moveOutServerTabFuncBtns.fetch()) {
if (_settingStore.moveOutServerTabFuncBtns.fetch() &&
// Discussion #146
!_settingStore.serverTabUseOldUI.fetch()) {
return 132;
}
return 107;

View File

@@ -345,7 +345,8 @@ class _SftpPageState extends State<SftpPage> with AfterLayoutMixin {
onTap: () => _download(context, file),
),
// Only show decompress option when the file is a compressed file
if (_canDecompress(file.filename)) ListTile(
if (_canDecompress(file.filename))
ListTile(
leading: const Icon(Icons.folder_zip),
title: Text(_s.decompress),
onTap: () => _decompress(context, file),

View File

@@ -14,8 +14,42 @@ import '../../data/model/server/server_private_info.dart';
import '../../data/model/server/snippet.dart';
import '../../data/provider/snippet.dart';
import '../../locator.dart';
import 'popup_menu.dart';
import 'tag.dart';
class ServerFuncBtnsTopRight extends StatelessWidget {
final ServerPrivateInfo spi;
final S s;
const ServerFuncBtnsTopRight({
super.key,
required this.spi,
required this.s,
});
@override
Widget build(BuildContext context) {
return PopupMenu<ServerTabMenuType>(
items: ServerTabMenuType.values
.map((e) => PopupMenuItem<ServerTabMenuType>(
value: e,
child: Row(
children: [
Icon(e.icon),
const SizedBox(
width: 10,
),
Text(e.text(s)),
],
),
))
.toList(),
padding: const EdgeInsets.symmetric(horizontal: 10),
onSelected: (val) => _onTapMoreBtns(val, spi, context, s),
);
}
}
class ServerFuncBtns extends StatelessWidget {
const ServerFuncBtns({
super.key,
@@ -28,22 +62,39 @@ class ServerFuncBtns extends StatelessWidget {
final S s;
final double? iconSize;
@override
Widget build(BuildContext context) {
return Row(
mainAxisAlignment: MainAxisAlignment.spaceAround,
children: ServerTabMenuType.values
.map((e) => IconButton(
onPressed: () => _onTapMoreBtns(e, spi, context, s),
padding: EdgeInsets.zero,
tooltip: e.name,
icon: Icon(e.icon, size: iconSize ?? 15),
))
.toList(),
);
}
}
void _onTapMoreBtns(
ServerTabMenuType value,
ServerPrivateInfo spi,
BuildContext context,
S s,
) async {
switch (value) {
case ServerTabMenuType.pkg:
AppRoute.pkg(spi: spi).checkGo(
context: context,
check: () => _checkClient(context, spi.id),
check: () => _checkClient(context, spi.id, s.waitConnection),
);
break;
case ServerTabMenuType.sftp:
AppRoute.sftp(spi: spi).checkGo(
context: context,
check: () => _checkClient(context, spi.id),
check: () => _checkClient(context, spi.id, s.waitConnection),
);
break;
case ServerTabMenuType.snippet:
@@ -77,13 +128,13 @@ class ServerFuncBtns extends StatelessWidget {
case ServerTabMenuType.docker:
AppRoute.docker(spi: spi).checkGo(
context: context,
check: () => _checkClient(context, spi.id),
check: () => _checkClient(context, spi.id, s.waitConnection),
);
break;
case ServerTabMenuType.process:
AppRoute.process(spi: spi).checkGo(
context: context,
check: () => _checkClient(context, spi.id),
check: () => _checkClient(context, spi.id, s.waitConnection),
);
break;
case ServerTabMenuType.terminal:
@@ -92,21 +143,6 @@ class ServerFuncBtns extends StatelessWidget {
}
}
@override
Widget build(BuildContext context) {
return Row(
mainAxisAlignment: MainAxisAlignment.spaceAround,
children: ServerTabMenuType.values
.map((e) => IconButton(
onPressed: () => _onTapMoreBtns(e, spi, context),
padding: EdgeInsets.zero,
tooltip: e.name,
icon: Icon(e.icon, size: iconSize ?? 15),
))
.toList(),
);
}
Future<void> _gotoSSH(
ServerPrivateInfo spi,
BuildContext context,
@@ -156,12 +192,11 @@ class ServerFuncBtns extends StatelessWidget {
}
}
bool _checkClient(BuildContext context, String id) {
bool _checkClient(BuildContext context, String id, String msg) {
final server = locator<ServerProvider>().servers[id];
if (server == null || server.client == null) {
showSnackBar(context, Text(s.waitConnection));
showSnackBar(context, Text(msg));
return false;
}
return true;
}
}