optimization: desktop UI (#747)

This commit is contained in:
lollipopkit🏳️‍⚧️
2025-05-13 04:57:37 +08:00
committed by GitHub
parent e520929411
commit 8627ff823f
52 changed files with 2459 additions and 1990 deletions

View File

@@ -17,8 +17,8 @@ extension _App on _AppSettingsPageState {
Widget? _buildPlatformSetting() {
final func = switch (Pfs.type) {
Pfs.android => AppRoutes.androidSettings().go,
Pfs.ios => AppRoutes.iosSettings().go,
Pfs.android => AndroidSettingsPage.route.go,
Pfs.ios => IosSettingsPage.route.go,
_ => null,
};
if (func == null) return null;

View File

@@ -142,7 +142,7 @@ extension _Server on _AppSettingsPageState {
leading: const Icon(OctIcons.sort_desc, size: _kIconSize),
title: Text(l10n.serverOrder),
trailing: const Icon(Icons.keyboard_arrow_right),
onTap: () => AppRoutes.serverOrder().go(context),
onTap: () => ServerOrderPage.route.go(context),
);
}
@@ -151,7 +151,7 @@ extension _Server on _AppSettingsPageState {
leading: const Icon(OctIcons.sort_desc, size: _kIconSize),
title: Text(l10n.serverDetailOrder),
trailing: const Icon(Icons.keyboard_arrow_right),
onTap: () => AppRoutes.serverDetailOrder().go(context),
onTap: () => ServerDetailOrderPage.route.go(context),
);
}

View File

@@ -20,7 +20,7 @@ extension _SSH on _AppSettingsPageState {
leading: const Icon(BoxIcons.bxs_keyboard),
title: Text(l10n.editVirtKeys),
trailing: const Icon(Icons.keyboard_arrow_right),
onTap: () => AppRoutes.sshVirtKeySetting().go(context),
onTap: () => SSHVirtKeySettingPage.route.go(context),
);
}

View File

@@ -13,13 +13,17 @@ import 'package:server_box/data/res/github_id.dart';
import 'package:server_box/data/res/store.dart';
import 'package:server_box/data/res/url.dart';
import 'package:server_box/core/route.dart';
import 'package:server_box/data/model/app/net_view.dart';
import 'package:server_box/data/res/build_data.dart';
import 'package:server_box/view/page/backup.dart';
import 'package:server_box/view/page/editor.dart';
import 'package:server_box/view/page/private_key/list.dart';
import 'package:server_box/view/page/setting/platform/android.dart';
import 'package:server_box/view/page/setting/platform/ios.dart';
import 'package:server_box/view/page/setting/seq/srv_detail_seq.dart';
import 'package:server_box/view/page/setting/seq/srv_func_seq.dart';
import 'package:server_box/view/page/setting/seq/srv_seq.dart';
import 'package:server_box/view/page/setting/seq/virt_key.dart';
part 'about.dart';
part 'entries/app.dart';
@@ -35,16 +39,17 @@ const _kIconSize = 23.0;
class SettingsPage extends StatefulWidget {
const SettingsPage({super.key});
static const route = AppRouteNoArg(page: SettingsPage.new, path: '/settings');
static const route = AppRouteNoArg(
page: SettingsPage.new,
path: '/settings',
);
@override
State<SettingsPage> createState() => _SettingsPageState();
}
class _SettingsPageState extends State<SettingsPage>
with SingleTickerProviderStateMixin {
late final _tabCtrl =
TabController(length: SettingsTabs.values.length, vsync: this);
class _SettingsPageState extends State<SettingsPage> with SingleTickerProviderStateMixin {
late final _tabCtrl = TabController(length: SettingsTabs.values.length, vsync: this);
@override
void dispose() {
@@ -62,9 +67,7 @@ class _SettingsPageState extends State<SettingsPage>
dividerHeight: 0,
tabAlignment: TabAlignment.center,
isScrollable: true,
tabs: SettingsTabs.values
.map((e) => Tab(text: e.i18n))
.toList(growable: false),
tabs: SettingsTabs.values.map((e) => Tab(text: e.i18n)).toList(growable: false),
),
actions: [
Btn.text(
@@ -120,12 +123,7 @@ final class _AppSettingsPageState extends State<AppSettingsPage> {
children: [
[const CenterGreyTitle('App'), _buildApp()],
[CenterGreyTitle(l10n.server), _buildServer()],
[
const CenterGreyTitle('SSH'),
_buildSSH(),
const CenterGreyTitle('SFTP'),
_buildSFTP()
],
[const CenterGreyTitle('SSH'), _buildSSH(), const CenterGreyTitle('SFTP'), _buildSFTP()],
[
CenterGreyTitle(l10n.container),
_buildContainer(),
@@ -162,6 +160,5 @@ enum SettingsTabs {
SettingsTabs.about => const _AppAboutPage(),
};
static final List<Widget> pages =
SettingsTabs.values.map((e) => e.page).toList();
static final List<Widget> pages = SettingsTabs.values.map((e) => e.page).toList();
}

View File

@@ -9,6 +9,11 @@ class AndroidSettingsPage extends StatefulWidget {
@override
State<AndroidSettingsPage> createState() => _AndroidSettingsPageState();
static const route = AppRouteNoArg(
page: AndroidSettingsPage.new,
path: '/settings/android',
);
}
const _homeWidgetPrefPrefix = 'widget_';
@@ -24,8 +29,7 @@ class _AndroidSettingsPageState extends State<AndroidSettingsPage> {
// _buildFgService(),
_buildBgRun(),
_buildAndroidWidgetSharedPreference(),
if (BioAuth.isPlatformSupported)
PlatformPublicSettings.buildBioAuth(),
if (BioAuth.isPlatformSupported) PlatformPublicSettings.buildBioAuth(),
].map((e) => CardX(child: e)).toList(),
),
);

View File

@@ -6,14 +6,19 @@ import 'package:server_box/data/res/store.dart';
import 'package:server_box/view/page/setting/platform/platform_pub.dart';
import 'package:watch_connectivity/watch_connectivity.dart';
class IOSSettingsPage extends StatefulWidget {
const IOSSettingsPage({super.key});
class IosSettingsPage extends StatefulWidget {
const IosSettingsPage({super.key});
@override
State<IOSSettingsPage> createState() => _IOSSettingsPageState();
State<IosSettingsPage> createState() => _IosSettingsPageState();
static const route = AppRouteNoArg(
page: IosSettingsPage.new,
path: '/settings/ios',
);
}
class _IOSSettingsPageState extends State<IOSSettingsPage> {
class _IosSettingsPageState extends State<IosSettingsPage> {
final _pushToken = ValueNotifier<String?>(null);
final wc = WatchConnectivity();

View File

@@ -9,6 +9,11 @@ class ServerDetailOrderPage extends StatefulWidget {
@override
State<ServerDetailOrderPage> createState() => _ServerDetailOrderPageState();
static const route = AppRouteNoArg(
page: ServerDetailOrderPage.new,
path: '/settings/order/server_detail',
);
}
class _ServerDetailOrderPageState extends State<ServerDetailOrderPage> {

View File

@@ -10,7 +10,10 @@ class ServerFuncBtnsOrderPage extends StatefulWidget {
@override
State<ServerFuncBtnsOrderPage> createState() => _ServerDetailOrderPageState();
static const route = AppRouteNoArg(page: ServerFuncBtnsOrderPage.new, path: '/setting/seq/srv_func');
static const route = AppRouteNoArg(
page: ServerFuncBtnsOrderPage.new,
path: '/setting/seq/srv_func',
);
}
class _ServerDetailOrderPageState extends State<ServerFuncBtnsOrderPage> {
@@ -28,10 +31,7 @@ class _ServerDetailOrderPageState extends State<ServerFuncBtnsOrderPage> {
return ValBuilder(
listenable: prop.listenable(),
builder: (keys) {
final disabled = ServerFuncBtn.values
.map((e) => e.index)
.where((e) => !keys.contains(e))
.toList();
final disabled = ServerFuncBtn.values.map((e) => e.index).where((e) => !keys.contains(e)).toList();
final allKeys = [...keys, ...disabled];
return ReorderableListView.builder(
padding: const EdgeInsets.all(7),

View File

@@ -10,6 +10,11 @@ class ServerOrderPage extends StatefulWidget {
@override
State<ServerOrderPage> createState() => _ServerOrderPageState();
static const route = AppRouteNoArg(
page: ServerOrderPage.new,
path: '/settings/order/server',
);
}
class _ServerOrderPageState extends State<ServerOrderPage> {

View File

@@ -9,6 +9,11 @@ class SSHVirtKeySettingPage extends StatefulWidget {
@override
State<SSHVirtKeySettingPage> createState() => _SSHVirtKeySettingPageState();
static const route = AppRouteNoArg(
page: SSHVirtKeySettingPage.new,
path: '/settings/ssh_virt_key',
);
}
class _SSHVirtKeySettingPageState extends State<SSHVirtKeySettingPage> {