mirror of
https://github.com/lollipopkit/flutter_server_box.git
synced 2025-12-17 07:14:28 +01:00
opt.: move logic of reorder to settings page
This commit is contained in:
@@ -785,7 +785,7 @@ abstract class S {
|
|||||||
/// No description provided for @moveOutServerFuncBtnsHelp.
|
/// No description provided for @moveOutServerFuncBtnsHelp.
|
||||||
///
|
///
|
||||||
/// In en, this message translates to:
|
/// In en, this message translates to:
|
||||||
/// **'On: can be displayed below each card on the Server Tab page.\nOff: can be displayed at the top of the Server Details page.'**
|
/// **'On: can be displayed below each card on the Server Tab page. Off: can be displayed at the top of the Server Details page.'**
|
||||||
String get moveOutServerFuncBtnsHelp;
|
String get moveOutServerFuncBtnsHelp;
|
||||||
|
|
||||||
/// No description provided for @ms.
|
/// No description provided for @ms.
|
||||||
@@ -1088,6 +1088,18 @@ abstract class S {
|
|||||||
/// **'Server'**
|
/// **'Server'**
|
||||||
String get server;
|
String get server;
|
||||||
|
|
||||||
|
/// No description provided for @serverDetailOrder.
|
||||||
|
///
|
||||||
|
/// In en, this message translates to:
|
||||||
|
/// **'Detail page widget order'**
|
||||||
|
String get serverDetailOrder;
|
||||||
|
|
||||||
|
/// No description provided for @serverOrder.
|
||||||
|
///
|
||||||
|
/// In en, this message translates to:
|
||||||
|
/// **'Server order'**
|
||||||
|
String get serverOrder;
|
||||||
|
|
||||||
/// No description provided for @serverTabConnecting.
|
/// No description provided for @serverTabConnecting.
|
||||||
///
|
///
|
||||||
/// In en, this message translates to:
|
/// In en, this message translates to:
|
||||||
|
|||||||
@@ -369,7 +369,7 @@ class SDe extends S {
|
|||||||
String get moveOutServerFuncBtns => 'Position der Server-Funktionsschaltfläche';
|
String get moveOutServerFuncBtns => 'Position der Server-Funktionsschaltfläche';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get moveOutServerFuncBtnsHelp => 'Ein: kann unter jeder Karte auf der Registerkarte \"Server\" angezeigt werden.\nAus: kann oben auf der Seite \"Serverdetails\" angezeigt werden.';
|
String get moveOutServerFuncBtnsHelp => 'Ein: kann unter jeder Karte auf der Registerkarte \"Server\" angezeigt werden. Aus: kann oben auf der Seite \"Serverdetails\" angezeigt werden.';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get ms => 'ms';
|
String get ms => 'ms';
|
||||||
@@ -525,6 +525,12 @@ class SDe extends S {
|
|||||||
@override
|
@override
|
||||||
String get server => 'Server';
|
String get server => 'Server';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get serverDetailOrder => 'Reihenfolge der Widgets auf der Detailseite';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get serverOrder => 'Server-Bestellung';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get serverTabConnecting => 'Verbinden...';
|
String get serverTabConnecting => 'Verbinden...';
|
||||||
|
|
||||||
|
|||||||
@@ -369,7 +369,7 @@ class SEn extends S {
|
|||||||
String get moveOutServerFuncBtns => 'Server function button location';
|
String get moveOutServerFuncBtns => 'Server function button location';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get moveOutServerFuncBtnsHelp => 'On: can be displayed below each card on the Server Tab page.\nOff: can be displayed at the top of the Server Details page.';
|
String get moveOutServerFuncBtnsHelp => 'On: can be displayed below each card on the Server Tab page. Off: can be displayed at the top of the Server Details page.';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get ms => 'ms';
|
String get ms => 'ms';
|
||||||
@@ -525,6 +525,12 @@ class SEn extends S {
|
|||||||
@override
|
@override
|
||||||
String get server => 'Server';
|
String get server => 'Server';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get serverDetailOrder => 'Detail page widget order';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get serverOrder => 'Server order';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get serverTabConnecting => 'Connecting...';
|
String get serverTabConnecting => 'Connecting...';
|
||||||
|
|
||||||
|
|||||||
@@ -369,7 +369,7 @@ class SId extends S {
|
|||||||
String get moveOutServerFuncBtns => 'Lokasi tombol fungsi server';
|
String get moveOutServerFuncBtns => 'Lokasi tombol fungsi server';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get moveOutServerFuncBtnsHelp => 'Aktif: dapat ditampilkan di bawah setiap kartu pada halaman Tab Server.\nNonaktif: dapat ditampilkan di bagian atas halaman Rincian Server.';
|
String get moveOutServerFuncBtnsHelp => 'Aktif: dapat ditampilkan di bawah setiap kartu pada halaman Tab Server. Nonaktif: dapat ditampilkan di bagian atas halaman Rincian Server.';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get ms => 'MS';
|
String get ms => 'MS';
|
||||||
@@ -525,6 +525,12 @@ class SId extends S {
|
|||||||
@override
|
@override
|
||||||
String get server => 'Server';
|
String get server => 'Server';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get serverDetailOrder => 'Detail pesanan widget halaman';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get serverOrder => 'Pesanan server';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get serverTabConnecting => 'Menghubungkan ...';
|
String get serverTabConnecting => 'Menghubungkan ...';
|
||||||
|
|
||||||
|
|||||||
@@ -369,7 +369,7 @@ class SZh extends S {
|
|||||||
String get moveOutServerFuncBtns => '服务器功能按钮位置';
|
String get moveOutServerFuncBtns => '服务器功能按钮位置';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get moveOutServerFuncBtnsHelp => '开启:可以在服务器 Tab 页的每个卡片下方显示。\n关闭:在服务器详情页顶部显示。';
|
String get moveOutServerFuncBtnsHelp => '开启:可以在服务器 Tab 页的每个卡片下方显示。关闭:在服务器详情页顶部显示。';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get ms => '毫秒';
|
String get ms => '毫秒';
|
||||||
@@ -525,6 +525,12 @@ class SZh extends S {
|
|||||||
@override
|
@override
|
||||||
String get server => '服务器';
|
String get server => '服务器';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get serverDetailOrder => '详情页部件顺序';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get serverOrder => '服务器顺序';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get serverTabConnecting => '连接中...';
|
String get serverTabConnecting => '连接中...';
|
||||||
|
|
||||||
@@ -1077,7 +1083,7 @@ class SZhTw extends SZh {
|
|||||||
String get moveOutServerFuncBtns => '服務器功能按鈕位置';
|
String get moveOutServerFuncBtns => '服務器功能按鈕位置';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get moveOutServerFuncBtnsHelp => '開啟:可以在服務器 Tab 頁的每個卡片下方顯示。\n關閉:在服務器詳情頁頂部顯示。';
|
String get moveOutServerFuncBtnsHelp => '開啟:可以在服務器 Tab 頁的每個卡片下方顯示。關閉:在服務器詳情頁頂部顯示。';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get ms => '毫秒';
|
String get ms => '毫秒';
|
||||||
@@ -1233,6 +1239,12 @@ class SZhTw extends SZh {
|
|||||||
@override
|
@override
|
||||||
String get server => '服務器';
|
String get server => '服務器';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get serverDetailOrder => '詳情頁部件順序';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get serverOrder => '服務器順序';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get serverTabConnecting => '連接中...';
|
String get serverTabConnecting => '連接中...';
|
||||||
|
|
||||||
|
|||||||
@@ -12,8 +12,8 @@ import 'package:toolbox/view/page/ping.dart';
|
|||||||
import 'package:toolbox/view/page/private_key/edit.dart';
|
import 'package:toolbox/view/page/private_key/edit.dart';
|
||||||
import 'package:toolbox/view/page/private_key/list.dart';
|
import 'package:toolbox/view/page/private_key/list.dart';
|
||||||
import 'package:toolbox/view/page/server/detail.dart';
|
import 'package:toolbox/view/page/server/detail.dart';
|
||||||
import 'package:toolbox/view/page/ssh/term.dart';
|
import 'package:toolbox/view/page/ssh_term.dart';
|
||||||
import 'package:toolbox/view/page/ssh/virt_key_setting.dart';
|
import 'package:toolbox/view/page/setting/virt_key.dart';
|
||||||
import 'package:toolbox/view/page/storage/local.dart';
|
import 'package:toolbox/view/page/storage/local.dart';
|
||||||
|
|
||||||
import '../data/model/server/snippet.dart';
|
import '../data/model/server/snippet.dart';
|
||||||
@@ -25,7 +25,9 @@ import '../view/page/pkg.dart';
|
|||||||
import '../view/page/process.dart';
|
import '../view/page/process.dart';
|
||||||
import '../view/page/server/edit.dart';
|
import '../view/page/server/edit.dart';
|
||||||
import '../view/page/server/tab.dart';
|
import '../view/page/server/tab.dart';
|
||||||
import '../view/page/setting.dart';
|
import '../view/page/setting/entry.dart';
|
||||||
|
import '../view/page/setting/srv_detail_seq.dart';
|
||||||
|
import '../view/page/setting/srv_seq.dart';
|
||||||
import '../view/page/snippet/edit.dart';
|
import '../view/page/snippet/edit.dart';
|
||||||
import '../view/page/snippet/list.dart';
|
import '../view/page/snippet/list.dart';
|
||||||
import '../view/page/storage/sftp.dart';
|
import '../view/page/storage/sftp.dart';
|
||||||
@@ -181,4 +183,12 @@ class AppRoute {
|
|||||||
static AppRoute setting({Key? key}) {
|
static AppRoute setting({Key? key}) {
|
||||||
return AppRoute(SettingPage(key: key), 'setting');
|
return AppRoute(SettingPage(key: key), 'setting');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static AppRoute serverOrder({Key? key}) {
|
||||||
|
return AppRoute(ServerOrderPage(key: key), 'server_order');
|
||||||
|
}
|
||||||
|
|
||||||
|
static AppRoute serverDetailOrder({Key? key}) {
|
||||||
|
return AppRoute(ServerDetailOrderPage(key: key), 'server_detail_order');
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -114,7 +114,7 @@
|
|||||||
"min": "min",
|
"min": "min",
|
||||||
"mission": "Mission",
|
"mission": "Mission",
|
||||||
"moveOutServerFuncBtns": "Position der Server-Funktionsschaltfläche",
|
"moveOutServerFuncBtns": "Position der Server-Funktionsschaltfläche",
|
||||||
"moveOutServerFuncBtnsHelp": "Ein: kann unter jeder Karte auf der Registerkarte \"Server\" angezeigt werden.\nAus: kann oben auf der Seite \"Serverdetails\" angezeigt werden.",
|
"moveOutServerFuncBtnsHelp": "Ein: kann unter jeder Karte auf der Registerkarte \"Server\" angezeigt werden. Aus: kann oben auf der Seite \"Serverdetails\" angezeigt werden.",
|
||||||
"ms": "ms",
|
"ms": "ms",
|
||||||
"name": "Name",
|
"name": "Name",
|
||||||
"needRestart": "App muss neugestartet werden",
|
"needRestart": "App muss neugestartet werden",
|
||||||
@@ -165,6 +165,8 @@
|
|||||||
"saved": "Gerettet",
|
"saved": "Gerettet",
|
||||||
"second": "s",
|
"second": "s",
|
||||||
"server": "Server",
|
"server": "Server",
|
||||||
|
"serverDetailOrder": "Reihenfolge der Widgets auf der Detailseite",
|
||||||
|
"serverOrder": "Server-Bestellung",
|
||||||
"serverTabConnecting": "Verbinden...",
|
"serverTabConnecting": "Verbinden...",
|
||||||
"serverTabEmpty": "Keine Server vorhanden.",
|
"serverTabEmpty": "Keine Server vorhanden.",
|
||||||
"serverTabFailed": "Fehlgeschlagen",
|
"serverTabFailed": "Fehlgeschlagen",
|
||||||
|
|||||||
@@ -114,7 +114,7 @@
|
|||||||
"min": "min",
|
"min": "min",
|
||||||
"mission": "Mission",
|
"mission": "Mission",
|
||||||
"moveOutServerFuncBtns": "Server function button location",
|
"moveOutServerFuncBtns": "Server function button location",
|
||||||
"moveOutServerFuncBtnsHelp": "On: can be displayed below each card on the Server Tab page.\nOff: can be displayed at the top of the Server Details page.",
|
"moveOutServerFuncBtnsHelp": "On: can be displayed below each card on the Server Tab page. Off: can be displayed at the top of the Server Details page.",
|
||||||
"ms": "ms",
|
"ms": "ms",
|
||||||
"name": "Name",
|
"name": "Name",
|
||||||
"needRestart": "Need to restart app",
|
"needRestart": "Need to restart app",
|
||||||
@@ -165,6 +165,8 @@
|
|||||||
"saved": "Saved",
|
"saved": "Saved",
|
||||||
"second": "s",
|
"second": "s",
|
||||||
"server": "Server",
|
"server": "Server",
|
||||||
|
"serverDetailOrder": "Detail page widget order",
|
||||||
|
"serverOrder": "Server order",
|
||||||
"serverTabConnecting": "Connecting...",
|
"serverTabConnecting": "Connecting...",
|
||||||
"serverTabEmpty": "There is no server.\nClick the fab to add one.",
|
"serverTabEmpty": "There is no server.\nClick the fab to add one.",
|
||||||
"serverTabFailed": "Failed",
|
"serverTabFailed": "Failed",
|
||||||
|
|||||||
@@ -114,7 +114,7 @@
|
|||||||
"min": "Min",
|
"min": "Min",
|
||||||
"mission": "Misi",
|
"mission": "Misi",
|
||||||
"moveOutServerFuncBtns": "Lokasi tombol fungsi server",
|
"moveOutServerFuncBtns": "Lokasi tombol fungsi server",
|
||||||
"moveOutServerFuncBtnsHelp": "Aktif: dapat ditampilkan di bawah setiap kartu pada halaman Tab Server.\nNonaktif: dapat ditampilkan di bagian atas halaman Rincian Server.",
|
"moveOutServerFuncBtnsHelp": "Aktif: dapat ditampilkan di bawah setiap kartu pada halaman Tab Server. Nonaktif: dapat ditampilkan di bagian atas halaman Rincian Server.",
|
||||||
"ms": "MS",
|
"ms": "MS",
|
||||||
"name": "Nama",
|
"name": "Nama",
|
||||||
"needRestart": "Perlu memulai ulang aplikasi",
|
"needRestart": "Perlu memulai ulang aplikasi",
|
||||||
@@ -165,6 +165,8 @@
|
|||||||
"saved": "Diselamatkan",
|
"saved": "Diselamatkan",
|
||||||
"second": "S",
|
"second": "S",
|
||||||
"server": "Server",
|
"server": "Server",
|
||||||
|
"serverDetailOrder": "Detail pesanan widget halaman",
|
||||||
|
"serverOrder": "Pesanan server",
|
||||||
"serverTabConnecting": "Menghubungkan ...",
|
"serverTabConnecting": "Menghubungkan ...",
|
||||||
"serverTabEmpty": "Tidak ada server.\nKlik fab untuk menambahkan satu.",
|
"serverTabEmpty": "Tidak ada server.\nKlik fab untuk menambahkan satu.",
|
||||||
"serverTabFailed": "Gagal",
|
"serverTabFailed": "Gagal",
|
||||||
|
|||||||
@@ -114,7 +114,7 @@
|
|||||||
"min": "最小",
|
"min": "最小",
|
||||||
"mission": "任务",
|
"mission": "任务",
|
||||||
"moveOutServerFuncBtns": "服务器功能按钮位置",
|
"moveOutServerFuncBtns": "服务器功能按钮位置",
|
||||||
"moveOutServerFuncBtnsHelp": "开启:可以在服务器 Tab 页的每个卡片下方显示。\n关闭:在服务器详情页顶部显示。",
|
"moveOutServerFuncBtnsHelp": "开启:可以在服务器 Tab 页的每个卡片下方显示。关闭:在服务器详情页顶部显示。",
|
||||||
"ms": "毫秒",
|
"ms": "毫秒",
|
||||||
"name": "名称",
|
"name": "名称",
|
||||||
"needRestart": "需要重启 App",
|
"needRestart": "需要重启 App",
|
||||||
@@ -165,6 +165,8 @@
|
|||||||
"saved": "已保存",
|
"saved": "已保存",
|
||||||
"second": "秒",
|
"second": "秒",
|
||||||
"server": "服务器",
|
"server": "服务器",
|
||||||
|
"serverDetailOrder": "详情页部件顺序",
|
||||||
|
"serverOrder": "服务器顺序",
|
||||||
"serverTabConnecting": "连接中...",
|
"serverTabConnecting": "连接中...",
|
||||||
"serverTabEmpty": "现在没有服务器。\n点击右下方按钮来添加。",
|
"serverTabEmpty": "现在没有服务器。\n点击右下方按钮来添加。",
|
||||||
"serverTabFailed": "失败",
|
"serverTabFailed": "失败",
|
||||||
|
|||||||
@@ -114,7 +114,7 @@
|
|||||||
"min": "最小",
|
"min": "最小",
|
||||||
"mission": "任務",
|
"mission": "任務",
|
||||||
"moveOutServerFuncBtns": "服務器功能按鈕位置",
|
"moveOutServerFuncBtns": "服務器功能按鈕位置",
|
||||||
"moveOutServerFuncBtnsHelp": "開啟:可以在服務器 Tab 頁的每個卡片下方顯示。\n關閉:在服務器詳情頁頂部顯示。",
|
"moveOutServerFuncBtnsHelp": "開啟:可以在服務器 Tab 頁的每個卡片下方顯示。關閉:在服務器詳情頁頂部顯示。",
|
||||||
"ms": "毫秒",
|
"ms": "毫秒",
|
||||||
"name": "名稱",
|
"name": "名稱",
|
||||||
"needRestart": "需要重啓 App",
|
"needRestart": "需要重啓 App",
|
||||||
@@ -165,6 +165,8 @@
|
|||||||
"saved": "已保存",
|
"saved": "已保存",
|
||||||
"second": "秒",
|
"second": "秒",
|
||||||
"server": "服務器",
|
"server": "服務器",
|
||||||
|
"serverDetailOrder": "詳情頁部件順序",
|
||||||
|
"serverOrder": "服務器順序",
|
||||||
"serverTabConnecting": "連接中...",
|
"serverTabConnecting": "連接中...",
|
||||||
"serverTabEmpty": "現在沒有服務器。\n點擊右下方按鈕來新增。",
|
"serverTabEmpty": "現在沒有服務器。\n點擊右下方按鈕來新增。",
|
||||||
"serverTabFailed": "失敗",
|
"serverTabFailed": "失敗",
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ import 'package:provider/provider.dart';
|
|||||||
import 'package:toolbox/core/extension/navigator.dart';
|
import 'package:toolbox/core/extension/navigator.dart';
|
||||||
import 'package:toolbox/core/route.dart';
|
import 'package:toolbox/core/route.dart';
|
||||||
import 'package:toolbox/data/model/docker/image.dart';
|
import 'package:toolbox/data/model/docker/image.dart';
|
||||||
import 'package:toolbox/view/page/ssh/term.dart';
|
import 'package:toolbox/view/page/ssh_term.dart';
|
||||||
import 'package:toolbox/view/widget/input_field.dart';
|
import 'package:toolbox/view/widget/input_field.dart';
|
||||||
|
|
||||||
import '../../core/utils/ui.dart';
|
import '../../core/utils/ui.dart';
|
||||||
|
|||||||
@@ -23,7 +23,7 @@ import '../../data/model/server/server_private_info.dart';
|
|||||||
import '../../data/model/server/server_status.dart';
|
import '../../data/model/server/server_status.dart';
|
||||||
import '../../data/res/color.dart';
|
import '../../data/res/color.dart';
|
||||||
import 'server/edit.dart';
|
import 'server/edit.dart';
|
||||||
import 'setting.dart';
|
import 'setting/entry.dart';
|
||||||
|
|
||||||
class FullScreenPage extends StatefulWidget {
|
class FullScreenPage extends StatefulWidget {
|
||||||
const FullScreenPage({Key? key}) : super(key: key);
|
const FullScreenPage({Key? key}) : super(key: key);
|
||||||
|
|||||||
@@ -26,7 +26,7 @@ import 'backup.dart';
|
|||||||
import 'convert.dart';
|
import 'convert.dart';
|
||||||
import 'debug.dart';
|
import 'debug.dart';
|
||||||
import 'private_key/list.dart';
|
import 'private_key/list.dart';
|
||||||
import 'setting.dart';
|
import 'setting/entry.dart';
|
||||||
import 'storage/local.dart';
|
import 'storage/local.dart';
|
||||||
|
|
||||||
class HomePage extends StatefulWidget {
|
class HomePage extends StatefulWidget {
|
||||||
|
|||||||
@@ -94,35 +94,19 @@ class _ServerDetailPageState extends State<ServerDetailPage>
|
|||||||
)
|
)
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
body: ReorderableListView.builder(
|
bottomNavigationBar: _setting.moveOutServerTabFuncBtns.fetch()!
|
||||||
|
? null
|
||||||
|
: ServerFuncBtns(spi: widget.spi, s: _s, iconSize: 19),
|
||||||
|
body: ListView.builder(
|
||||||
padding: EdgeInsets.only(
|
padding: EdgeInsets.only(
|
||||||
left: 13,
|
left: 13,
|
||||||
right: 13,
|
right: 13,
|
||||||
top: 13,
|
top: 13,
|
||||||
bottom: _media.padding.bottom,
|
bottom: _media.padding.bottom + 77,
|
||||||
),
|
),
|
||||||
onReorder: (int oldIndex, int newIndex) {
|
|
||||||
setState(() {
|
|
||||||
_cardsOrder.move(
|
|
||||||
oldIndex,
|
|
||||||
newIndex,
|
|
||||||
property: _setting.detailCardOrder,
|
|
||||||
);
|
|
||||||
});
|
|
||||||
},
|
|
||||||
footer: height13,
|
|
||||||
header: _setting.moveOutServerTabFuncBtns.fetch()!
|
|
||||||
? null
|
|
||||||
: RoundRectCard(ServerFuncBtns(spi: widget.spi, s: _s)),
|
|
||||||
itemCount: _cardsOrder.length,
|
itemCount: _cardsOrder.length,
|
||||||
buildDefaultDragHandles: false,
|
itemBuilder: (context, index) =>
|
||||||
itemBuilder: (context, index) => ReorderableDelayedDragStartListener(
|
_cardBuildMap[_cardsOrder[index]]?.call(si.status),
|
||||||
key: ValueKey(index),
|
|
||||||
index: index,
|
|
||||||
child: SizedBox(
|
|
||||||
child: _cardBuildMap[_cardsOrder[index]]?.call(si.status),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,7 +5,6 @@ import 'package:flutter_gen/gen_l10n/l10n.dart';
|
|||||||
import 'package:get_it/get_it.dart';
|
import 'package:get_it/get_it.dart';
|
||||||
import 'package:provider/provider.dart';
|
import 'package:provider/provider.dart';
|
||||||
import 'package:toolbox/core/extension/media_queryx.dart';
|
import 'package:toolbox/core/extension/media_queryx.dart';
|
||||||
import 'package:toolbox/core/extension/order.dart';
|
|
||||||
import 'package:toolbox/data/model/app/net_view.dart';
|
import 'package:toolbox/data/model/app/net_view.dart';
|
||||||
import 'package:toolbox/view/widget/server_func_btns.dart';
|
import 'package:toolbox/view/widget/server_func_btns.dart';
|
||||||
import 'package:toolbox/view/widget/tag/switcher.dart';
|
import 'package:toolbox/view/widget/tag/switcher.dart';
|
||||||
@@ -72,6 +71,20 @@ class _ServerPageState extends State<ServerPage>
|
|||||||
heroTag: 'server',
|
heroTag: 'server',
|
||||||
child: const Icon(Icons.add),
|
child: const Icon(Icons.add),
|
||||||
),
|
),
|
||||||
|
bottomNavigationBar: Padding(
|
||||||
|
padding: const EdgeInsets.fromLTRB(7, 17, 7, 3),
|
||||||
|
child: Consumer<ServerProvider>(builder: (_, pro, __) {
|
||||||
|
return TagSwitcher(
|
||||||
|
tags: pro.tags,
|
||||||
|
width: _media.size.width,
|
||||||
|
onTagChanged: (p0) => setState(() {
|
||||||
|
_tag = p0;
|
||||||
|
}),
|
||||||
|
initTag: _tag,
|
||||||
|
all: _s.all,
|
||||||
|
);
|
||||||
|
}),
|
||||||
|
),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -113,36 +126,15 @@ class _ServerPageState extends State<ServerPage>
|
|||||||
_tag == null || (pro.servers[e]?.spi.tags?.contains(_tag) ?? false))
|
_tag == null || (pro.servers[e]?.spi.tags?.contains(_tag) ?? false))
|
||||||
.toList();
|
.toList();
|
||||||
|
|
||||||
Widget _buildBodySmall(
|
Widget _buildBodySmall({
|
||||||
{required ServerProvider provider,
|
required ServerProvider provider,
|
||||||
required List<String> filtered,
|
required List<String> filtered,
|
||||||
EdgeInsets? padding = const EdgeInsets.fromLTRB(7, 10, 7, 7)}) {
|
EdgeInsets? padding = const EdgeInsets.fromLTRB(7, 10, 7, 7),
|
||||||
return ReorderableListView.builder(
|
}) {
|
||||||
header: TagSwitcher(
|
return ListView.builder(
|
||||||
tags: provider.tags,
|
|
||||||
width: _media.size.width,
|
|
||||||
onTagChanged: (p0) => setState(() {
|
|
||||||
_tag = p0;
|
|
||||||
}),
|
|
||||||
initTag: _tag,
|
|
||||||
all: _s.all,
|
|
||||||
),
|
|
||||||
footer: const SizedBox(height: 77),
|
|
||||||
padding: padding,
|
padding: padding,
|
||||||
onReorder: (oldIndex, newIndex) => setState(() {
|
itemBuilder: (_, index) =>
|
||||||
provider.serverOrder.moveByItem(
|
_buildEachServerCard(provider.servers[filtered[index]]),
|
||||||
filtered,
|
|
||||||
oldIndex,
|
|
||||||
newIndex,
|
|
||||||
property: _settingStore.serverOrder,
|
|
||||||
);
|
|
||||||
}),
|
|
||||||
buildDefaultDragHandles: false,
|
|
||||||
itemBuilder: (_, index) => ReorderableDelayedDragStartListener(
|
|
||||||
key: ValueKey('$_tag${filtered[index]}'),
|
|
||||||
index: index,
|
|
||||||
child: _buildEachServerCard(provider.servers[filtered[index]]),
|
|
||||||
),
|
|
||||||
itemCount: filtered.length,
|
itemCount: filtered.length,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@@ -176,17 +168,18 @@ class _ServerPageState extends State<ServerPage>
|
|||||||
return placeholder;
|
return placeholder;
|
||||||
}
|
}
|
||||||
|
|
||||||
return GestureDetector(
|
return RoundRectCard(
|
||||||
key: Key(si.spi.id + (_tag ?? '')),
|
key: Key(si.spi.id + (_tag ?? '')),
|
||||||
onTap: () {
|
InkWell(
|
||||||
if (si.state.canViewDetails) {
|
onTap: () {
|
||||||
AppRoute.serverDetail(spi: si.spi).go(context);
|
if (si.state.canViewDetails) {
|
||||||
} else if (si.status.failedInfo != null) {
|
AppRoute.serverDetail(spi: si.spi).go(context);
|
||||||
_showFailReason(si.status);
|
} else if (si.status.failedInfo != null) {
|
||||||
}
|
_showFailReason(si.status);
|
||||||
},
|
}
|
||||||
child: RoundRectCard(
|
},
|
||||||
Padding(
|
onLongPress: () => AppRoute.serverEdit(spi: si.spi).go(context),
|
||||||
|
child: Padding(
|
||||||
padding: const EdgeInsets.all(13),
|
padding: const EdgeInsets.all(13),
|
||||||
child: _buildRealServerCard(si.status, si.state, si.spi),
|
child: _buildRealServerCard(si.status, si.state, si.spi),
|
||||||
),
|
),
|
||||||
|
|||||||
@@ -12,26 +12,26 @@ import 'package:toolbox/core/extension/navigator.dart';
|
|||||||
import 'package:toolbox/core/extension/stringx.dart';
|
import 'package:toolbox/core/extension/stringx.dart';
|
||||||
import 'package:toolbox/core/route.dart';
|
import 'package:toolbox/core/route.dart';
|
||||||
import 'package:toolbox/data/model/app/net_view.dart';
|
import 'package:toolbox/data/model/app/net_view.dart';
|
||||||
import 'package:toolbox/view/page/ssh/virt_key_setting.dart';
|
import 'package:toolbox/view/page/setting/virt_key.dart';
|
||||||
import 'package:toolbox/view/widget/input_field.dart';
|
import 'package:toolbox/view/widget/input_field.dart';
|
||||||
import 'package:toolbox/view/widget/value_notifier.dart';
|
import 'package:toolbox/view/widget/value_notifier.dart';
|
||||||
|
|
||||||
import '../../core/utils/misc.dart';
|
import '../../../core/utils/misc.dart';
|
||||||
import '../../core/utils/platform.dart';
|
import '../../../core/utils/platform.dart';
|
||||||
import '../../core/update.dart';
|
import '../../../core/update.dart';
|
||||||
import '../../core/utils/ui.dart';
|
import '../../../core/utils/ui.dart';
|
||||||
import '../../data/provider/app.dart';
|
import '../../../data/provider/app.dart';
|
||||||
import '../../data/provider/server.dart';
|
import '../../../data/provider/server.dart';
|
||||||
import '../../data/res/build_data.dart';
|
import '../../../data/res/build_data.dart';
|
||||||
import '../../data/res/color.dart';
|
import '../../../data/res/color.dart';
|
||||||
import '../../data/res/path.dart';
|
import '../../../data/res/path.dart';
|
||||||
import '../../data/res/ui.dart';
|
import '../../../data/res/ui.dart';
|
||||||
import '../../data/store/server.dart';
|
import '../../../data/store/server.dart';
|
||||||
import '../../data/store/setting.dart';
|
import '../../../data/store/setting.dart';
|
||||||
import '../../locator.dart';
|
import '../../../locator.dart';
|
||||||
import '../widget/custom_appbar.dart';
|
import '../../widget/custom_appbar.dart';
|
||||||
import '../widget/future_widget.dart';
|
import '../../widget/future_widget.dart';
|
||||||
import '../widget/round_rect_card.dart';
|
import '../../widget/round_rect_card.dart';
|
||||||
|
|
||||||
class SettingPage extends StatefulWidget {
|
class SettingPage extends StatefulWidget {
|
||||||
const SettingPage({Key? key}) : super(key: key);
|
const SettingPage({Key? key}) : super(key: key);
|
||||||
@@ -170,6 +170,8 @@ class _SettingPageState extends State<SettingPage> {
|
|||||||
return Column(
|
return Column(
|
||||||
children: [
|
children: [
|
||||||
_buildMoveOutServerFuncBtns(),
|
_buildMoveOutServerFuncBtns(),
|
||||||
|
_buildServerOrder(),
|
||||||
|
_buildServerDetailOrder(),
|
||||||
_buildNetViewType(),
|
_buildNetViewType(),
|
||||||
_buildUpdateInterval(),
|
_buildUpdateInterval(),
|
||||||
_buildMaxRetry(),
|
_buildMaxRetry(),
|
||||||
@@ -978,4 +980,20 @@ class _SettingPageState extends State<SettingPage> {
|
|||||||
trailing: buildSwitch(context, _setting.moveOutServerTabFuncBtns),
|
trailing: buildSwitch(context, _setting.moveOutServerTabFuncBtns),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Widget _buildServerOrder() {
|
||||||
|
return ListTile(
|
||||||
|
title: Text(_s.serverOrder),
|
||||||
|
trailing: const Icon(Icons.keyboard_arrow_right),
|
||||||
|
onTap: () => AppRoute.serverOrder().go(context),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
Widget _buildServerDetailOrder() {
|
||||||
|
return ListTile(
|
||||||
|
title: Text(_s.serverDetailOrder),
|
||||||
|
trailing: const Icon(Icons.keyboard_arrow_right),
|
||||||
|
onTap: () => AppRoute.serverDetailOrder().go(context),
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
73
lib/view/page/setting/srv_detail_seq.dart
Normal file
73
lib/view/page/setting/srv_detail_seq.dart
Normal file
@@ -0,0 +1,73 @@
|
|||||||
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:flutter_gen/gen_l10n/l10n.dart';
|
||||||
|
|
||||||
|
import '../../../core/extension/order.dart';
|
||||||
|
import '../../../data/store/setting.dart';
|
||||||
|
import '../../../locator.dart';
|
||||||
|
import '../../widget/custom_appbar.dart';
|
||||||
|
import '../../widget/round_rect_card.dart';
|
||||||
|
|
||||||
|
class ServerDetailOrderPage extends StatefulWidget {
|
||||||
|
const ServerDetailOrderPage({super.key});
|
||||||
|
|
||||||
|
@override
|
||||||
|
State<ServerDetailOrderPage> createState() => _ServerDetailOrderPageState();
|
||||||
|
}
|
||||||
|
|
||||||
|
class _ServerDetailOrderPageState extends State<ServerDetailOrderPage> {
|
||||||
|
final _store = locator<SettingStore>();
|
||||||
|
|
||||||
|
final Order<String> _cardsOrder = [];
|
||||||
|
|
||||||
|
late S _s;
|
||||||
|
|
||||||
|
@override
|
||||||
|
void didChangeDependencies() {
|
||||||
|
super.didChangeDependencies();
|
||||||
|
_s = S.of(context)!;
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
void initState() {
|
||||||
|
super.initState();
|
||||||
|
_cardsOrder.addAll(_store.detailCardOrder.fetch()!);
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
return Scaffold(
|
||||||
|
appBar: CustomAppBar(
|
||||||
|
title: Text(_s.serverOrder),
|
||||||
|
),
|
||||||
|
body: _buildBody(),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
Widget _buildBody() {
|
||||||
|
return ReorderableListView.builder(
|
||||||
|
footer: const SizedBox(height: 77),
|
||||||
|
onReorder: (oldIndex, newIndex) => setState(() {
|
||||||
|
_cardsOrder.move(
|
||||||
|
oldIndex,
|
||||||
|
newIndex,
|
||||||
|
property: _store.serverOrder,
|
||||||
|
);
|
||||||
|
}),
|
||||||
|
padding: const EdgeInsets.symmetric(horizontal: 7, vertical: 3),
|
||||||
|
buildDefaultDragHandles: false,
|
||||||
|
itemBuilder: (_, index) => _buildItem(index, _cardsOrder[index]),
|
||||||
|
itemCount: _cardsOrder.length,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
Widget _buildItem(int index, String id) {
|
||||||
|
return ReorderableDelayedDragStartListener(
|
||||||
|
key: ValueKey('$index'),
|
||||||
|
index: index,
|
||||||
|
child: RoundRectCard(ListTile(
|
||||||
|
title: Text(id),
|
||||||
|
trailing: const Icon(Icons.drag_handle),
|
||||||
|
)),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
76
lib/view/page/setting/srv_seq.dart
Normal file
76
lib/view/page/setting/srv_seq.dart
Normal file
@@ -0,0 +1,76 @@
|
|||||||
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:flutter_gen/gen_l10n/l10n.dart';
|
||||||
|
import 'package:toolbox/core/extension/order.dart';
|
||||||
|
import 'package:toolbox/view/widget/round_rect_card.dart';
|
||||||
|
|
||||||
|
import '../../../data/provider/server.dart';
|
||||||
|
import '../../../data/store/setting.dart';
|
||||||
|
import '../../../locator.dart';
|
||||||
|
import '../../widget/custom_appbar.dart';
|
||||||
|
|
||||||
|
class ServerOrderPage extends StatefulWidget {
|
||||||
|
const ServerOrderPage({Key? key}) : super(key: key);
|
||||||
|
|
||||||
|
@override
|
||||||
|
_ServerOrderPageState createState() => _ServerOrderPageState();
|
||||||
|
}
|
||||||
|
|
||||||
|
class _ServerOrderPageState extends State<ServerOrderPage> {
|
||||||
|
final _store = locator<SettingStore>();
|
||||||
|
final _provider = locator<ServerProvider>();
|
||||||
|
|
||||||
|
late S _s;
|
||||||
|
|
||||||
|
@override
|
||||||
|
void didChangeDependencies() {
|
||||||
|
super.didChangeDependencies();
|
||||||
|
_s = S.of(context)!;
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
return Scaffold(
|
||||||
|
appBar: CustomAppBar(
|
||||||
|
title: Text(_s.serverOrder),
|
||||||
|
),
|
||||||
|
body: _buildBody(),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
Widget _buildBody() {
|
||||||
|
return ReorderableListView.builder(
|
||||||
|
footer: const SizedBox(height: 77),
|
||||||
|
onReorder: (oldIndex, newIndex) => setState(() {
|
||||||
|
_provider.serverOrder.move(
|
||||||
|
oldIndex,
|
||||||
|
newIndex,
|
||||||
|
property: _store.serverOrder,
|
||||||
|
);
|
||||||
|
}),
|
||||||
|
padding: const EdgeInsets.symmetric(horizontal: 7, vertical: 3),
|
||||||
|
buildDefaultDragHandles: false,
|
||||||
|
itemBuilder: (_, index) =>
|
||||||
|
_buildItem(index, _provider.serverOrder[index]),
|
||||||
|
itemCount: _provider.serverOrder.length,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
Widget _buildItem(int index, String id) {
|
||||||
|
final spi = _provider.servers[id]?.spi;
|
||||||
|
if (spi == null) {
|
||||||
|
return const SizedBox();
|
||||||
|
}
|
||||||
|
return ReorderableDelayedDragStartListener(
|
||||||
|
key: ValueKey('$index'),
|
||||||
|
index: index,
|
||||||
|
child: RoundRectCard(ListTile(
|
||||||
|
title: Text(spi.name),
|
||||||
|
subtitle: Text(spi.id),
|
||||||
|
leading: CircleAvatar(
|
||||||
|
child: Text(spi.name[0]),
|
||||||
|
),
|
||||||
|
trailing: const Icon(Icons.drag_handle),
|
||||||
|
)),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -10,18 +10,18 @@ import 'package:provider/provider.dart';
|
|||||||
import 'package:toolbox/core/extension/navigator.dart';
|
import 'package:toolbox/core/extension/navigator.dart';
|
||||||
import 'package:xterm/xterm.dart';
|
import 'package:xterm/xterm.dart';
|
||||||
|
|
||||||
import '../../../core/route.dart';
|
import '../../core/route.dart';
|
||||||
import '../../../core/utils/platform.dart';
|
import '../../core/utils/platform.dart';
|
||||||
import '../../../core/utils/misc.dart';
|
import '../../core/utils/misc.dart';
|
||||||
import '../../../core/utils/ui.dart';
|
import '../../core/utils/ui.dart';
|
||||||
import '../../../core/utils/server.dart';
|
import '../../core/utils/server.dart';
|
||||||
import '../../../data/model/server/server_private_info.dart';
|
import '../../data/model/server/server_private_info.dart';
|
||||||
import '../../../data/model/ssh/virtual_key.dart';
|
import '../../data/model/ssh/virtual_key.dart';
|
||||||
import '../../../data/provider/virtual_keyboard.dart';
|
import '../../data/provider/virtual_keyboard.dart';
|
||||||
import '../../../data/res/color.dart';
|
import '../../data/res/color.dart';
|
||||||
import '../../../data/res/terminal.dart';
|
import '../../data/res/terminal.dart';
|
||||||
import '../../../data/store/setting.dart';
|
import '../../data/store/setting.dart';
|
||||||
import '../../../locator.dart';
|
import '../../locator.dart';
|
||||||
|
|
||||||
const echoPWD = 'echo \$PWD';
|
const echoPWD = 'echo \$PWD';
|
||||||
|
|
||||||
@@ -18,10 +18,16 @@ import '../page/process.dart';
|
|||||||
import 'tag/picker.dart';
|
import 'tag/picker.dart';
|
||||||
|
|
||||||
class ServerFuncBtns extends StatelessWidget {
|
class ServerFuncBtns extends StatelessWidget {
|
||||||
const ServerFuncBtns({super.key, required this.spi, required this.s});
|
const ServerFuncBtns({
|
||||||
|
super.key,
|
||||||
|
required this.spi,
|
||||||
|
required this.s,
|
||||||
|
this.iconSize,
|
||||||
|
});
|
||||||
|
|
||||||
final ServerPrivateInfo spi;
|
final ServerPrivateInfo spi;
|
||||||
final S s;
|
final S s;
|
||||||
|
final double? iconSize;
|
||||||
|
|
||||||
void _onTapMoreBtns(
|
void _onTapMoreBtns(
|
||||||
ServerTabMenuType value,
|
ServerTabMenuType value,
|
||||||
@@ -101,7 +107,7 @@ class ServerFuncBtns extends StatelessWidget {
|
|||||||
.map((e) => IconButton(
|
.map((e) => IconButton(
|
||||||
onPressed: () => _onTapMoreBtns(e, spi, context),
|
onPressed: () => _onTapMoreBtns(e, spi, context),
|
||||||
padding: EdgeInsets.zero,
|
padding: EdgeInsets.zero,
|
||||||
icon: Icon(e.icon, size: 15),
|
icon: Icon(e.icon, size: iconSize ?? 15),
|
||||||
))
|
))
|
||||||
.toList(),
|
.toList(),
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -31,8 +31,7 @@ class TagBtn extends StatelessWidget {
|
|||||||
content,
|
content,
|
||||||
style: TextStyle(
|
style: TextStyle(
|
||||||
color: isEnable ? null : Colors.grey,
|
color: isEnable ? null : Colors.grey,
|
||||||
fontSize: 15,
|
fontSize: 13,
|
||||||
fontWeight: FontWeight.w500,
|
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
)),
|
)),
|
||||||
|
|||||||
Reference in New Issue
Block a user