new: VersionRelated

This commit is contained in:
lollipopkit
2024-03-20 20:26:22 -06:00
parent d5ce11c788
commit fae3a20a9e
12 changed files with 166 additions and 95 deletions

View File

@@ -1,10 +1,12 @@
import 'package:flutter/material.dart';
import 'package:icons_plus/icons_plus.dart';
import 'package:provider/provider.dart';
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/status_cmd_type.dart';
import 'package:toolbox/data/model/app/server_detail_card.dart';
import 'package:toolbox/data/model/server/battery.dart';
import 'package:toolbox/data/model/server/cpu.dart';
import 'package:toolbox/data/model/server/disk.dart';
@@ -22,7 +24,6 @@ import '../../../core/route.dart';
import '../../../data/model/server/server.dart';
import '../../../data/provider/server.dart';
import '../../../data/res/color.dart';
import '../../../data/res/default.dart';
import '../../../data/res/ui.dart';
import '../../widget/appbar.dart';
import '../../widget/cardx.dart';
@@ -39,7 +40,7 @@ class ServerDetailPage extends StatefulWidget {
class _ServerDetailPageState extends State<ServerDetailPage>
with SingleTickerProviderStateMixin {
late final _cardBuildMap = Map.fromIterables(
Defaults.detailCardOrder,
ServerDetailCards.names,
[
_buildAbout,
_buildCPUView,
@@ -51,6 +52,7 @@ class _ServerDetailPageState extends State<ServerDetailPage>
_buildSensors,
_buildTemperature,
_buildBatteries,
_buildPve,
],
);
@@ -623,7 +625,7 @@ class _ServerDetailPageState extends State<ServerDetailPage>
title: Text(l10n.battery),
leading: const Icon(Icons.battery_charging_full, size: 17),
childrenPadding: const EdgeInsets.only(bottom: 7),
initiallyExpanded: _getInitExpand(ss.batteries.length),
initiallyExpanded: _getInitExpand(ss.batteries.length, 2),
children: ss.batteries.map(_buildBatteryItem).toList(),
),
);
@@ -662,7 +664,7 @@ class _ServerDetailPageState extends State<ServerDetailPage>
title: Text(l10n.sensors),
leading: const Icon(Icons.thermostat, size: 17),
childrenPadding: const EdgeInsets.only(bottom: 7),
initiallyExpanded: _getInitExpand(ss.sensors.length, 3),
initiallyExpanded: _getInitExpand(ss.sensors.length, 2),
children: ss.sensors.map(_buildSensorItem).toList(),
),
);
@@ -700,6 +702,19 @@ class _ServerDetailPageState extends State<ServerDetailPage>
);
}
Widget _buildPve(_) {
if (widget.spi.custom?.pveAddr == null) return UIs.placeholder;
return CardX(
child: ListTile(
title: const Text('PVE'),
subtitle: Text(widget.spi.custom!.pveAddr!),
leading: const Icon(FontAwesome.server_solid, size: 17),
trailing: const Icon(Icons.chevron_right),
onTap: () => AppRoute.pve(spi: widget.spi).go(context),
),
);
}
Widget _buildAnimatedText(Key key, String text, TextStyle style) {
return AnimatedSwitcher(
duration: const Duration(milliseconds: 277),
@@ -717,8 +732,8 @@ class _ServerDetailPageState extends State<ServerDetailPage>
}
bool _getInitExpand(int len, [int? max]) {
if (_collapse && len <= (max ?? 7)) return true;
return false;
if (!_collapse) return true;
return len <= (max ?? 3);
}
}

View File

@@ -2,7 +2,7 @@ import 'package:flutter/material.dart';
import 'package:toolbox/core/extension/context/locale.dart';
import 'package:toolbox/core/extension/context/snackbar.dart';
import 'package:toolbox/core/utils/platform/base.dart';
import 'package:toolbox/data/res/default.dart';
import 'package:toolbox/data/model/app/server_detail_card.dart';
import 'package:toolbox/data/res/logger.dart';
import 'package:toolbox/data/res/store.dart';
@@ -39,11 +39,12 @@ class _ServerDetailOrderPageState extends State<ServerDetailOrderPage> {
return List<String>.from(vals);
} catch (e) {
Loggers.app.info('ServerDetailOrderPage: $e');
return Defaults.detailCardOrder;
return ServerDetailCards.names;
}
}();
final disabled =
Defaults.detailCardOrder.where((e) => !keys.contains(e)).toList();
final disabled = ServerDetailCards.names
.where((e) => !keys.contains(e))
.toList();
final allKeys = [...keys, ...disabled];
return ReorderableListView.builder(
padding: const EdgeInsets.all(7),

View File

@@ -1,10 +1,10 @@
import 'package:flutter/material.dart';
import 'package:toolbox/core/extension/context/locale.dart';
import 'package:toolbox/core/extension/context/snackbar.dart';
import 'package:toolbox/core/utils/platform/base.dart';
import 'package:toolbox/data/model/app/menu/server_func.dart';
import 'package:toolbox/data/res/logger.dart';
import 'package:toolbox/data/res/store.dart';
import 'package:toolbox/data/res/ui.dart';
import '../../../../core/extension/order.dart';
import '../../../widget/appbar.dart';
@@ -51,12 +51,20 @@ class _ServerDetailOrderPageState extends State<ServerFuncBtnsOrderPage> {
padding: const EdgeInsets.all(7),
itemBuilder: (_, idx) {
final key = allKeys[idx];
final funcBtn = ServerFuncBtn.values[key];
return CardX(
key: ValueKey(idx),
child: ListTile(
title: Text(ServerFuncBtn.values[key].toStr),
title: RichText(
text: TextSpan(
children: [
WidgetSpan(child: funcBtn.icon(2)),
const WidgetSpan(child: UIs.width7),
TextSpan(text: funcBtn.toStr, style: UIs.textGrey),
],
),
),
leading: _buildCheckBox(keys, key, idx, idx < keys.length),
trailing: isDesktop ? null : const Icon(Icons.drag_handle),
),
);
},

View File

@@ -41,10 +41,8 @@ class ServerFuncBtnsTopRight extends StatelessWidget {
value: e,
child: Row(
children: [
e.icon,
const SizedBox(
width: 10,
),
e.icon(),
const SizedBox(width: 10),
Text(e.toStr),
],
),
@@ -68,9 +66,13 @@ class ServerFuncBtns extends StatelessWidget {
Widget build(BuildContext context) {
final btns = () {
try {
return Stores.setting.serverFuncBtns
.fetch()
.map((e) => ServerFuncBtn.values[e]);
final vals = <ServerFuncBtn>[];
final list = Stores.setting.serverFuncBtns.fetch();
for (final idx in list) {
if (idx < 0 || idx >= ServerFuncBtn.values.length) continue;
vals.add(ServerFuncBtn.values[idx]);
}
return vals;
} catch (e) {
return ServerFuncBtn.values;
}
@@ -84,7 +86,7 @@ class ServerFuncBtns extends StatelessWidget {
onPressed: () => _onTapMoreBtns(e, spi, context),
padding: EdgeInsets.zero,
tooltip: e.toStr,
icon: e.icon,
icon: e.icon(),
)
: Padding(
padding: const EdgeInsets.only(bottom: 13),
@@ -94,7 +96,7 @@ class ServerFuncBtns extends StatelessWidget {
IconButton(
onPressed: () => _onTapMoreBtns(e, spi, context),
padding: EdgeInsets.zero,
icon: e.icon,
icon: e.icon(),
),
Text(e.toStr, style: UIs.text11Grey)
],
@@ -161,12 +163,6 @@ void _onTapMoreBtns(
check: () => _checkClient(context, spi.id),
);
break;
case ServerFuncBtn.pve:
AppRoute.pve(spi: spi).checkGo(
context: context,
check: () => _checkClient(context, spi.id),
);
break;
}
}