opt.: tag switcher
This commit is contained in:
@@ -4,6 +4,7 @@ import 'package:toolbox/core/extension/context/common.dart';
|
||||
import 'package:toolbox/core/extension/context/dialog.dart';
|
||||
import 'package:toolbox/core/extension/context/locale.dart';
|
||||
import 'package:toolbox/core/extension/order.dart';
|
||||
import 'package:toolbox/core/extension/widget.dart';
|
||||
import 'package:toolbox/data/model/server/cpu.dart';
|
||||
import 'package:toolbox/data/model/server/disk.dart';
|
||||
import 'package:toolbox/data/model/server/net_speed.dart';
|
||||
@@ -135,7 +136,7 @@ class _ServerDetailPageState extends State<ServerDetailPage>
|
||||
}
|
||||
|
||||
return CardX(
|
||||
ExpandTile(
|
||||
child: ExpandTile(
|
||||
title: Align(
|
||||
alignment: Alignment.centerLeft,
|
||||
child: _buildAnimatedText(
|
||||
@@ -202,7 +203,7 @@ class _ServerDetailPageState extends State<ServerDetailPage>
|
||||
|
||||
Widget _buildUpTimeAndSys(ServerStatus ss) {
|
||||
return CardX(
|
||||
Padding(
|
||||
child: Padding(
|
||||
padding: UIs.roundRectCardPadding,
|
||||
child: Row(
|
||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||
@@ -230,7 +231,7 @@ class _ServerDetailPageState extends State<ServerDetailPage>
|
||||
final usedStr = used.toStringAsFixed(0);
|
||||
|
||||
return CardX(
|
||||
Padding(
|
||||
child: Padding(
|
||||
padding: UIs.roundRectCardPadding,
|
||||
child: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.center,
|
||||
@@ -275,7 +276,7 @@ class _ServerDetailPageState extends State<ServerDetailPage>
|
||||
final used = ss.swap.usedPercent * 100;
|
||||
final cached = ss.swap.cached / ss.swap.total * 100;
|
||||
return CardX(
|
||||
Padding(
|
||||
child: Padding(
|
||||
padding: UIs.roundRectCardPadding,
|
||||
child: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.center,
|
||||
@@ -309,7 +310,7 @@ class _ServerDetailPageState extends State<ServerDetailPage>
|
||||
if (ss.nvdia == null) return UIs.placeholder;
|
||||
final children = ss.nvdia!.map((e) => _buildGpuItem(e)).toList();
|
||||
return CardX(
|
||||
ExpandTile(
|
||||
child: ExpandTile(
|
||||
title: const Text('GPU'),
|
||||
leading: const Icon(Icons.memory, size: 17),
|
||||
initiallyExpanded: children.length <= 3,
|
||||
@@ -392,7 +393,7 @@ class _ServerDetailPageState extends State<ServerDetailPage>
|
||||
style: UIs.textSize11Grey,
|
||||
textScaler: _textFactor,
|
||||
),
|
||||
trailing: InkWell(
|
||||
trailing: const Icon(Icons.info_outline, size: 17).tap(
|
||||
onTap: () {
|
||||
context.showRoundDialog(
|
||||
title: SizedBox(
|
||||
@@ -417,7 +418,6 @@ class _ServerDetailPageState extends State<ServerDetailPage>
|
||||
],
|
||||
);
|
||||
},
|
||||
child: const Icon(Icons.info_outline, size: 17),
|
||||
),
|
||||
);
|
||||
}
|
||||
@@ -433,7 +433,7 @@ class _ServerDetailPageState extends State<ServerDetailPage>
|
||||
final children =
|
||||
List.generate(disks.length, (idx) => _buildDiskItem(disks[idx], ss));
|
||||
return CardX(
|
||||
ExpandTile(
|
||||
child: ExpandTile(
|
||||
title: Text(l10n.disk),
|
||||
childrenPadding: const EdgeInsets.only(bottom: 7),
|
||||
leading: const Icon(Icons.storage, size: 17),
|
||||
@@ -497,7 +497,7 @@ class _ServerDetailPageState extends State<ServerDetailPage>
|
||||
children.addAll(devices.map((e) => _buildNetSpeedItem(ns, e)));
|
||||
}
|
||||
return CardX(
|
||||
ExpandTile(
|
||||
child: ExpandTile(
|
||||
title: Row(
|
||||
children: [
|
||||
Text(l10n.net),
|
||||
@@ -579,10 +579,11 @@ class _ServerDetailPageState extends State<ServerDetailPage>
|
||||
return UIs.placeholder;
|
||||
}
|
||||
return CardX(
|
||||
ExpandTile(
|
||||
child: ExpandTile(
|
||||
title: Text(l10n.temperature),
|
||||
leading: const Icon(Icons.ac_unit, size: 17),
|
||||
initiallyExpanded: ss.temps.devices.length <= 7,
|
||||
childrenPadding: EdgeInsets.zero,
|
||||
children: ss.temps.devices
|
||||
.map((key) => _buildTemperatureItem(key, ss.temps.get(key)))
|
||||
.toList(),
|
||||
|
||||
@@ -127,16 +127,15 @@ class _ServerEditPageState extends State<ServerEditPage> {
|
||||
)),
|
||||
UIs.height13,
|
||||
if (widget.spi?.server?.canViewDetails ?? false)
|
||||
Row(
|
||||
children: [
|
||||
Checkbox(
|
||||
value: delScripts,
|
||||
onChanged: (_) => setState(
|
||||
() => delScripts = !delScripts,
|
||||
),
|
||||
),
|
||||
Text(l10n.deleteScripts),
|
||||
],
|
||||
CheckboxListTile(
|
||||
value: delScripts,
|
||||
onChanged: (_) => setState(
|
||||
() => delScripts = !delScripts,
|
||||
),
|
||||
controlAffinity: ListTileControlAffinity.leading,
|
||||
subtitle: Text(l10n.deleteScripts),
|
||||
tileColor: Colors.transparent,
|
||||
contentPadding: EdgeInsets.zero,
|
||||
)
|
||||
],
|
||||
);
|
||||
@@ -315,7 +314,7 @@ class _ServerEditPageState extends State<ServerEditPage> {
|
||||
),
|
||||
);
|
||||
return CardX(
|
||||
Padding(
|
||||
child: Padding(
|
||||
padding: const EdgeInsets.symmetric(horizontal: 17),
|
||||
child: Column(
|
||||
children: tiles,
|
||||
@@ -375,7 +374,7 @@ class _ServerEditPageState extends State<ServerEditPage> {
|
||||
onTap: () => _jumpServer.value = null,
|
||||
));
|
||||
return CardX(
|
||||
ExpandTile(
|
||||
child: ExpandTile(
|
||||
leading: const Icon(Icons.map),
|
||||
initiallyExpanded: _jumpServer.value != null,
|
||||
title: Text(l10n.jumpServer),
|
||||
|
||||
@@ -8,6 +8,7 @@ import 'package:toolbox/core/extension/context/dialog.dart';
|
||||
import 'package:toolbox/core/extension/context/locale.dart';
|
||||
import 'package:toolbox/core/extension/media_queryx.dart';
|
||||
import 'package:toolbox/core/extension/ssh_client.dart';
|
||||
import 'package:toolbox/core/extension/widget.dart';
|
||||
import 'package:toolbox/core/utils/platform/base.dart';
|
||||
import 'package:toolbox/core/utils/share.dart';
|
||||
import 'package:toolbox/data/model/app/shell_func.dart';
|
||||
@@ -55,6 +56,7 @@ class _ServerPageState extends State<ServerPage>
|
||||
Widget build(BuildContext context) {
|
||||
super.build(context);
|
||||
return Scaffold(
|
||||
appBar: _buildTagsSwitcher(Pros.server),
|
||||
body: _buildBody(),
|
||||
floatingActionButton: FloatingActionButton(
|
||||
onPressed: () => AppRoute.serverEdit().go(context),
|
||||
@@ -81,10 +83,10 @@ class _ServerPageState extends State<ServerPage>
|
||||
}
|
||||
|
||||
final filtered = _filterServers(pro);
|
||||
if (_useDoubleColumn &&
|
||||
Stores.setting.doubleColumnServersPage.fetch()) {
|
||||
return _buildBodyMedium(pro: pro, filtered: filtered);
|
||||
}
|
||||
// if (_useDoubleColumn &&
|
||||
// Stores.setting.doubleColumnServersPage.fetch()) {
|
||||
// return _buildBodyMedium(pro: pro, filtered: filtered);
|
||||
// }
|
||||
return _buildBodySmall(provider: pro, filtered: filtered);
|
||||
},
|
||||
);
|
||||
@@ -99,7 +101,7 @@ class _ServerPageState extends State<ServerPage>
|
||||
);
|
||||
}
|
||||
|
||||
Widget _buildTagsSwitcher(ServerProvider provider) {
|
||||
TagSwitcher _buildTagsSwitcher(ServerProvider provider) {
|
||||
return TagSwitcher(
|
||||
tags: provider.tags,
|
||||
width: _media.size.width,
|
||||
@@ -115,61 +117,33 @@ class _ServerPageState extends State<ServerPage>
|
||||
required ServerProvider provider,
|
||||
required List<String> filtered,
|
||||
EdgeInsets? padding = const EdgeInsets.fromLTRB(7, 0, 7, 7),
|
||||
bool buildTags = true,
|
||||
}) {
|
||||
final count = buildTags ? filtered.length + 2 : filtered.length + 1;
|
||||
final count = filtered.length + 1;
|
||||
return ListView.builder(
|
||||
padding: padding,
|
||||
itemCount: count,
|
||||
itemBuilder: (_, index) {
|
||||
if (index == 0 && buildTags) return _buildTagsSwitcher(provider);
|
||||
|
||||
// Issue #130
|
||||
if (index == count - 1) return UIs.height77;
|
||||
|
||||
if (buildTags) index--;
|
||||
return _buildEachServerCard(provider.pick(id: filtered[index]));
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
Widget _buildBodyMedium({
|
||||
required ServerProvider pro,
|
||||
required List<String> filtered,
|
||||
}) {
|
||||
final left = filtered.where((e) => filtered.indexOf(e) % 2 == 0).toList();
|
||||
final right = filtered.where((e) => filtered.indexOf(e) % 2 == 1).toList();
|
||||
return Column(
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
children: [
|
||||
Padding(
|
||||
padding: const EdgeInsets.symmetric(horizontal: 7),
|
||||
child: _buildTagsSwitcher(pro),
|
||||
),
|
||||
Expanded(
|
||||
child: Row(
|
||||
children: [
|
||||
Expanded(
|
||||
child: _buildBodySmall(
|
||||
provider: pro,
|
||||
filtered: left,
|
||||
padding: const EdgeInsets.fromLTRB(7, 0, 0, 7),
|
||||
buildTags: false,
|
||||
),
|
||||
),
|
||||
Expanded(
|
||||
child: _buildBodySmall(
|
||||
provider: pro,
|
||||
filtered: right,
|
||||
padding: const EdgeInsets.fromLTRB(0, 0, 7, 7),
|
||||
buildTags: false,
|
||||
),
|
||||
),
|
||||
],
|
||||
))
|
||||
],
|
||||
);
|
||||
}
|
||||
// Widget _buildBodyMedium({
|
||||
// required ServerProvider pro,
|
||||
// required List<String> filtered,
|
||||
// }) {
|
||||
// return GridView.builder(
|
||||
// gridDelegate: const SliverGridDelegateWithFixedCrossAxisCount(
|
||||
// crossAxisCount: 2,
|
||||
// ),
|
||||
// itemCount: filtered.length,
|
||||
// itemBuilder: (context, index) {
|
||||
// return _buildEachServerCard(pro.pick(id: filtered[index]));
|
||||
// },
|
||||
// );
|
||||
// }
|
||||
|
||||
Widget _buildEachServerCard(Server? srv) {
|
||||
if (srv == null) {
|
||||
@@ -178,7 +152,7 @@ class _ServerPageState extends State<ServerPage>
|
||||
|
||||
return CardX(
|
||||
key: Key(srv.spi.id + (_tag ?? '')),
|
||||
InkWell(
|
||||
child: _buildRealServerCard(srv).padding(const EdgeInsets.all(13)).tap(
|
||||
onTap: () {
|
||||
if (srv.canViewDetails) {
|
||||
AppRoute.serverDetail(spi: srv.spi).go(context);
|
||||
@@ -186,7 +160,7 @@ class _ServerPageState extends State<ServerPage>
|
||||
_showFailReason(srv.status);
|
||||
}
|
||||
},
|
||||
onLongPress: () {
|
||||
onLongTap: () {
|
||||
if (srv.state == ServerState.finished) {
|
||||
final id = srv.spi.id;
|
||||
final cardStatus = getCardNoti(id);
|
||||
@@ -197,10 +171,6 @@ class _ServerPageState extends State<ServerPage>
|
||||
AppRoute.serverEdit(spi: srv.spi).go(context);
|
||||
}
|
||||
},
|
||||
child: Padding(
|
||||
padding: const EdgeInsets.all(13),
|
||||
child: _buildRealServerCard(srv),
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user