fix & opt.

fix: net iface parse
opt: `ssh` page auto unpress `ctrl or alt` after call
opt: enable translation for menu
opt: add confirm to `docker` page
This commit is contained in:
LollipopKit
2023-01-29 17:39:27 +08:00
parent f3c670d82c
commit 7c0e01d0d5
10 changed files with 122 additions and 51 deletions

View File

@@ -1,7 +1,6 @@
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'package:toolbox/core/utils.dart';
import 'package:toolbox/data/model/app/menu_item.dart';
import 'package:toolbox/data/model/docker/ps.dart';
import 'package:toolbox/data/model/server/server_private_info.dart';
import 'package:toolbox/data/provider/docker.dart';
@@ -17,6 +16,9 @@ import 'package:toolbox/view/widget/two_line_text.dart';
import 'package:toolbox/view/widget/round_rect_card.dart';
import 'package:toolbox/view/widget/url_text.dart';
import '../../data/res/menu.dart';
import '../widget/dropdown_menu.dart';
class DockerManagePage extends StatefulWidget {
final ServerPrivateInfo spi;
const DockerManagePage(this.spi, {Key? key}) : super(key: key);
@@ -288,11 +290,35 @@ class _DockerManagePageState extends State<DockerManagePage> {
trailing: IconButton(
icon: const Icon(Icons.delete),
onPressed: () async {
final result = await _docker.run('docker rmi ${e.id} -f');
if (result != null) {
showSnackBar(
context, Text(getErrMsg(result) ?? _s.unknownError));
}
showRoundDialog(
context,
_s.attention,
Text(_s.sureDelete(e.repo)),
[
TextButton(
onPressed: () => Navigator.of(context).pop(),
child: Text(_s.cancel),
),
TextButton(
onPressed: () async {
Navigator.of(context).pop();
final result = await _docker.run(
'docker rmi ${e.id} -f',
);
if (result != null) {
showSnackBar(
context,
Text(getErrMsg(result) ?? _s.unknownError),
);
}
},
child: Text(
_s.ok,
style: const TextStyle(color: Colors.red),
),
),
],
);
},
),
),
@@ -414,27 +440,26 @@ class _DockerManagePageState extends State<DockerManagePage> {
children: running.map(
(item) {
return ListTile(
title: Text(item.image),
subtitle: Text(item.status),
trailing:
_buildMoreBtn(item.running, item.containerId, docker.isBusy),
title: Text(item.name),
subtitle: Text('${item.image} ${item.status}'),
trailing: _buildMoreBtn(item, docker.isBusy),
);
},
).toList(),
);
}
Widget _buildMoreBtn(bool running, String containerId, bool busy) {
final item = running ? DockerMenuItems.stop : DockerMenuItems.start;
Widget _buildMoreBtn(DockerPsItem dItem, bool busy) {
final item = dItem.running ? DockerMenuItems.stop : DockerMenuItems.start;
return buildPopuopMenu(
items: [
PopupMenuItem<DropdownBtnItem>(
value: item,
child: item.build,
child: item.build(_s),
),
PopupMenuItem<DropdownBtnItem>(
value: DockerMenuItems.rm,
child: DockerMenuItems.rm.build,
child: DockerMenuItems.rm.build(_s),
),
],
onSelected: (value) {
@@ -445,13 +470,19 @@ class _DockerManagePageState extends State<DockerManagePage> {
final item = value as DropdownBtnItem;
switch (item) {
case DockerMenuItems.rm:
_docker.delete(containerId);
showRoundDialog(
context,
_s.attention,
Text(_s.sureDelete(dItem.name)),
[],
);
_docker.delete(dItem.containerId);
break;
case DockerMenuItems.start:
_docker.start(containerId);
_docker.start(dItem.containerId);
break;
case DockerMenuItems.stop:
_docker.stop(containerId);
_docker.stop(dItem.containerId);
break;
}
},

View File

@@ -5,7 +5,6 @@ import 'package:get_it/get_it.dart';
import 'package:provider/provider.dart';
import 'package:toolbox/core/route.dart';
import 'package:toolbox/core/utils.dart';
import 'package:toolbox/data/model/app/menu_item.dart';
import 'package:toolbox/data/model/server/server.dart';
import 'package:toolbox/data/model/server/server_private_info.dart';
import 'package:toolbox/data/model/server/server_status.dart';
@@ -27,6 +26,8 @@ import 'package:toolbox/view/page/ssh.dart';
import 'package:toolbox/view/widget/picker.dart';
import 'package:toolbox/view/widget/round_rect_card.dart';
import '../../../data/res/menu.dart';
import '../../widget/dropdown_menu.dart';
import '../../widget/url_text.dart';
class ServerPage extends StatefulWidget {
@@ -239,14 +240,14 @@ class _ServerPageState extends State<ServerPage>
...ServerTabMenuItems.firstItems.map(
(item) => PopupMenuItem<DropdownBtnItem>(
value: item,
child: item.build,
child: item.build(_s),
),
),
const PopupMenuDivider(height: 1),
...ServerTabMenuItems.secondItems.map(
(item) => PopupMenuItem<DropdownBtnItem>(
value: item,
child: item.build,
child: item.build(_s),
),
),
],

View File

@@ -0,0 +1,26 @@
import 'package:flutter/material.dart';
import 'package:toolbox/data/res/color.dart';
import 'package:toolbox/data/res/menu.dart';
import 'package:toolbox/generated/l10n.dart';
class DropdownBtnItem {
final String text;
final IconData icon;
const DropdownBtnItem({
required this.text,
required this.icon,
});
Widget build(S s) => Row(
children: [
Icon(icon, color: primaryColor),
const SizedBox(
width: 10,
),
Text(
getDropdownBtnText(s, text),
),
],
);
}