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'** /// **'Start'**
String get start; String get start;
/// No description provided for @stats.
///
/// In en, this message translates to:
/// **'Stats'**
String get stats;
/// No description provided for @stop. /// No description provided for @stop.
/// ///
/// In en, this message translates to: /// In en, this message translates to:

View File

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

View File

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

View File

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

View File

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

View File

@@ -52,11 +52,12 @@ enum DockerMenuType {
restart, restart,
rm, rm,
logs, logs,
terminal; terminal,
stats;
static List<DockerMenuType> items(bool running) { static List<DockerMenuType> items(bool running) {
if (running) { if (running) {
return [stop, restart, rm, logs, terminal]; return [stop, restart, rm, logs, terminal, stats];
} else { } else {
return [start, rm, logs]; return [start, rm, logs];
} }
@@ -76,6 +77,8 @@ enum DockerMenuType {
return Icons.logo_dev; return Icons.logo_dev;
case DockerMenuType.terminal: case DockerMenuType.terminal:
return Icons.terminal; return Icons.terminal;
case DockerMenuType.stats:
return Icons.bar_chart;
} }
} }
@@ -93,6 +96,8 @@ enum DockerMenuType {
return s.log; return s.log;
case DockerMenuType.terminal: case DockerMenuType.terminal:
return s.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.", "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", "sshVirtualKeyAutoOff": "Automatische Umschaltung der virtuellen Tasten",
"start": "Start", "start": "Start",
"stats": "Statistik",
"stop": "Stop", "stop": "Stop",
"success": "Erfolgreich", "success": "Erfolgreich",
"sureDelete": "Soll [{name}] wirklich gelöscht werden?", "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.", "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", "sshVirtualKeyAutoOff": "Auto switching of virtual keys",
"start": "Start", "start": "Start",
"stats": "Stats",
"stop": "Stop", "stop": "Stop",
"success": "Success", "success": "Success",
"sureDelete": "Are you sure to delete [{name}]?", "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.", "sshTip": "Fungsi ini sekarang dalam tahap eksperimen.\n\nHarap laporkan bug di {url} atau bergabunglah dengan pengembangan kami.",
"sshVirtualKeyAutoOff": "Switching Otomatis Kunci Virtual", "sshVirtualKeyAutoOff": "Switching Otomatis Kunci Virtual",
"start": "Awal", "start": "Awal",
"stats": "Statistik",
"stop": "Berhenti", "stop": "Berhenti",
"success": "Kesuksesan", "success": "Kesuksesan",
"sureDelete": "Apakah Anda pasti akan menghapus [{name}]?", "sureDelete": "Apakah Anda pasti akan menghapus [{name}]?",

View File

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

View File

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

View File

@@ -265,7 +265,7 @@ class _DockerManagePageState extends State<DockerManagePage> {
_docker.edition ?? _s.unknown, _docker.edition ?? _s.unknown,
_docker.version ?? _s.unknown, _docker.version ?? _s.unknown,
), ),
..._buildPsItems(), _buildPsItems(),
_buildImages(), _buildImages(),
_buildEditHost(), _buildEditHost(),
].map((e) => RoundRectCard(e))); ].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(); final items = _docker.items!.map(_buildPsItem).toList();
items.insert( items.insert(
0, 0,
@@ -456,46 +456,30 @@ class _DockerManagePageState extends State<DockerManagePage> {
subtitle: Text(_buildSubtitle(_docker.items!), style: grey), subtitle: Text(_buildSubtitle(_docker.items!), style: grey),
), ),
); );
return items; return Column(
mainAxisSize: MainAxisSize.min,
children: items,
);
} }
Widget _buildPsItem(DockerPsItem item) { Widget _buildPsItem(DockerPsItem item) {
return Column( return ListTile(
mainAxisSize: MainAxisSize.min,
children: [
ListTile(
title: Text(item.name), title: Text(item.name),
subtitle: Text( subtitle: Text(
'${item.image}\n${item.status}', '${item.image}\n${item.status}',
style: textSize13Grey, style: textSize13Grey,
), ),
trailing: _buildMoreBtn(item, _docker.isBusy), 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) { Widget _buildMoreBtn(DockerPsItem dItem, bool busy) {
return PopupMenu( return PopupMenu(
items: items: DockerMenuType.items(dItem.running)
DockerMenuType.items(dItem.running).map((e) => e.build(_s)).toList(), .map(
(e) => e.build(_s),
)
.toList(),
onSelected: (DockerMenuType item) async { onSelected: (DockerMenuType item) async {
if (busy) { if (busy) {
showSnackBar(context, Text(_s.isBusy)); showSnackBar(context, Text(_s.isBusy));
@@ -544,6 +528,25 @@ class _DockerManagePageState extends State<DockerManagePage> {
), ),
'Docker terminal', 'Docker terminal',
).go(context); ).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;
} }
}, },
); );