fix & opt

- fix docker not found regexp
- use en_US in docker cmd
-
This commit is contained in:
Junyuan Feng
2022-05-12 09:50:28 +08:00
parent 7e8e0e2efc
commit bfe7140a44
13 changed files with 114 additions and 62 deletions

View File

@@ -58,4 +58,6 @@ extension StringX on String {
); );
}); });
} }
String get withLangExport => 'export LANG=en_US.UTF-8 && $this';
} }

View File

@@ -4,6 +4,7 @@ import 'dart:typed_data';
import 'package:dartssh2/dartssh2.dart'; import 'package:dartssh2/dartssh2.dart';
import 'package:logging/logging.dart'; import 'package:logging/logging.dart';
import 'package:toolbox/core/extension/stringx.dart';
import 'package:toolbox/core/extension/uint8list.dart'; import 'package:toolbox/core/extension/uint8list.dart';
import 'package:toolbox/core/provider_base.dart'; import 'package:toolbox/core/provider_base.dart';
import 'package:toolbox/data/model/apt/upgrade_pkg_info.dart'; import 'package:toolbox/data/model/apt/upgrade_pkg_info.dart';
@@ -101,7 +102,7 @@ class AptProvider extends BusyProvider {
onUpdate!(); onUpdate!();
}); });
await session.done; await session.done;
return await client!.run('apt list --upgradeable').string; return await client!.run('apt list --upgradeable'.withLangExport).string;
} }
} }

View File

@@ -1,9 +1,10 @@
import 'package:dartssh2/dartssh2.dart'; import 'package:dartssh2/dartssh2.dart';
import 'package:toolbox/core/extension/stringx.dart';
import 'package:toolbox/core/extension/uint8list.dart'; import 'package:toolbox/core/extension/uint8list.dart';
import 'package:toolbox/core/provider_base.dart'; import 'package:toolbox/core/provider_base.dart';
import 'package:toolbox/data/model/docker/ps.dart'; import 'package:toolbox/data/model/docker/ps.dart';
final dockerNotFound = RegExp('(command not found | Unknown command)'); final dockerNotFound = RegExp(r'command not found|Unknown command');
class DockerProvider extends BusyProvider { class DockerProvider extends BusyProvider {
SSHClient? client; SSHClient? client;
@@ -29,7 +30,8 @@ class DockerProvider extends BusyProvider {
return; return;
} }
final verRaw = await client!.run('docker version').string; final verRaw = await client!.run('docker version'.withLangExport).string;
print(verRaw);
if (verRaw.contains(dockerNotFound)) { if (verRaw.contains(dockerNotFound)) {
error = 'docker not found'; error = 'docker not found';
notifyListeners(); notifyListeners();
@@ -39,16 +41,18 @@ class DockerProvider extends BusyProvider {
if (verSplit.length < 3) { if (verSplit.length < 3) {
error = 'invalid version'; error = 'invalid version';
notifyListeners(); notifyListeners();
return;
} else { } else {
try { try {
version = verSplit[1].split(' ').last; version = verSplit[1].split(' ').last;
edition = verSplit[0].split(': ')[1]; edition = verSplit[0].split(': ')[1];
} catch (e) { } catch (e) {
error = e.toString(); error = e.toString();
return;
} }
} }
final raw = await client!.run('docker ps -a').string; final raw = await client!.run('docker ps -a'.withLangExport).string;
final lines = raw.split('\n'); final lines = raw.split('\n');
lines.removeAt(0); lines.removeAt(0);
lines.removeWhere((element) => element.isEmpty); lines.removeWhere((element) => element.isEmpty);

View File

@@ -2,9 +2,9 @@
class BuildData { class BuildData {
static const String name = "ServerBox"; static const String name = "ServerBox";
static const int build = 129; static const int build = 133;
static const String engine = static const String engine =
"Flutter 2.10.5 • channel stable • https://github.com/flutter/flutter.git\nFramework • revision 5464c5bac7 (3 weeks ago) • 2022-04-18 09:55:37 -0700\nEngine • revision 57d3bac3dd\nTools • Dart 2.16.2 • DevTools 2.9.2\n"; "Flutter 2.10.5 • channel stable • https://github.com/flutter/flutter.git\nFramework • revision 5464c5bac7 (3 weeks ago) • 2022-04-18 09:55:37 -0700\nEngine • revision 57d3bac3dd\nTools • Dart 2.16.2 • DevTools 2.9.2\n";
static const String buildAt = "2022-05-08 08:37:10.208726"; static const String buildAt = "2022-05-10 21:49:33.780998";
static const int modifications = 14; static const int modifications = 1;
} }

View File

@@ -3,3 +3,4 @@ const baseUrl = backendUrl + '/toolbox';
const joinQQGroupUrl = 'https://jq.qq.com/?_wv=1027&k=G0hUmPAq'; const joinQQGroupUrl = 'https://jq.qq.com/?_wv=1027&k=G0hUmPAq';
const myGithub = 'https://github.com/LollipopKit'; const myGithub = 'https://github.com/LollipopKit';
const rainSunMeGithub = 'https://github.com/RainSunMe'; const rainSunMeGithub = 'https://github.com/RainSunMe';
const issueUrl = 'https://github.com/LollipopKit/flutter_server_box/issues';

View File

@@ -36,21 +36,26 @@ class MessageLookup extends MessageLookupByLibrary {
static String m6(code) => "request failed, status code: ${code}"; static String m6(code) => "request failed, status code: ${code}";
static String m7(myGithub) => "\nMade with ❤️ by ${myGithub}"; static String m7(url) =>
"Please make sure that docker is installed correctly, or that you are using a non-self-compiled version. If you don\'t have the above issues, please submit an issue on ${url}.";
static String m8(user) => "Password for ${user}"; static String m8(myGithub) => "\nMade with ❤️ by ${myGithub}";
static String m9(time) => "Spent time: ${time}"; static String m9(user) => "Password for ${user}";
static String m10(name) => "Are you sure to delete [${name}]?"; static String m10(url) => "Please report bugs on ${url}";
static String m11(server) => "Are you sure to delete server [${server}]?"; static String m11(time) => "Spent time: ${time}";
static String m12(build) => "Found: v1.0.${build}, click to update"; static String m12(name) => "Are you sure to delete [${name}]?";
static String m13(build) => "Current: v1.0.${build}"; static String m13(server) => "Are you sure to delete server [${server}]?";
static String m14(build) => "Current: v1.0.${build}, is up to date"; static String m14(build) => "Found: v1.0.${build}, click to update";
static String m15(build) => "Current: v1.0.${build}";
static String m16(build) => "Current: v1.0.${build}, is up to date";
final messages = _notInlinedMessages(_notInlinedMessages); final messages = _notInlinedMessages(_notInlinedMessages);
static Map<String, Function> _notInlinedMessages(_) => <String, Function>{ static Map<String, Function> _notInlinedMessages(_) => <String, Function>{
@@ -113,6 +118,7 @@ class MessageLookup extends MessageLookupByLibrary {
"install": MessageLookupByLibrary.simpleMessage("install"), "install": MessageLookupByLibrary.simpleMessage("install"),
"installDockerWithUrl": MessageLookupByLibrary.simpleMessage( "installDockerWithUrl": MessageLookupByLibrary.simpleMessage(
"Please https://docs.docker.com/engine/install docker first."), "Please https://docs.docker.com/engine/install docker first."),
"invalidVersionHelp": m7,
"keepForeground": "keepForeground":
MessageLookupByLibrary.simpleMessage("Keep app foreground!"), MessageLookupByLibrary.simpleMessage("Keep app foreground!"),
"keyAuth": MessageLookupByLibrary.simpleMessage("Key Auth"), "keyAuth": MessageLookupByLibrary.simpleMessage("Key Auth"),
@@ -121,12 +127,13 @@ class MessageLookup extends MessageLookupByLibrary {
"loadingFiles": "loadingFiles":
MessageLookupByLibrary.simpleMessage("Loading files..."), MessageLookupByLibrary.simpleMessage("Loading files..."),
"loss": MessageLookupByLibrary.simpleMessage("Loss"), "loss": MessageLookupByLibrary.simpleMessage("Loss"),
"madeWithLove": m7, "madeWithLove": m8,
"max": MessageLookupByLibrary.simpleMessage("max"), "max": MessageLookupByLibrary.simpleMessage("max"),
"min": MessageLookupByLibrary.simpleMessage("min"), "min": MessageLookupByLibrary.simpleMessage("min"),
"ms": MessageLookupByLibrary.simpleMessage("ms"), "ms": MessageLookupByLibrary.simpleMessage("ms"),
"name": MessageLookupByLibrary.simpleMessage("Name"), "name": MessageLookupByLibrary.simpleMessage("Name"),
"noClient": MessageLookupByLibrary.simpleMessage("No client"), "noClient": MessageLookupByLibrary.simpleMessage("No client"),
"noInterface": MessageLookupByLibrary.simpleMessage("No interface"),
"noResult": MessageLookupByLibrary.simpleMessage("No result"), "noResult": MessageLookupByLibrary.simpleMessage("No result"),
"noSavedPrivateKey": "noSavedPrivateKey":
MessageLookupByLibrary.simpleMessage("No saved private keys."), MessageLookupByLibrary.simpleMessage("No saved private keys."),
@@ -153,10 +160,9 @@ class MessageLookup extends MessageLookupByLibrary {
"port": MessageLookupByLibrary.simpleMessage("Port"), "port": MessageLookupByLibrary.simpleMessage("Port"),
"privateKey": MessageLookupByLibrary.simpleMessage("Private Key"), "privateKey": MessageLookupByLibrary.simpleMessage("Private Key"),
"pwd": MessageLookupByLibrary.simpleMessage("Password"), "pwd": MessageLookupByLibrary.simpleMessage("Password"),
"pwdForUser": m8, "pwdForUser": m9,
"rename": MessageLookupByLibrary.simpleMessage("Rename"), "rename": MessageLookupByLibrary.simpleMessage("Rename"),
"reportBugsOnGithubIssue": MessageLookupByLibrary.simpleMessage( "reportBugsOnGithubIssue": m10,
"Please report bugs on https://github.com/LollipopKit/flutter_server_box/issues"),
"result": MessageLookupByLibrary.simpleMessage("Result"), "result": MessageLookupByLibrary.simpleMessage("Result"),
"run": MessageLookupByLibrary.simpleMessage("Run"), "run": MessageLookupByLibrary.simpleMessage("Run"),
"save": MessageLookupByLibrary.simpleMessage("Save"), "save": MessageLookupByLibrary.simpleMessage("Save"),
@@ -180,11 +186,11 @@ class MessageLookup extends MessageLookupByLibrary {
"sftpSSHConnected": "sftpSSHConnected":
MessageLookupByLibrary.simpleMessage("SFTP Connected"), MessageLookupByLibrary.simpleMessage("SFTP Connected"),
"snippet": MessageLookupByLibrary.simpleMessage("Snippet"), "snippet": MessageLookupByLibrary.simpleMessage("Snippet"),
"spentTime": m9, "spentTime": m11,
"start": MessageLookupByLibrary.simpleMessage("Start"), "start": MessageLookupByLibrary.simpleMessage("Start"),
"stop": MessageLookupByLibrary.simpleMessage("Stop"), "stop": MessageLookupByLibrary.simpleMessage("Stop"),
"sureDelete": m10, "sureDelete": m12,
"sureToDeleteServer": m11, "sureToDeleteServer": m13,
"ttl": MessageLookupByLibrary.simpleMessage("TTL"), "ttl": MessageLookupByLibrary.simpleMessage("TTL"),
"unknown": MessageLookupByLibrary.simpleMessage("unknown"), "unknown": MessageLookupByLibrary.simpleMessage("unknown"),
"unknownError": MessageLookupByLibrary.simpleMessage("Unknown error"), "unknownError": MessageLookupByLibrary.simpleMessage("Unknown error"),
@@ -198,9 +204,9 @@ class MessageLookup extends MessageLookupByLibrary {
"upsideDown": MessageLookupByLibrary.simpleMessage("Upside Down"), "upsideDown": MessageLookupByLibrary.simpleMessage("Upside Down"),
"urlOrJson": MessageLookupByLibrary.simpleMessage("URL or JSON"), "urlOrJson": MessageLookupByLibrary.simpleMessage("URL or JSON"),
"user": MessageLookupByLibrary.simpleMessage("User"), "user": MessageLookupByLibrary.simpleMessage("User"),
"versionHaveUpdate": m12, "versionHaveUpdate": m14,
"versionUnknownUpdate": m13, "versionUnknownUpdate": m15,
"versionUpdated": m14, "versionUpdated": m16,
"waitConnection": MessageLookupByLibrary.simpleMessage( "waitConnection": MessageLookupByLibrary.simpleMessage(
"Please wait for the connection to be established."), "Please wait for the connection to be established."),
"willTakEeffectImmediately": "willTakEeffectImmediately":

View File

@@ -36,21 +36,26 @@ class MessageLookup extends MessageLookupByLibrary {
static String m6(code) => "请求失败, 状态码: ${code}"; static String m6(code) => "请求失败, 状态码: ${code}";
static String m7(myGithub) => "\n用❤️制作 by ${myGithub}"; static String m7(url) =>
"请确保正确安装了docker或者使用的非自编译版本。如果没有以上问题请在 ${url} 提交问题。";
static String m8(user) => "用户${user}的密码"; static String m8(myGithub) => "\n用❤️制作 by ${myGithub}";
static String m9(time) => "耗时: ${time}"; static String m9(user) => "用户${user}的密码";
static String m10(name) => "确定删除[${name}]"; static String m10(url) => "请到 ${url} 提交问题";
static String m11(server) => "你确定要删除服务器 [${server}] 吗?"; static String m11(time) => "耗时: ${time}";
static String m12(build) => "找到新版本v1.0.${build}, 点击更新"; static String m12(name) => "确定删除[${name}]";
static String m13(build) => "当前v1.0.${build}"; static String m13(server) => "你确定要删除服务器 [${server}] 吗?";
static String m14(build) => "当前v1.0.${build}, 已是最新版本"; static String m14(build) => "找到新版本v1.0.${build}, 点击更新";
static String m15(build) => "当前v1.0.${build}";
static String m16(build) => "当前v1.0.${build}, 已是最新版本";
final messages = _notInlinedMessages(_notInlinedMessages); final messages = _notInlinedMessages(_notInlinedMessages);
static Map<String, Function> _notInlinedMessages(_) => <String, Function>{ static Map<String, Function> _notInlinedMessages(_) => <String, Function>{
@@ -102,18 +107,20 @@ class MessageLookup extends MessageLookupByLibrary {
"install": MessageLookupByLibrary.simpleMessage("安装"), "install": MessageLookupByLibrary.simpleMessage("安装"),
"installDockerWithUrl": MessageLookupByLibrary.simpleMessage( "installDockerWithUrl": MessageLookupByLibrary.simpleMessage(
"请先 https://docs.docker.com/engine/install docker"), "请先 https://docs.docker.com/engine/install docker"),
"invalidVersionHelp": m7,
"keepForeground": MessageLookupByLibrary.simpleMessage("请保持应用处于前台!"), "keepForeground": MessageLookupByLibrary.simpleMessage("请保持应用处于前台!"),
"keyAuth": MessageLookupByLibrary.simpleMessage("公钥认证"), "keyAuth": MessageLookupByLibrary.simpleMessage("公钥认证"),
"launchPage": MessageLookupByLibrary.simpleMessage("启动页"), "launchPage": MessageLookupByLibrary.simpleMessage("启动页"),
"license": MessageLookupByLibrary.simpleMessage("开源证书"), "license": MessageLookupByLibrary.simpleMessage("开源证书"),
"loadingFiles": MessageLookupByLibrary.simpleMessage("正在加载目录。。。"), "loadingFiles": MessageLookupByLibrary.simpleMessage("正在加载目录。。。"),
"loss": MessageLookupByLibrary.simpleMessage("丢包率"), "loss": MessageLookupByLibrary.simpleMessage("丢包率"),
"madeWithLove": m7, "madeWithLove": m8,
"max": MessageLookupByLibrary.simpleMessage("最大"), "max": MessageLookupByLibrary.simpleMessage("最大"),
"min": MessageLookupByLibrary.simpleMessage("最小"), "min": MessageLookupByLibrary.simpleMessage("最小"),
"ms": MessageLookupByLibrary.simpleMessage("毫秒"), "ms": MessageLookupByLibrary.simpleMessage("毫秒"),
"name": MessageLookupByLibrary.simpleMessage("名称"), "name": MessageLookupByLibrary.simpleMessage("名称"),
"noClient": MessageLookupByLibrary.simpleMessage("没有SSH连接"), "noClient": MessageLookupByLibrary.simpleMessage("没有SSH连接"),
"noInterface": MessageLookupByLibrary.simpleMessage("没有可用的接口"),
"noResult": MessageLookupByLibrary.simpleMessage("无结果"), "noResult": MessageLookupByLibrary.simpleMessage("无结果"),
"noSavedPrivateKey": MessageLookupByLibrary.simpleMessage("没有已保存的私钥。"), "noSavedPrivateKey": MessageLookupByLibrary.simpleMessage("没有已保存的私钥。"),
"noSavedSnippet": MessageLookupByLibrary.simpleMessage("没有已保存的代码片段。"), "noSavedSnippet": MessageLookupByLibrary.simpleMessage("没有已保存的代码片段。"),
@@ -132,10 +139,9 @@ class MessageLookup extends MessageLookupByLibrary {
"port": MessageLookupByLibrary.simpleMessage("端口"), "port": MessageLookupByLibrary.simpleMessage("端口"),
"privateKey": MessageLookupByLibrary.simpleMessage("私钥"), "privateKey": MessageLookupByLibrary.simpleMessage("私钥"),
"pwd": MessageLookupByLibrary.simpleMessage("密码"), "pwd": MessageLookupByLibrary.simpleMessage("密码"),
"pwdForUser": m8, "pwdForUser": m9,
"rename": MessageLookupByLibrary.simpleMessage("重命名"), "rename": MessageLookupByLibrary.simpleMessage("重命名"),
"reportBugsOnGithubIssue": MessageLookupByLibrary.simpleMessage( "reportBugsOnGithubIssue": m10,
"请到 https://github.com/LollipopKit/flutter_server_box/issues 提交问题"),
"result": MessageLookupByLibrary.simpleMessage("结果"), "result": MessageLookupByLibrary.simpleMessage("结果"),
"run": MessageLookupByLibrary.simpleMessage("运行"), "run": MessageLookupByLibrary.simpleMessage("运行"),
"save": MessageLookupByLibrary.simpleMessage("保存"), "save": MessageLookupByLibrary.simpleMessage("保存"),
@@ -154,11 +160,11 @@ class MessageLookup extends MessageLookupByLibrary {
"sftpSSHConnected": "sftpSSHConnected":
MessageLookupByLibrary.simpleMessage("SFTP 已连接,即将开始下载..."), MessageLookupByLibrary.simpleMessage("SFTP 已连接,即将开始下载..."),
"snippet": MessageLookupByLibrary.simpleMessage("代码片段"), "snippet": MessageLookupByLibrary.simpleMessage("代码片段"),
"spentTime": m9, "spentTime": m11,
"start": MessageLookupByLibrary.simpleMessage("开始"), "start": MessageLookupByLibrary.simpleMessage("开始"),
"stop": MessageLookupByLibrary.simpleMessage("停止"), "stop": MessageLookupByLibrary.simpleMessage("停止"),
"sureDelete": m10, "sureDelete": m12,
"sureToDeleteServer": m11, "sureToDeleteServer": m13,
"ttl": MessageLookupByLibrary.simpleMessage("缓存时间"), "ttl": MessageLookupByLibrary.simpleMessage("缓存时间"),
"unknown": MessageLookupByLibrary.simpleMessage("未知"), "unknown": MessageLookupByLibrary.simpleMessage("未知"),
"unknownError": MessageLookupByLibrary.simpleMessage("未知错误"), "unknownError": MessageLookupByLibrary.simpleMessage("未知错误"),
@@ -171,9 +177,9 @@ class MessageLookup extends MessageLookupByLibrary {
"upsideDown": MessageLookupByLibrary.simpleMessage("上下交换"), "upsideDown": MessageLookupByLibrary.simpleMessage("上下交换"),
"urlOrJson": MessageLookupByLibrary.simpleMessage("链接或JSON"), "urlOrJson": MessageLookupByLibrary.simpleMessage("链接或JSON"),
"user": MessageLookupByLibrary.simpleMessage("用户"), "user": MessageLookupByLibrary.simpleMessage("用户"),
"versionHaveUpdate": m12, "versionHaveUpdate": m14,
"versionUnknownUpdate": m13, "versionUnknownUpdate": m15,
"versionUpdated": m14, "versionUpdated": m16,
"waitConnection": MessageLookupByLibrary.simpleMessage("请等待连接建立"), "waitConnection": MessageLookupByLibrary.simpleMessage("请等待连接建立"),
"willTakEeffectImmediately": "willTakEeffectImmediately":
MessageLookupByLibrary.simpleMessage("更改将会立即生效") MessageLookupByLibrary.simpleMessage("更改将会立即生效")

View File

@@ -1141,13 +1141,13 @@ class S {
); );
} }
/// `Please report bugs on https://github.com/LollipopKit/flutter_server_box/issues` /// `Please report bugs on {url}`
String get reportBugsOnGithubIssue { String reportBugsOnGithubIssue(Object url) {
return Intl.message( return Intl.message(
'Please report bugs on https://github.com/LollipopKit/flutter_server_box/issues', 'Please report bugs on $url',
name: 'reportBugsOnGithubIssue', name: 'reportBugsOnGithubIssue',
desc: '', desc: '',
args: [], args: [url],
); );
} }
@@ -1200,6 +1200,26 @@ class S {
args: [], args: [],
); );
} }
/// `Please make sure that docker is installed correctly, or that you are using a non-self-compiled version. If you don't have the above issues, please submit an issue on {url}.`
String invalidVersionHelp(Object url) {
return Intl.message(
'Please make sure that docker is installed correctly, or that you are using a non-self-compiled version. If you don\'t have the above issues, please submit an issue on $url.',
name: 'invalidVersionHelp',
desc: '',
args: [url],
);
}
/// `No interface`
String get noInterface {
return Intl.message(
'No interface',
name: 'noInterface',
desc: '',
args: [],
);
}
} }
class AppLocalizationDelegate extends LocalizationsDelegate<S> { class AppLocalizationDelegate extends LocalizationsDelegate<S> {

View File

@@ -108,10 +108,12 @@
"disconnected": "Disconnected", "disconnected": "Disconnected",
"files": "Files", "files": "Files",
"experimentalFeature": "Experimental feature", "experimentalFeature": "Experimental feature",
"reportBugsOnGithubIssue": "Please report bugs on https://github.com/LollipopKit/flutter_server_box/issues", "reportBugsOnGithubIssue": "Please report bugs on {url}",
"noUpdateAvailable": "No update available", "noUpdateAvailable": "No update available",
"foundNUpdate": "Found {count} update", "foundNUpdate": "Found {count} update",
"updateAll": "Update all", "updateAll": "Update all",
"pwdForUser": "Password for {user}", "pwdForUser": "Password for {user}",
"platformNotSupportUpdate": "Current platform does not support in app update.\nPlease build from source and install it." "platformNotSupportUpdate": "Current platform does not support in app update.\nPlease build from source and install it.",
"invalidVersionHelp": "Please make sure that docker is installed correctly, or that you are using a non-self-compiled version. If you don't have the above issues, please submit an issue on {url}.",
"noInterface": "No interface"
} }

View File

@@ -108,10 +108,12 @@
"disconnected": "连接断开", "disconnected": "连接断开",
"files": "文件", "files": "文件",
"experimentalFeature": "实验性功能", "experimentalFeature": "实验性功能",
"reportBugsOnGithubIssue": "请到 https://github.com/LollipopKit/flutter_server_box/issues 提交问题", "reportBugsOnGithubIssue": "请到 {url} 提交问题",
"noUpdateAvailable": "没有可用更新", "noUpdateAvailable": "没有可用更新",
"foundNUpdate": "找到 {count} 个更新", "foundNUpdate": "找到 {count} 个更新",
"updateAll": "更新全部", "updateAll": "更新全部",
"pwdForUser": "用户{user}的密码", "pwdForUser": "用户{user}的密码",
"platformNotSupportUpdate": "当前平台不支持更新,请编译最新源码后手动安装" "platformNotSupportUpdate": "当前平台不支持更新,请编译最新源码后手动安装",
"invalidVersionHelp": "请确保正确安装了docker或者使用的非自编译版本。如果没有以上问题请在 {url} 提交问题。",
"noInterface": "没有可用的接口"
} }

View File

@@ -6,6 +6,7 @@ import 'package:toolbox/data/model/apt/upgrade_pkg_info.dart';
import 'package:toolbox/data/model/server/server_private_info.dart'; import 'package:toolbox/data/model/server/server_private_info.dart';
import 'package:toolbox/data/provider/apt.dart'; import 'package:toolbox/data/provider/apt.dart';
import 'package:toolbox/data/provider/server.dart'; import 'package:toolbox/data/provider/server.dart';
import 'package:toolbox/data/res/url.dart';
import 'package:toolbox/generated/l10n.dart'; import 'package:toolbox/generated/l10n.dart';
import 'package:toolbox/locator.dart'; import 'package:toolbox/locator.dart';
import 'package:toolbox/view/widget/center_loading.dart'; import 'package:toolbox/view/widget/center_loading.dart';
@@ -152,7 +153,7 @@ class _AptManagePageState extends State<AptManagePage>
Padding( Padding(
padding: const EdgeInsets.all(17), padding: const EdgeInsets.all(17),
child: UrlText( child: UrlText(
text: '${s.experimentalFeature}\n${s.reportBugsOnGithubIssue}', text: '${s.experimentalFeature}\n${s.reportBugsOnGithubIssue(issueUrl)}',
replace: 'Github Issue', replace: 'Github Issue',
textAlign: TextAlign.center, textAlign: TextAlign.center,
), ),

View File

@@ -7,6 +7,7 @@ import 'package:toolbox/data/model/docker/ps.dart';
import 'package:toolbox/data/model/server/server_private_info.dart'; import 'package:toolbox/data/model/server/server_private_info.dart';
import 'package:toolbox/data/provider/docker.dart'; import 'package:toolbox/data/provider/docker.dart';
import 'package:toolbox/data/provider/server.dart'; import 'package:toolbox/data/provider/server.dart';
import 'package:toolbox/data/res/url.dart';
import 'package:toolbox/generated/l10n.dart'; import 'package:toolbox/generated/l10n.dart';
import 'package:toolbox/locator.dart'; import 'package:toolbox/locator.dart';
import 'package:toolbox/view/widget/center_loading.dart'; import 'package:toolbox/view/widget/center_loading.dart';
@@ -71,16 +72,17 @@ class _DockerManagePageState extends State<DockerManagePage> {
return Consumer<DockerProvider>(builder: (_, docker, __) { return Consumer<DockerProvider>(builder: (_, docker, __) {
final running = docker.items; final running = docker.items;
if (docker.error != null && running == null) { if (docker.error != null && running == null) {
return Center( return SizedBox.expand(child: Column(
child: Column( mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
children: [ children: [
SizedBox( const Icon(Icons.error, size: 37,),
height: _media.size.height * 0.43, const SizedBox(height: 27),
),
Text(docker.error!), Text(docker.error!),
_buildSolution(docker.error!) const SizedBox(height: 27),
Padding(padding: const EdgeInsets.all(17), child: _buildSolution(docker.error!),)
], ],
)); ),);
} }
if (running == null) { if (running == null) {
_docker.refresh(); _docker.refresh();
@@ -106,6 +108,8 @@ class _DockerManagePageState extends State<DockerManagePage> {
); );
case 'no client': case 'no client':
return Text(s.waitConnection); return Text(s.waitConnection);
case 'invalid version':
return UrlText(text: s.invalidVersionHelp(issueUrl), replace: 'Github',);
default: default:
return Text(s.unknownError); return Text(s.unknownError);
} }

View File

@@ -9,6 +9,7 @@ import 'package:toolbox/data/res/color.dart';
import 'package:toolbox/data/res/font_style.dart'; import 'package:toolbox/data/res/font_style.dart';
import 'package:toolbox/data/res/icon/linux_icons.dart'; import 'package:toolbox/data/res/icon/linux_icons.dart';
import 'package:toolbox/data/res/padding.dart'; import 'package:toolbox/data/res/padding.dart';
import 'package:toolbox/generated/l10n.dart';
import 'package:toolbox/view/widget/round_rect_card.dart'; import 'package:toolbox/view/widget/round_rect_card.dart';
const style11 = TextStyle(fontSize: 11); const style11 = TextStyle(fontSize: 11);
@@ -26,11 +27,13 @@ class ServerDetailPage extends StatefulWidget {
class _ServerDetailPageState extends State<ServerDetailPage> class _ServerDetailPageState extends State<ServerDetailPage>
with SingleTickerProviderStateMixin { with SingleTickerProviderStateMixin {
late MediaQueryData _media; late MediaQueryData _media;
late S s;
@override @override
void didChangeDependencies() { void didChangeDependencies() {
super.didChangeDependencies(); super.didChangeDependencies();
_media = MediaQuery.of(context); _media = MediaQuery.of(context);
s = S.of(context);
} }
@override @override
@@ -298,10 +301,10 @@ class _ServerDetailPageState extends State<ServerDetailPage>
) )
]; ];
if (ns.devices.isEmpty) { if (ns.devices.isEmpty) {
children.add(const Center( children.add(Center(
child: Text( child: Text(
'No interface.', s.noInterface,
style: TextStyle(color: Colors.grey), style: const TextStyle(color: Colors.grey, fontSize: 13),
), ),
)); ));
} else { } else {