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