opt.: migrate fl_lib

This commit is contained in:
lollipopkit
2024-05-14 22:29:37 +08:00
parent 248430e5b0
commit 04dfede535
136 changed files with 686 additions and 3896 deletions

View File

@@ -1,13 +1,11 @@
import 'dart:convert';
import 'dart:io';
import 'package:fl_lib/fl_lib.dart';
import 'package:logging/logging.dart';
import 'package:toolbox/core/persistant_store.dart';
import 'package:toolbox/data/model/server/private_key_info.dart';
import 'package:toolbox/data/model/server/server_private_info.dart';
import 'package:toolbox/data/model/server/snippet.dart';
import 'package:toolbox/data/res/logger.dart';
import 'package:toolbox/data/res/path.dart';
import 'package:toolbox/data/res/provider.dart';
import 'package:toolbox/data/res/rebuild.dart';
import 'package:toolbox/data/res/store.dart';
@@ -76,7 +74,7 @@ class Backup {
static Future<String> backup([String? name]) async {
final result = _diyEncrypt(json.encode(Backup.loadFromStore().toJson()));
final path = '${await Paths.doc}/${name ?? Paths.bakName}';
final path = '${Paths.doc}/${name ?? 'srvbox_bak.json'}';
await File(path).writeAsString(result);
return path;
}

View File

@@ -1,14 +0,0 @@
import 'package:flutter/widgets.dart';
import 'package:toolbox/core/extension/context/common.dart';
class DynamicColor {
/// 白天模式显示的颜色
final Color light;
/// 暗黑模式显示的颜色
final Color dark;
const DynamicColor(this.light, this.dark);
Color resolve(BuildContext context) => context.isDark ? dark : light;
}

View File

@@ -1,15 +1,18 @@
import 'package:flutter/material.dart';
abstract class PopMenu {
static PopupMenuItem<T> build<T>(T t, IconData icon, String text) {
static PopupMenuItem<T> build<T>(
T t,
IconData icon,
String text, {
double? iconSize,
}) {
return PopupMenuItem<T>(
value: t,
child: Row(
children: [
Icon(icon),
const SizedBox(
width: 10,
),
Icon(icon, size: iconSize),
const SizedBox(width: 10),
Text(text),
],
),

View File

@@ -1,6 +1,5 @@
import 'package:flutter/material.dart';
import 'package:toolbox/core/extension/context/locale.dart';
import 'package:toolbox/data/model/app/menu/base.dart';
enum ContainerMenu {
start,
@@ -64,10 +63,4 @@ enum ContainerMenu {
// return s.stats;
}
}
PopupMenuItem<ContainerMenu> get widget => PopMenu.build(
this,
icon,
toStr,
);
}

View File

@@ -34,14 +34,14 @@ enum ServerFuncBtn {
snippet,
].map((e) => e.index).toList();
Icon icon([double? sizeDiff]) => switch (this) {
sftp => Icon(Icons.insert_drive_file, size: 15 + (sizeDiff ?? 0)),
snippet => Icon(Icons.code, size: 15 + (sizeDiff ?? 0)),
pkg => Icon(Icons.system_security_update, size: 15 + (sizeDiff ?? 0)),
container => Icon(FontAwesome.docker_brand, size: 14 + (sizeDiff ?? 0)),
process => Icon(Icons.list_alt_outlined, size: 15 + (sizeDiff ?? 0)),
terminal => Icon(Icons.terminal, size: 15 + (sizeDiff ?? 0)),
iperf => Icon(Icons.speed, size: 15 + (sizeDiff ?? 0)),
IconData get icon => switch (this) {
sftp => Icons.insert_drive_file,
snippet => Icons.code,
pkg => Icons.system_security_update,
container => FontAwesome.docker_brand,
process => Icons.list_alt_outlined,
terminal => Icons.terminal,
iperf => Icons.speed,
};
String get toStr => switch (this) {

View File

@@ -1,4 +1,4 @@
import 'package:toolbox/core/utils/platform/path.dart';
import 'package:fl_lib/fl_lib.dart';
/// It's used on platform's file system.
/// So use [Platform.pathSeparator] to join path.
@@ -23,7 +23,7 @@ class LocalPath {
_path = '/';
return;
}
_path = joinPath(_path, newPath);
_path = _path.joinPath(newPath);
}
bool get canBack => path != '$_prefixPath/';

View File

@@ -1,7 +1,7 @@
import 'package:fl_lib/fl_lib.dart';
import 'package:flutter/material.dart';
import 'package:icons_plus/icons_plus.dart';
import 'package:toolbox/core/extension/context/locale.dart';
import 'package:toolbox/core/extension/listx.dart';
import 'package:toolbox/data/model/app/version_related.dart';
import 'package:toolbox/data/res/store.dart';

View File

@@ -1,140 +0,0 @@
/*
{
"changelog": {
"mac": "xxx",
"ios": "xxx",
"android": ""
},
"build": {
"min": {
"mac": 1,
"ios": 1,
"android": 1
},
"last": {
"mac": 1,
"ios": 1,
"android": 1
}
},
"url": {
"mac": "https://apps.apple.com/app/id1586449703",
"ios": "https://apps.apple.com/app/id1586449703",
"android": "https://cdn3.cust.app/uploads/ServerBox_262_Arm64.apk"
}
}
*/
import 'dart:convert';
import 'package:toolbox/core/utils/platform/base.dart';
class AppUpdate {
const AppUpdate({
required this.changelog,
required this.build,
required this.url,
});
final AppUpdatePlatformSpecific<String> changelog;
final Build build;
final AppUpdatePlatformSpecific<String> url;
factory AppUpdate.fromRawJson(String str) =>
AppUpdate.fromJson(json.decode(str));
String toRawJson() => json.encode(toJson());
factory AppUpdate.fromJson(Map<String, dynamic> json) => AppUpdate(
changelog: AppUpdatePlatformSpecific.fromJson(json["changelog"]),
build: Build.fromJson(json["build"]),
url: AppUpdatePlatformSpecific.fromJson(json["url"]),
);
Map<String, dynamic> toJson() => {
"changelog": changelog.toJson(),
"build": build.toJson(),
"url": url.toJson(),
};
}
class Build {
Build({
required this.min,
required this.last,
});
final AppUpdatePlatformSpecific<int> min;
final AppUpdatePlatformSpecific<int> last;
factory Build.fromRawJson(String str) => Build.fromJson(json.decode(str));
String toRawJson() => json.encode(toJson());
factory Build.fromJson(Map<String, dynamic> json) => Build(
min: AppUpdatePlatformSpecific.fromJson(json["min"]),
last: AppUpdatePlatformSpecific.fromJson(json["last"]),
);
Map<String, dynamic> toJson() => {
"min": min.toJson(),
"last": last.toJson(),
};
}
class AppUpdatePlatformSpecific<T> {
AppUpdatePlatformSpecific({
required this.mac,
required this.ios,
required this.android,
required this.windows,
required this.linux,
});
final T mac;
final T ios;
final T android;
final T windows;
final T linux;
factory AppUpdatePlatformSpecific.fromRawJson(String str) =>
AppUpdatePlatformSpecific.fromJson(json.decode(str));
String toRawJson() => json.encode(toJson());
factory AppUpdatePlatformSpecific.fromJson(Map<String, dynamic> json) =>
AppUpdatePlatformSpecific(
mac: json["mac"],
ios: json["ios"],
android: json["android"],
windows: json["windows"],
linux: json["linux"],
);
Map<String, dynamic> toJson() => {
"mac": mac,
"ios": ios,
"android": android,
"windows": windows,
"linux": linux,
};
T? get current {
switch (OS.type) {
case OS.macos:
return mac;
case OS.ios:
return ios;
case OS.android:
return android;
case OS.windows:
return windows;
case OS.linux:
return linux;
/// Not implemented yet.
case OS.web || OS.fuchsia || OS.unknown:
return null;
}
}
}