opt.: move docker stats to more btn

This commit is contained in:
lollipopkit
2023-08-05 12:40:45 +08:00
parent 3405172d76
commit 5b2ed02428
12 changed files with 67 additions and 33 deletions

View File

@@ -1154,6 +1154,12 @@ abstract class S {
/// **'Start'**
String get start;
/// No description provided for @stats.
///
/// In en, this message translates to:
/// **'Stats'**
String get stats;
/// No description provided for @stop.
///
/// In en, this message translates to:

View File

@@ -562,6 +562,9 @@ class SDe extends S {
@override
String get start => 'Start';
@override
String get stats => 'Statistik';
@override
String get stop => 'Stop';

View File

@@ -562,6 +562,9 @@ class SEn extends S {
@override
String get start => 'Start';
@override
String get stats => 'Stats';
@override
String get stop => 'Stop';

View File

@@ -562,6 +562,9 @@ class SId extends S {
@override
String get start => 'Awal';
@override
String get stats => 'Statistik';
@override
String get stop => 'Berhenti';

View File

@@ -562,6 +562,9 @@ class SZh extends S {
@override
String get start => '开始';
@override
String get stats => '统计';
@override
String get stop => '停止';
@@ -1247,6 +1250,9 @@ class SZhTw extends SZh {
@override
String get start => '開始';
@override
String get stats => '統計';
@override
String get stop => '停止';

View File

@@ -52,11 +52,12 @@ enum DockerMenuType {
restart,
rm,
logs,
terminal;
terminal,
stats;
static List<DockerMenuType> items(bool running) {
if (running) {
return [stop, restart, rm, logs, terminal];
return [stop, restart, rm, logs, terminal, stats];
} else {
return [start, rm, logs];
}
@@ -76,6 +77,8 @@ enum DockerMenuType {
return Icons.logo_dev;
case DockerMenuType.terminal:
return Icons.terminal;
case DockerMenuType.stats:
return Icons.bar_chart;
}
}
@@ -93,6 +96,8 @@ enum DockerMenuType {
return s.log;
case DockerMenuType.terminal:
return s.terminal;
case DockerMenuType.stats:
return s.stats;
}
}

View File

@@ -176,6 +176,7 @@
"sshTip": "Diese Funktion befindet sich jetzt in der Experimentierphase.\n\nBitte melde Bugs auf {url} oder mach mit bei der Entwicklung.",
"sshVirtualKeyAutoOff": "Automatische Umschaltung der virtuellen Tasten",
"start": "Start",
"stats": "Statistik",
"stop": "Stop",
"success": "Erfolgreich",
"sureDelete": "Soll [{name}] wirklich gelöscht werden?",

View File

@@ -176,6 +176,7 @@
"sshTip": "This function is now in the experimental stage.\n\nPlease report bugs on {url} or join our development.",
"sshVirtualKeyAutoOff": "Auto switching of virtual keys",
"start": "Start",
"stats": "Stats",
"stop": "Stop",
"success": "Success",
"sureDelete": "Are you sure to delete [{name}]?",

View File

@@ -176,6 +176,7 @@
"sshTip": "Fungsi ini sekarang dalam tahap eksperimen.\n\nHarap laporkan bug di {url} atau bergabunglah dengan pengembangan kami.",
"sshVirtualKeyAutoOff": "Switching Otomatis Kunci Virtual",
"start": "Awal",
"stats": "Statistik",
"stop": "Berhenti",
"success": "Kesuksesan",
"sureDelete": "Apakah Anda pasti akan menghapus [{name}]?",

View File

@@ -176,6 +176,7 @@
"sshTip": "该功能目前处于测试阶段。\n\n请在 {url} 反馈问题,或者加入我们开发。",
"sshVirtualKeyAutoOff": "虚拟按键自动切换",
"start": "开始",
"stats": "统计",
"stop": "停止",
"success": "成功",
"sureDelete": "确定删除 [{name}]",

View File

@@ -176,6 +176,7 @@
"sshTip": "該功能目前處於測試階段。\n\n請在 {url} 反饋問題,或者加入我們開發。",
"sshVirtualKeyAutoOff": "虛擬按鍵自動切換",
"start": "開始",
"stats": "統計",
"stop": "停止",
"success": "成功",
"sureDelete": "確定刪除 [{name}]",

View File

@@ -265,7 +265,7 @@ class _DockerManagePageState extends State<DockerManagePage> {
_docker.edition ?? _s.unknown,
_docker.version ?? _s.unknown,
),
..._buildPsItems(),
_buildPsItems(),
_buildImages(),
_buildEditHost(),
].map((e) => RoundRectCard(e)));
@@ -447,7 +447,7 @@ class _DockerManagePageState extends State<DockerManagePage> {
);
}
List<Widget> _buildPsItems() {
Widget _buildPsItems() {
final items = _docker.items!.map(_buildPsItem).toList();
items.insert(
0,
@@ -456,46 +456,30 @@ class _DockerManagePageState extends State<DockerManagePage> {
subtitle: Text(_buildSubtitle(_docker.items!), style: grey),
),
);
return items;
return Column(
mainAxisSize: MainAxisSize.min,
children: items,
);
}
Widget _buildPsItem(DockerPsItem item) {
return Column(
mainAxisSize: MainAxisSize.min,
children: [
ListTile(
return ListTile(
title: Text(item.name),
subtitle: Text(
'${item.image}\n${item.status}',
style: textSize13Grey,
),
trailing: _buildMoreBtn(item, _docker.isBusy),
),
_buildPsItemStat(item),
],
);
}
Widget _buildPsItemStat(DockerPsItem item) {
if (!item.running) return const SizedBox();
return Padding(
padding: const EdgeInsets.only(left: 17, bottom: 11, right: 17),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Text(item.cpu ?? _s.unknown, style: grey),
Text(item.mem ?? _s.unknown, style: grey),
Text(item.net ?? _s.unknown, style: grey),
Text(item.disk ?? _s.unknown, style: grey),
],
),
);
}
Widget _buildMoreBtn(DockerPsItem dItem, bool busy) {
return PopupMenu(
items:
DockerMenuType.items(dItem.running).map((e) => e.build(_s)).toList(),
items: DockerMenuType.items(dItem.running)
.map(
(e) => e.build(_s),
)
.toList(),
onSelected: (DockerMenuType item) async {
if (busy) {
showSnackBar(context, Text(_s.isBusy));
@@ -544,6 +528,25 @@ class _DockerManagePageState extends State<DockerManagePage> {
),
'Docker terminal',
).go(context);
break;
case DockerMenuType.stats:
showRoundDialog(
context: context,
title: Text(_s.stats),
child: Text(
'CPU: ${dItem.cpu}\n'
'Mem: ${dItem.mem}\n'
'Net: ${dItem.net}\n'
'Block: ${dItem.disk}',
),
actions: [
TextButton(
onPressed: () => context.pop(),
child: Text(_s.ok),
),
],
);
break;
}
},
);