mirror of
https://github.com/lollipopkit/flutter_server_box.git
synced 2025-12-16 23:04:22 +01:00
opt.
This commit is contained in:
19
lib/app.dart
19
lib/app.dart
@@ -5,7 +5,6 @@ import 'package:toolbox/core/extension/context/common.dart';
|
||||
import 'package:toolbox/core/extension/locale.dart';
|
||||
import 'package:toolbox/data/res/rebuild.dart';
|
||||
import 'package:toolbox/data/res/store.dart';
|
||||
import 'package:toolbox/view/widget/value_notifier.dart';
|
||||
|
||||
import 'core/utils/ui.dart';
|
||||
import 'data/res/build_data.dart';
|
||||
@@ -27,20 +26,16 @@ class MyApp extends StatelessWidget {
|
||||
}
|
||||
|
||||
Widget _wrapTheme(BuildContext context) {
|
||||
return ValueBuilder(
|
||||
return ListenableBuilder(
|
||||
listenable: RebuildNodes.app,
|
||||
build: () {
|
||||
builder: (_, __) {
|
||||
final tMode = Stores.setting.themeMode.fetch();
|
||||
// Issue #57
|
||||
var themeMode = ThemeMode.system;
|
||||
switch (tMode) {
|
||||
case 1 || 2:
|
||||
themeMode = ThemeMode.values[tMode];
|
||||
break;
|
||||
case 3:
|
||||
themeMode = ThemeMode.dark;
|
||||
break;
|
||||
}
|
||||
final themeMode = switch (tMode) {
|
||||
1 || 2 => ThemeMode.values[tMode],
|
||||
3 => ThemeMode.dark,
|
||||
_ => ThemeMode.system,
|
||||
};
|
||||
final locale = Stores.setting.locale.fetch().toLocale;
|
||||
final darkTheme = ThemeData(
|
||||
useMaterial3: true,
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
import 'package:flutter/foundation.dart';
|
||||
|
||||
// ignore: prefer_void_to_null
|
||||
class RebuildNode implements ValueListenable<Null> {
|
||||
class RebuildNode implements Listenable {
|
||||
final List<VoidCallback> _listeners = [];
|
||||
|
||||
RebuildNode();
|
||||
@@ -21,7 +20,4 @@ class RebuildNode implements ValueListenable<Null> {
|
||||
listener();
|
||||
}
|
||||
}
|
||||
|
||||
@override
|
||||
Null get value => null;
|
||||
}
|
||||
|
||||
@@ -21,7 +21,6 @@ import 'package:toolbox/view/widget/expand_tile.dart';
|
||||
import 'package:toolbox/view/widget/cardx.dart';
|
||||
import 'package:toolbox/view/widget/input_field.dart';
|
||||
import 'package:toolbox/view/widget/store_switch.dart';
|
||||
import 'package:toolbox/view/widget/value_notifier.dart';
|
||||
|
||||
class BackupPage extends StatelessWidget {
|
||||
BackupPage({super.key});
|
||||
@@ -161,9 +160,9 @@ class BackupPage extends StatelessWidget {
|
||||
),
|
||||
ListTile(
|
||||
title: Text(l10n.manual),
|
||||
trailing: ValueBuilder(
|
||||
trailing: ListenableBuilder(
|
||||
listenable: webdavLoading,
|
||||
build: () {
|
||||
builder: (_, __) {
|
||||
if (webdavLoading.value) {
|
||||
return UIs.centerSizedLoadingSmall;
|
||||
}
|
||||
|
||||
@@ -29,7 +29,6 @@ import '../../data/res/url.dart';
|
||||
import '../widget/appbar.dart';
|
||||
import '../widget/cardx.dart';
|
||||
import '../widget/url_text.dart';
|
||||
import '../widget/value_notifier.dart';
|
||||
|
||||
class HomePage extends StatefulWidget {
|
||||
const HomePage({super.key});
|
||||
@@ -114,6 +113,7 @@ class _HomePageState extends State<HomePage>
|
||||
return Scaffold(
|
||||
drawer: _buildDrawer(),
|
||||
appBar: CustomAppBar(
|
||||
centerTitle: false,
|
||||
title: const Text(BuildData.name),
|
||||
actions: <Widget>[
|
||||
IconButton(
|
||||
@@ -133,9 +133,9 @@ class _HomePageState extends State<HomePage>
|
||||
}
|
||||
},
|
||||
),
|
||||
bottomNavigationBar: ValueBuilder(
|
||||
bottomNavigationBar: ListenableBuilder(
|
||||
listenable: _selectIndex,
|
||||
build: _buildBottomBar,
|
||||
builder: (_, __) => _buildBottomBar(),
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
@@ -8,7 +8,6 @@ import 'package:toolbox/core/extension/context/snackbar.dart';
|
||||
import 'package:toolbox/core/extension/uint8list.dart';
|
||||
import 'package:toolbox/core/utils/share.dart';
|
||||
import 'package:toolbox/data/res/provider.dart';
|
||||
import 'package:toolbox/view/widget/value_notifier.dart';
|
||||
|
||||
import '../../data/model/server/ping_result.dart';
|
||||
import '../../data/res/color.dart';
|
||||
@@ -49,9 +48,9 @@ class _PingPageState extends State<PingPage>
|
||||
Widget build(BuildContext context) {
|
||||
super.build(context);
|
||||
return Scaffold(
|
||||
body: ValueBuilder(
|
||||
body: ListenableBuilder(
|
||||
listenable: _results,
|
||||
build: _buildBody,
|
||||
builder: (_, __) => _buildBody(),
|
||||
),
|
||||
floatingActionButton: _buildFAB(),
|
||||
);
|
||||
|
||||
@@ -17,7 +17,6 @@ import '../../widget/appbar.dart';
|
||||
import '../../widget/input_field.dart';
|
||||
import '../../widget/cardx.dart';
|
||||
import '../../widget/tag.dart';
|
||||
import '../../widget/value_notifier.dart';
|
||||
|
||||
class ServerEditPage extends StatefulWidget {
|
||||
const ServerEditPage({super.key, this.spi});
|
||||
@@ -221,9 +220,9 @@ class _ServerEditPageState extends State<ServerEditPage> {
|
||||
_buildJumpServer(),
|
||||
ListTile(
|
||||
title: Text(l10n.autoConnect),
|
||||
trailing: ValueBuilder(
|
||||
trailing: ListenableBuilder(
|
||||
listenable: _autoConnect,
|
||||
build: () => Switch(
|
||||
builder: (_, __) => Switch(
|
||||
value: _autoConnect.value,
|
||||
onChanged: (val) {
|
||||
_autoConnect.value = val;
|
||||
@@ -245,9 +244,9 @@ class _ServerEditPageState extends State<ServerEditPage> {
|
||||
Widget _buildAuth() {
|
||||
final switch_ = ListTile(
|
||||
title: Text(l10n.keyAuth),
|
||||
trailing: ValueBuilder(
|
||||
trailing: ListenableBuilder(
|
||||
listenable: _keyIdx,
|
||||
build: () => Switch(
|
||||
builder: (_, __) => Switch(
|
||||
value: _keyIdx.value != null,
|
||||
onChanged: (val) {
|
||||
if (val) {
|
||||
@@ -261,9 +260,9 @@ class _ServerEditPageState extends State<ServerEditPage> {
|
||||
);
|
||||
|
||||
/// Put [switch_] out of [ValueBuilder] to avoid rebuild
|
||||
return ValueBuilder(
|
||||
return ListenableBuilder(
|
||||
listenable: _keyIdx,
|
||||
build: () {
|
||||
builder: (_, __) {
|
||||
final children = <Widget>[switch_];
|
||||
if (_keyIdx.value != null) {
|
||||
children.add(_buildKeyAuth());
|
||||
@@ -334,9 +333,9 @@ class _ServerEditPageState extends State<ServerEditPage> {
|
||||
}
|
||||
|
||||
Widget _buildRadio(int index, PrivateKeyInfo pki) {
|
||||
return ValueBuilder(
|
||||
return ListenableBuilder(
|
||||
listenable: _keyIdx,
|
||||
build: () => Radio<int>(
|
||||
builder: (_, __) => Radio<int>(
|
||||
value: index,
|
||||
groupValue: _keyIdx.value,
|
||||
onChanged: (value) {
|
||||
@@ -347,9 +346,9 @@ class _ServerEditPageState extends State<ServerEditPage> {
|
||||
}
|
||||
|
||||
Widget _buildJumpServer() {
|
||||
return ValueBuilder(
|
||||
return ListenableBuilder(
|
||||
listenable: _jumpServer,
|
||||
build: () {
|
||||
builder: (_, __) {
|
||||
final children = Pros.server.servers
|
||||
.where((element) => element.spi.jumpId == null)
|
||||
.where((element) => element.spi.id != widget.spi?.id)
|
||||
|
||||
@@ -14,7 +14,6 @@ import 'package:toolbox/data/model/app/shell_func.dart';
|
||||
import 'package:toolbox/data/model/server/try_limiter.dart';
|
||||
import 'package:toolbox/data/res/provider.dart';
|
||||
import 'package:toolbox/data/res/store.dart';
|
||||
import 'package:toolbox/view/widget/value_notifier.dart';
|
||||
|
||||
import '../../../core/route.dart';
|
||||
import '../../../data/model/app/net_view.dart';
|
||||
@@ -61,9 +60,9 @@ class _ServerPageState extends State<ServerPage>
|
||||
super.build(context);
|
||||
return Scaffold(
|
||||
appBar: _buildTagsSwitcher(Pros.server),
|
||||
body: ValueBuilder(
|
||||
body: ListenableBuilder(
|
||||
listenable: Stores.setting.textFactor.listenable(),
|
||||
build: () {
|
||||
builder: (_, __) {
|
||||
_textFactorDouble = Stores.setting.textFactor.fetch();
|
||||
_textFactor = TextScaler.linear(_textFactorDouble);
|
||||
return _buildBody();
|
||||
@@ -200,9 +199,9 @@ class _ServerPageState extends State<ServerPage>
|
||||
final cardStatus = _getCardNoti(id);
|
||||
final title = _buildServerCardTitle(srv.status, srv.state, srv.spi);
|
||||
|
||||
return ValueBuilder(
|
||||
return ListenableBuilder(
|
||||
listenable: cardStatus,
|
||||
build: () {
|
||||
builder: (_, __) {
|
||||
late final List<Widget> children;
|
||||
if (srv.state == ServerState.finished) {
|
||||
if (cardStatus.value.flip) {
|
||||
@@ -417,9 +416,9 @@ class _ServerPageState extends State<ServerPage>
|
||||
|
||||
Widget _buildDisk(ServerStatus ss, String id) {
|
||||
final cardNoti = _getCardNoti(id);
|
||||
return ValueBuilder(
|
||||
return ListenableBuilder(
|
||||
listenable: cardNoti,
|
||||
build: () {
|
||||
builder: (_, __) {
|
||||
final rootDisk = findRootDisk(ss.disk);
|
||||
final isSpeed = cardNoti.value.diskIO ??
|
||||
!Stores.setting.serverTabPreferDiskAmount.fetch();
|
||||
|
||||
@@ -34,7 +34,6 @@ import '../../widget/appbar.dart';
|
||||
import '../../widget/input_field.dart';
|
||||
import '../../widget/cardx.dart';
|
||||
import '../../widget/store_switch.dart';
|
||||
import '../../widget/value_notifier.dart';
|
||||
|
||||
class SettingPage extends StatefulWidget {
|
||||
const SettingPage({super.key});
|
||||
@@ -285,9 +284,9 @@ class _SettingPageState extends State<SettingPage> {
|
||||
onTap: () {
|
||||
_updateIntervalKey.currentState?.showButtonMenu();
|
||||
},
|
||||
trailing: ValueBuilder(
|
||||
trailing: ListenableBuilder(
|
||||
listenable: _updateInterval,
|
||||
build: () => PopupMenuButton(
|
||||
builder: (_, __) => PopupMenuButton(
|
||||
key: _updateIntervalKey,
|
||||
itemBuilder: (_) => items,
|
||||
initialValue: _updateInterval.value,
|
||||
@@ -311,9 +310,9 @@ class _SettingPageState extends State<SettingPage> {
|
||||
Widget _buildAppColor() {
|
||||
return ListTile(
|
||||
trailing: ClipOval(
|
||||
child: ValueBuilder(
|
||||
child: ListenableBuilder(
|
||||
listenable: _selectedColorValue,
|
||||
build: () => Container(
|
||||
builder: (_, __) => Container(
|
||||
color: primaryColor,
|
||||
height: 27,
|
||||
width: 27,
|
||||
@@ -444,8 +443,8 @@ class _SettingPageState extends State<SettingPage> {
|
||||
onTap: () {
|
||||
_maxRetryKey.currentState?.showButtonMenu();
|
||||
},
|
||||
trailing: ValueBuilder(
|
||||
build: () => PopupMenuButton(
|
||||
trailing: ListenableBuilder(
|
||||
builder: (_, __) => PopupMenuButton(
|
||||
key: _maxRetryKey,
|
||||
itemBuilder: (BuildContext context) => items,
|
||||
initialValue: _maxRetryCount.value,
|
||||
@@ -490,9 +489,9 @@ class _SettingPageState extends State<SettingPage> {
|
||||
onTap: () {
|
||||
_themeKey.currentState?.showButtonMenu();
|
||||
},
|
||||
trailing: ValueBuilder(
|
||||
trailing: ListenableBuilder(
|
||||
listenable: _nightMode,
|
||||
build: () => PopupMenuButton(
|
||||
builder: (_, __) => PopupMenuButton(
|
||||
key: _themeKey,
|
||||
itemBuilder: (BuildContext context) => items,
|
||||
initialValue: _nightMode.value,
|
||||
@@ -577,9 +576,9 @@ class _SettingPageState extends State<SettingPage> {
|
||||
}
|
||||
|
||||
Widget _buildTermFontSize() {
|
||||
return ValueBuilder(
|
||||
return ListenableBuilder(
|
||||
listenable: _termFontSize,
|
||||
build: () => ListTile(
|
||||
builder: (_, __) => ListTile(
|
||||
title: Text(l10n.fontSize),
|
||||
trailing: Text(
|
||||
_termFontSize.value.toString(),
|
||||
@@ -641,9 +640,9 @@ class _SettingPageState extends State<SettingPage> {
|
||||
onTap: () {
|
||||
_localeKey.currentState?.showButtonMenu();
|
||||
},
|
||||
trailing: ValueBuilder(
|
||||
trailing: ListenableBuilder(
|
||||
listenable: _localeCode,
|
||||
build: () => PopupMenuButton(
|
||||
builder: (_, __) => PopupMenuButton(
|
||||
key: _localeKey,
|
||||
itemBuilder: (BuildContext context) => items,
|
||||
initialValue: _localeCode.value,
|
||||
@@ -681,9 +680,9 @@ class _SettingPageState extends State<SettingPage> {
|
||||
).toList();
|
||||
return ListTile(
|
||||
title: Text('${l10n.light} ${l10n.theme.toLowerCase()}'),
|
||||
trailing: ValueBuilder(
|
||||
trailing: ListenableBuilder(
|
||||
listenable: _editorTheme,
|
||||
build: () => PopupMenuButton(
|
||||
builder: (_, __) => PopupMenuButton(
|
||||
key: _editorThemeKey,
|
||||
itemBuilder: (BuildContext context) => items,
|
||||
initialValue: _editorTheme.value,
|
||||
@@ -714,9 +713,9 @@ class _SettingPageState extends State<SettingPage> {
|
||||
).toList();
|
||||
return ListTile(
|
||||
title: Text('${l10n.dark} ${l10n.theme.toLowerCase()}'),
|
||||
trailing: ValueBuilder(
|
||||
trailing: ListenableBuilder(
|
||||
listenable: _editorDarkTheme,
|
||||
build: () => PopupMenuButton(
|
||||
builder: (_, __) => PopupMenuButton(
|
||||
key: _editorDarkThemeKey,
|
||||
itemBuilder: (BuildContext context) => items,
|
||||
initialValue: _editorDarkTheme.value,
|
||||
@@ -768,9 +767,9 @@ class _SettingPageState extends State<SettingPage> {
|
||||
onTap: () {
|
||||
_rotateQuarterKey.currentState?.showButtonMenu();
|
||||
},
|
||||
trailing: ValueBuilder(
|
||||
trailing: ListenableBuilder(
|
||||
listenable: _rotateQuarter,
|
||||
build: () => PopupMenuButton(
|
||||
builder: (_, __) => PopupMenuButton(
|
||||
key: _rotateQuarterKey,
|
||||
itemBuilder: (BuildContext context) => items,
|
||||
initialValue: _rotateQuarter.value,
|
||||
@@ -816,9 +815,9 @@ class _SettingPageState extends State<SettingPage> {
|
||||
return ListTile(
|
||||
title: Text(l10n.keyboardType),
|
||||
subtitle: Text(l10n.keyboardCompatibility, style: UIs.textGrey),
|
||||
trailing: ValueBuilder(
|
||||
trailing: ListenableBuilder(
|
||||
listenable: _keyboardType,
|
||||
build: () => PopupMenuButton<int>(
|
||||
builder: (_, __) => PopupMenuButton<int>(
|
||||
key: _keyboardTypeKey,
|
||||
itemBuilder: (BuildContext context) => items,
|
||||
initialValue: _keyboardType.value,
|
||||
@@ -872,9 +871,9 @@ class _SettingPageState extends State<SettingPage> {
|
||||
.toList();
|
||||
return ListTile(
|
||||
title: Text(l10n.netViewType),
|
||||
trailing: ValueBuilder(
|
||||
trailing: ListenableBuilder(
|
||||
listenable: _netViewType,
|
||||
build: () => PopupMenuButton<NetViewType>(
|
||||
builder: (_, __) => PopupMenuButton<NetViewType>(
|
||||
key: _netViewTypeKey,
|
||||
itemBuilder: (BuildContext context) => items,
|
||||
initialValue: _netViewType.value,
|
||||
@@ -942,9 +941,9 @@ class _SettingPageState extends State<SettingPage> {
|
||||
return ListTile(
|
||||
title: Text(l10n.textScaler),
|
||||
subtitle: Text(l10n.textScalerTip, style: UIs.textGrey),
|
||||
trailing: ValueBuilder(
|
||||
trailing: ListenableBuilder(
|
||||
listenable: _textScaler,
|
||||
build: () => Text(
|
||||
builder: (_, __) => Text(
|
||||
_textScaler.value.toString(),
|
||||
style: UIs.text15,
|
||||
),
|
||||
@@ -1013,9 +1012,9 @@ class _SettingPageState extends State<SettingPage> {
|
||||
}
|
||||
|
||||
Widget _buildEditorFontSize() {
|
||||
return ValueBuilder(
|
||||
return ListenableBuilder(
|
||||
listenable: _editorFontSize,
|
||||
build: () => ListTile(
|
||||
builder: (_, __) => ListTile(
|
||||
title: Text(l10n.fontSize),
|
||||
trailing: Text(
|
||||
_editorFontSize.value.toString(),
|
||||
|
||||
@@ -11,7 +11,7 @@ class CustomAppBar extends StatelessWidget implements PreferredSizeWidget {
|
||||
super.key,
|
||||
this.title,
|
||||
this.actions,
|
||||
this.centerTitle,
|
||||
this.centerTitle = true,
|
||||
this.leading,
|
||||
this.backgroundColor,
|
||||
});
|
||||
|
||||
@@ -1,16 +0,0 @@
|
||||
import 'package:flutter/foundation.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
class ValueBuilder<T> extends ValueListenableBuilder<T> {
|
||||
final ValueListenable<T> listenable;
|
||||
final Widget Function() build;
|
||||
|
||||
ValueBuilder({
|
||||
super.key,
|
||||
required this.listenable,
|
||||
required this.build,
|
||||
}) : super(
|
||||
valueListenable: listenable,
|
||||
builder: (_, __, ___) => build(),
|
||||
);
|
||||
}
|
||||
@@ -81,7 +81,7 @@ Overlay 3.0T 1.4t 1.6T 48%/Share/CacheDev1_data/Container/Container-SATA/LIB/DOC
|
||||
/dev/mapper/vg1-snap10016
|
||||
3.0T 1.4T 1.6T 48% /mnt/snapshot/1/10016
|
||||
''';
|
||||
final disks = parseDisk(raw);
|
||||
final disks = Disk.parse(raw);
|
||||
print(disks.map((e) => '${e.mount} ${e.used}').join('\n'));
|
||||
});
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user