opt.: mem usage

This commit is contained in:
lollipopkit
2023-09-13 15:22:48 +08:00
parent 278d5984b2
commit eb158e63a2
44 changed files with 333 additions and 360 deletions

View File

@@ -11,19 +11,16 @@ import 'package:toolbox/core/utils/platform.dart';
import 'package:toolbox/data/model/app/backup.dart';
import 'package:toolbox/data/res/logger.dart';
import 'package:toolbox/data/res/path.dart';
import 'package:toolbox/data/res/store.dart';
import 'package:toolbox/view/widget/round_rect_card.dart';
import '../../core/utils/misc.dart';
import '../../data/res/ui.dart';
import '../../data/store/setting.dart';
import '../../locator.dart';
import '../widget/custom_appbar.dart';
import '../widget/store_switch.dart';
class BackupPage extends StatelessWidget {
BackupPage({Key? key}) : super(key: key);
final _setting = locator<SettingStore>();
const BackupPage({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
@@ -118,7 +115,7 @@ class BackupPage extends StatelessWidget {
// },
// icon: const Icon(Icons.sync)),
// width13,
StoreSwitch(prop: _setting.icloudSync)
StoreSwitch(prop: Stores.setting.icloudSync)
],
);
}

View File

@@ -6,6 +6,7 @@ import 'package:toolbox/core/extension/context/dialog.dart';
import 'package:toolbox/core/extension/context/snackbar.dart';
import 'package:toolbox/core/route.dart';
import 'package:toolbox/data/model/docker/image.dart';
import 'package:toolbox/data/res/store.dart';
import 'package:toolbox/view/widget/input_field.dart';
import '../../data/model/docker/ps.dart';
@@ -16,7 +17,6 @@ import '../../data/model/app/error.dart';
import '../../data/model/app/menu.dart';
import '../../data/res/ui.dart';
import '../../data/res/url.dart';
import '../../data/store/docker.dart';
import '../../locator.dart';
import '../widget/custom_appbar.dart';
import '../widget/popup_menu.dart';
@@ -34,7 +34,6 @@ class DockerManagePage extends StatefulWidget {
class _DockerManagePageState extends State<DockerManagePage> {
final _docker = locator<DockerProvider>();
final _store = locator<DockerStore>();
final _textController = TextEditingController();
late S _s;
@@ -479,7 +478,7 @@ class _DockerManagePageState extends State<DockerManagePage> {
Future<void> _showEditHostDialog() async {
final id = widget.spi.id;
final host = _store.fetch(id) ?? 'unix:///run/user/1000/docker.sock';
final host = Stores.docker.fetch(id) ?? 'unix:///run/user/1000/docker.sock';
final ctrl = TextEditingController(text: host);
await context.showRoundDialog(
title: Text(_s.dockerEditHost),
@@ -499,7 +498,7 @@ class _DockerManagePageState extends State<DockerManagePage> {
void _onSaveDockerHost(String val) {
context.pop();
_store.put(widget.spi.id, val.trim());
Stores.docker.put(widget.spi.id, val.trim());
_docker.refresh();
}
}

View File

@@ -11,8 +11,7 @@ import 'package:toolbox/core/extension/context/common.dart';
import 'package:toolbox/core/extension/context/dialog.dart';
import 'package:toolbox/core/utils/misc.dart';
import 'package:toolbox/data/res/highlight.dart';
import 'package:toolbox/data/store/setting.dart';
import 'package:toolbox/locator.dart';
import 'package:toolbox/data/res/store.dart';
import '../widget/custom_appbar.dart';
import '../widget/two_line_text.dart';
@@ -45,12 +44,12 @@ class EditorPage extends StatefulWidget {
class _EditorPageState extends State<EditorPage> {
final _focusNode = FocusNode();
final _setting = locator<SettingStore>();
late CodeController _controller;
late Map<String, TextStyle> _codeTheme;
late S _s;
late final _textStyle = TextStyle(fontSize: _setting.editorFontSize.fetch());
late final _textStyle =
TextStyle(fontSize: Stores.setting.editorFontSize.fetch());
String? _langCode;
@@ -81,9 +80,11 @@ class _EditorPageState extends State<EditorPage> {
_s = S.of(context)!;
if (context.isDark) {
_codeTheme = themeMap[_setting.editorDarkTheme.fetch()] ?? monokaiTheme;
_codeTheme =
themeMap[Stores.setting.editorDarkTheme.fetch()] ?? monokaiTheme;
} else {
_codeTheme = themeMap[_setting.editorTheme.fetch()] ?? a11yLightTheme;
_codeTheme =
themeMap[Stores.setting.editorTheme.fetch()] ?? a11yLightTheme;
}
_focusNode.requestFocus();
}

View File

@@ -10,8 +10,8 @@ import 'package:provider/provider.dart';
import 'package:toolbox/core/route.dart';
import 'package:toolbox/data/model/server/disk.dart';
import 'package:toolbox/data/provider/server.dart';
import 'package:toolbox/data/res/store.dart';
import 'package:toolbox/data/res/ui.dart';
import 'package:toolbox/data/store/setting.dart';
import 'package:toolbox/locator.dart';
import '../../core/analysis.dart';
@@ -39,13 +39,12 @@ class _FullScreenPageState extends State<FullScreenPage> with AfterLayoutMixin {
final _pageController = PageController(initialPage: 0);
final _serverProvider = locator<ServerProvider>();
final _setting = locator<SettingStore>();
@override
void initState() {
super.initState();
switchStatusBar(hide: true);
_rotateQuarter = _setting.fullScreenRotateQuarter.fetch();
_rotateQuarter = Stores.setting.fullScreenRotateQuarter.fetch();
_timer = Timer.periodic(const Duration(minutes: 1), (_) {
if (mounted) {
setState(() {});
@@ -88,7 +87,8 @@ class _FullScreenPageState extends State<FullScreenPage> with AfterLayoutMixin {
// `_screenWidth * 0.03` is the offset value
padding: EdgeInsets.all(_screenWidth * 0.03),
child: ValueListenableBuilder<int>(
valueListenable: _setting.fullScreenRotateQuarter.listenable(),
valueListenable:
Stores.setting.fullScreenRotateQuarter.listenable(),
builder: (_, val, __) {
_rotateQuarter = val;
return RotatedBox(
@@ -297,7 +297,7 @@ class _FullScreenPageState extends State<FullScreenPage> with AfterLayoutMixin {
Widget _buildNet(ServerStatus ss) {
return ValueListenableBuilder<NetViewType>(
valueListenable: _setting.netViewType.listenable(),
valueListenable: Stores.setting.netViewType.listenable(),
builder: (_, val, __) {
final data = val.build(ss);
return AnimatedSwitcher(
@@ -368,7 +368,7 @@ class _FullScreenPageState extends State<FullScreenPage> with AfterLayoutMixin {
@override
Future<void> afterFirstLayout(BuildContext context) async {
if (_setting.autoCheckAppUpdate.fetch()) {
if (Stores.setting.autoCheckAppUpdate.fetch()) {
doUpdate(context);
}
await GetIt.I.allReady();

View File

@@ -7,6 +7,7 @@ import 'package:get_it/get_it.dart';
import 'package:toolbox/core/extension/context/dialog.dart';
import 'package:toolbox/data/res/github_id.dart';
import 'package:toolbox/data/res/logger.dart';
import 'package:toolbox/data/res/store.dart';
import '../../core/analysis.dart';
import '../../core/route.dart';
@@ -21,7 +22,6 @@ import '../../data/res/build_data.dart';
import '../../data/res/misc.dart';
import '../../data/res/ui.dart';
import '../../data/res/url.dart';
import '../../data/store/setting.dart';
import '../../locator.dart';
import '../widget/custom_appbar.dart';
import '../widget/round_rect_card.dart';
@@ -41,7 +41,6 @@ class _HomePageState extends State<HomePage>
AfterLayoutMixin,
WidgetsBindingObserver {
final _serverProvider = locator<ServerProvider>();
final _setting = locator<SettingStore>();
final _app = locator<AppProvider>();
late final PageController _pageController;
@@ -56,7 +55,7 @@ class _HomePageState extends State<HomePage>
super.initState();
switchStatusBar(hide: false);
WidgetsBinding.instance.addObserver(this);
_selectIndex.value = _setting.launchPage.fetch();
_selectIndex.value = Stores.setting.launchPage.fetch();
// avoid index out of range
if (_selectIndex.value >= AppTab.values.length || _selectIndex.value < 0) {
_selectIndex.value = 0;
@@ -92,7 +91,7 @@ class _HomePageState extends State<HomePage>
break;
case AppLifecycleState.paused:
// Keep running in background on Android device
if (isAndroid && _setting.bgRun.fetch()) {
if (isAndroid && Stores.setting.bgRun.fetch()) {
if (_app.moveBg) {
Miscs.bgRunChannel.invokeMethod('sendToBackground');
}
@@ -210,7 +209,8 @@ class _HomePageState extends State<HomePage>
TextButton(
onPressed: () => context.showRoundDialog(
title: Text(_versionStr),
child: const Text(BuildData.buildAt),
child: const Text(
'${BuildData.buildAt}\nFlutter ${BuildData.engine}'),
),
child: Text(
'${BuildData.name}\n$_versionStr',
@@ -333,7 +333,7 @@ class _HomePageState extends State<HomePage>
if (BuildData.modifications != 0) {
mod = '(+${BuildData.modifications})';
}
return 'Ver: 1.0.${BuildData.build}$mod';
return 'v1.0.${BuildData.build}$mod';
}
@override
@@ -341,7 +341,7 @@ class _HomePageState extends State<HomePage>
@override
Future<void> afterFirstLayout(BuildContext context) async {
if (_setting.autoCheckAppUpdate.fetch()) {
if (Stores.setting.autoCheckAppUpdate.fetch()) {
doUpdate(context);
}
updateHomeWidget();
@@ -354,14 +354,14 @@ class _HomePageState extends State<HomePage>
}
void updateHomeWidget() {
if (_setting.autoUpdateHomeWidget.fetch()) {
if (Stores.setting.autoUpdateHomeWidget.fetch()) {
Miscs.homeWidgetChannel.invokeMethod('update');
}
}
Future<void> _onLongPressSetting() async {
/// Encode [map] to String with indent `\t`
final map = _setting.toJson();
final map = Stores.setting.toJson();
final keys = map.keys;
final text = Miscs.jsonEncoder.convert(map);
final result = await AppRoute.editor(
@@ -374,11 +374,11 @@ class _HomePageState extends State<HomePage>
}
try {
final newSettings = json.decode(result) as Map<String, dynamic>;
_setting.box.putAll(newSettings);
Stores.setting.box.putAll(newSettings);
final newKeys = newSettings.keys;
final removedKeys = keys.where((e) => !newKeys.contains(e));
for (final key in removedKeys) {
_setting.box.delete(key);
Stores.setting.box.delete(key);
}
} catch (e, trace) {
context.showRoundDialog(

View File

@@ -6,8 +6,7 @@ import 'package:flutter_gen/gen_l10n/l10n.dart';
import 'package:provider/provider.dart';
import 'package:toolbox/core/extension/context/common.dart';
import 'package:toolbox/core/extension/context/dialog.dart';
import 'package:toolbox/data/store/private_key.dart';
import 'package:toolbox/locator.dart';
import 'package:toolbox/data/res/store.dart';
import '../../../core/route.dart';
import '../../../core/utils/platform.dart';
@@ -83,9 +82,8 @@ class _PrivateKeyListState extends State<PrivateKeysListPage>
}
void autoAddSystemPriavteKey() {
final store = locator<PrivateKeyStore>();
// Only trigger on desktop platform and no private key saved
if (isDesktop && store.box.keys.isEmpty) {
if (isDesktop && Stores.snippet.box.keys.isEmpty) {
final home = getHomeDir();
if (home == null) return;
final idRsaFile = File(joinPath(home, '.ssh/id_rsa'));

View File

@@ -8,13 +8,13 @@ import 'package:toolbox/core/extension/context/dialog.dart';
import 'package:toolbox/core/extension/context/snackbar.dart';
import 'package:toolbox/core/extension/uint8list.dart';
import 'package:toolbox/core/utils/misc.dart';
import 'package:toolbox/data/res/store.dart';
import '../../data/model/app/shell_func.dart';
import '../../data/model/server/proc.dart';
import '../../data/model/server/server_private_info.dart';
import '../../data/provider/server.dart';
import '../../data/res/ui.dart';
import '../../data/store/setting.dart';
import '../../locator.dart';
import '../widget/custom_appbar.dart';
import '../widget/round_rect_card.dart';
@@ -33,8 +33,6 @@ class _ProcessPageState extends State<ProcessPage> {
late Timer _timer;
late MediaQueryData _media;
final _setting = locator<SettingStore>();
SSHClient? _client;
PsResult _result = const PsResult(procs: []);
@@ -53,7 +51,7 @@ class _ProcessPageState extends State<ProcessPage> {
super.initState();
_client = _serverProvider.servers[widget.spi.id]?.client;
final duration =
Duration(seconds: _setting.serverStatusUpdateInterval.fetch());
Duration(seconds: Stores.setting.serverStatusUpdateInterval.fetch());
_timer = Timer.periodic(duration, (_) => _refresh());
}

View File

@@ -6,6 +6,7 @@ import 'package:toolbox/core/extension/order.dart';
import 'package:toolbox/data/model/server/cpu.dart';
import 'package:toolbox/data/model/server/server_private_info.dart';
import 'package:toolbox/data/model/server/system.dart';
import 'package:toolbox/data/res/store.dart';
import 'package:toolbox/view/widget/server_func_btns.dart';
import '../../../core/extension/numx.dart';
@@ -17,8 +18,6 @@ import '../../../data/provider/server.dart';
import '../../../data/res/color.dart';
import '../../../data/res/default.dart';
import '../../../data/res/ui.dart';
import '../../../data/store/setting.dart';
import '../../../locator.dart';
import '../../widget/custom_appbar.dart';
import '../../widget/round_rect_card.dart';
@@ -36,9 +35,8 @@ class _ServerDetailPageState extends State<ServerDetailPage>
late MediaQueryData _media;
late S _s;
final Order<String> _cardsOrder = [];
final _setting = locator<SettingStore>();
late final _textFactor = _setting.textFactor.fetch();
late final _textFactor = Stores.setting.textFactor.fetch();
late final _cardBuildMap = Map.fromIterables(
Defaults.detailCardOrder,
@@ -63,7 +61,7 @@ class _ServerDetailPageState extends State<ServerDetailPage>
@override
void initState() {
super.initState();
_cardsOrder.addAll(_setting.detailCardOrder.fetch());
_cardsOrder.addAll(Stores.setting.detailCardOrder.fetch());
}
@override
@@ -82,7 +80,7 @@ class _ServerDetailPageState extends State<ServerDetailPage>
}
Widget _buildMainPage(Server si) {
final buildFuncs = !_setting.moveOutServerTabFuncBtns.fetch();
final buildFuncs = !Stores.setting.moveOutServerTabFuncBtns.fetch();
return Scaffold(
appBar: CustomAppBar(
title: Text(si.spi.name, style: UIs.textSize18),
@@ -309,7 +307,7 @@ class _ServerDetailPageState extends State<ServerDetailPage>
Widget _buildDiskView(ServerStatus ss) {
final disk = ss.disk;
disk.removeWhere((e) {
for (final ingorePath in _setting.diskIgnorePath.fetch()) {
for (final ingorePath in Stores.setting.diskIgnorePath.fetch()) {
if (e.path.startsWith(ingorePath)) return true;
}
return false;

View File

@@ -8,6 +8,7 @@ import 'package:toolbox/core/extension/context/dialog.dart';
import 'package:toolbox/core/extension/media_queryx.dart';
import 'package:toolbox/core/extension/ssh_client.dart';
import 'package:toolbox/data/model/app/shell_func.dart';
import 'package:toolbox/data/res/store.dart';
import '../../../core/route.dart';
import '../../../core/utils/misc.dart';
@@ -20,7 +21,6 @@ import '../../../data/model/server/server_status.dart';
import '../../../data/provider/server.dart';
import '../../../data/res/color.dart';
import '../../../data/res/ui.dart';
import '../../../data/store/setting.dart';
import '../../../locator.dart';
import '../../widget/round_rect_card.dart';
import '../../widget/server_func_btns.dart';
@@ -40,7 +40,6 @@ class _ServerPageState extends State<ServerPage>
final _flipedCardIds = <String>{};
final _serverProvider = locator<ServerProvider>();
final _setting = locator<SettingStore>();
String? _tag;
bool _useDoubleColumn = false;
@@ -83,7 +82,8 @@ class _ServerPageState extends State<ServerPage>
}
final filtered = _filterServers(pro);
if (_useDoubleColumn && _setting.doubleColumnServersPage.fetch()) {
if (_useDoubleColumn &&
Stores.setting.doubleColumnServersPage.fetch()) {
return _buildBodyMedium(pro);
}
return _buildBodySmall(provider: pro, filtered: filtered);
@@ -290,9 +290,9 @@ class _ServerPageState extends State<ServerPage>
),
),
UIs.height13,
if (_setting.moveOutServerTabFuncBtns.fetch() &&
if (Stores.setting.moveOutServerTabFuncBtns.fetch() &&
// Discussion #146
!_setting.serverTabUseOldUI.fetch())
!Stores.setting.serverTabUseOldUI.fetch())
SizedBox(
height: 27,
child: ServerFuncBtns(spi: spi, s: _s),
@@ -318,7 +318,7 @@ class _ServerPageState extends State<ServerPage>
),
),
);
} else if (_setting.serverTabUseOldUI.fetch()) {
} else if (Stores.setting.serverTabUseOldUI.fetch()) {
rightCorner = ServerFuncBtnsTopRight(spi: spi, s: _s);
}
return Padding(
@@ -392,7 +392,7 @@ class _ServerPageState extends State<ServerPage>
Widget _buildNet(ServerStatus ss) {
return ValueListenableBuilder<NetViewType>(
valueListenable: _setting.netViewType.listenable(),
valueListenable: Stores.setting.netViewType.listenable(),
builder: (_, val, __) {
final data = val.build(ss);
return AnimatedSwitcher(
@@ -510,9 +510,9 @@ class _ServerPageState extends State<ServerPage>
if (_flipedCardIds.contains(id)) {
return 77.0;
}
if (_setting.moveOutServerTabFuncBtns.fetch() &&
if (Stores.setting.moveOutServerTabFuncBtns.fetch() &&
// Discussion #146
!_setting.serverTabUseOldUI.fetch()) {
!Stores.setting.serverTabUseOldUI.fetch()) {
return 132;
}
return 107;

View File

@@ -12,6 +12,7 @@ import 'package:toolbox/core/extension/context/snackbar.dart';
import 'package:toolbox/core/extension/locale.dart';
import 'package:toolbox/core/extension/context/dialog.dart';
import 'package:toolbox/core/extension/stringx.dart';
import 'package:toolbox/data/res/store.dart';
import '../../../core/persistant_store.dart';
import '../../../core/route.dart';
@@ -25,8 +26,6 @@ import '../../../data/res/build_data.dart';
import '../../../data/res/color.dart';
import '../../../data/res/path.dart';
import '../../../data/res/ui.dart';
import '../../../data/store/server.dart';
import '../../../data/store/setting.dart';
import '../../../locator.dart';
import '../../widget/color_picker.dart';
import '../../widget/custom_appbar.dart';
@@ -53,9 +52,9 @@ class _SettingPageState extends State<SettingPage> {
final _keyboardTypeKey = GlobalKey<PopupMenuButtonState<int>>();
final _rotateQuarterKey = GlobalKey<PopupMenuButtonState<int>>();
final _netViewTypeKey = GlobalKey<PopupMenuButtonState<NetViewType>>();
final _serverProvider = locator<ServerProvider>();
final _setting = Stores.setting;
late final SettingStore _setting;
late final ServerProvider _serverProvider;
late S _s;
late SharedPreferences _sp;
@@ -89,8 +88,6 @@ class _SettingPageState extends State<SettingPage> {
@override
void initState() {
super.initState();
_serverProvider = locator<ServerProvider>();
_setting = locator<SettingStore>();
_nightMode.value = _setting.themeMode.fetch();
_updateInterval.value = _setting.serverStatusUpdateInterval.fetch();
_maxRetryCount.value = _setting.maxRetryCount.fetch();
@@ -964,21 +961,21 @@ class _SettingPageState extends State<SettingPage> {
title: Text(_s.deleteServers),
trailing: const Icon(Icons.delete_forever),
onTap: () async {
final all = locator<ServerStore>().box.keys.map(
(e) => TextButton(
onPressed: () => context.showRoundDialog(
title: Text(_s.attention),
child: Text(_s.sureDelete(e)),
actions: [
TextButton(
onPressed: () => _serverProvider.delServer(e),
child: Text(_s.ok),
)
],
),
child: Text(e),
),
);
final all = Stores.server.box.keys.map(
(e) => TextButton(
onPressed: () => context.showRoundDialog(
title: Text(_s.attention),
child: Text(_s.sureDelete(e)),
actions: [
TextButton(
onPressed: () => _serverProvider.delServer(e),
child: Text(_s.ok),
)
],
),
child: Text(e),
),
);
context.showRoundDialog<List<String>>(
title: Text(_s.choose),
child: SingleChildScrollView(

View File

@@ -1,9 +1,8 @@
import 'package:flutter/material.dart';
import 'package:flutter_gen/gen_l10n/l10n.dart';
import 'package:toolbox/data/res/store.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';
@@ -15,8 +14,6 @@ class ServerDetailOrderPage extends StatefulWidget {
}
class _ServerDetailOrderPageState extends State<ServerDetailOrderPage> {
final _store = locator<SettingStore>();
final Order<String> _cardsOrder = [];
late S _s;
@@ -30,7 +27,7 @@ class _ServerDetailOrderPageState extends State<ServerDetailOrderPage> {
@override
void initState() {
super.initState();
_cardsOrder.addAll(_store.detailCardOrder.fetch());
_cardsOrder.addAll(Stores.setting.detailCardOrder.fetch());
}
@override
@@ -50,7 +47,7 @@ class _ServerDetailOrderPageState extends State<ServerDetailOrderPage> {
_cardsOrder.move(
oldIndex,
newIndex,
property: _store.detailCardOrder,
property: Stores.setting.detailCardOrder,
);
}),
padding: const EdgeInsets.symmetric(horizontal: 7, vertical: 3),

View File

@@ -1,10 +1,10 @@
import 'package:flutter/material.dart';
import 'package:flutter_gen/gen_l10n/l10n.dart';
import 'package:toolbox/core/extension/order.dart';
import 'package:toolbox/data/res/store.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';
@@ -16,7 +16,6 @@ class ServerOrderPage extends StatefulWidget {
}
class _ServerOrderPageState extends State<ServerOrderPage> {
final _store = locator<SettingStore>();
final _provider = locator<ServerProvider>();
late S _s;
@@ -44,7 +43,7 @@ class _ServerOrderPageState extends State<ServerOrderPage> {
_provider.serverOrder.move(
oldIndex,
newIndex,
property: _store.serverOrder,
property: Stores.setting.serverOrder,
);
}),
padding: const EdgeInsets.symmetric(horizontal: 7, vertical: 3),

View File

@@ -4,9 +4,8 @@ import 'package:toolbox/core/extension/context/snackbar.dart';
import 'package:toolbox/core/extension/order.dart';
import 'package:toolbox/core/utils/platform.dart';
import 'package:toolbox/data/model/ssh/virtual_key.dart';
import 'package:toolbox/data/res/store.dart';
import 'package:toolbox/data/res/ui.dart';
import 'package:toolbox/data/store/setting.dart';
import 'package:toolbox/locator.dart';
import 'package:toolbox/view/widget/round_rect_card.dart';
import '../../widget/custom_appbar.dart';
@@ -19,7 +18,6 @@ class SSHVirtKeySettingPage extends StatefulWidget {
}
class _SSHVirtKeySettingPageState extends State<SSHVirtKeySettingPage> {
final _setting = locator<SettingStore>();
late S _s;
@override
@@ -39,7 +37,7 @@ class _SSHVirtKeySettingPageState extends State<SSHVirtKeySettingPage> {
}
Widget _buildBody() {
final keys_ = _setting.sshVirtKeys.fetch();
final keys_ = Stores.setting.sshVirtKeys.fetch();
final keys = <VirtKey>[];
for (final key in keys_) {
keys.add(key);
@@ -67,7 +65,7 @@ class _SSHVirtKeySettingPageState extends State<SSHVirtKeySettingPage> {
context.showSnackBar(_s.disabled);
return;
}
keys.moveByItem(keys, o, n, property: _setting.sshVirtKeys);
keys.moveByItem(keys, o, n, property: Stores.setting.sshVirtKeys);
setState(() {});
},
);
@@ -99,7 +97,7 @@ class _SSHVirtKeySettingPageState extends State<SSHVirtKeySettingPage> {
} else {
keys.remove(key);
}
_setting.sshVirtKeys.put(keys);
Stores.setting.sshVirtKeys.put(keys);
setState(() {});
},
);

View File

@@ -3,13 +3,13 @@ import 'package:flutter_gen/gen_l10n/l10n.dart';
import 'package:provider/provider.dart';
import 'package:toolbox/core/extension/context/dialog.dart';
import 'package:toolbox/core/extension/order.dart';
import 'package:toolbox/data/res/store.dart';
import '../../../core/utils/misc.dart';
import '../../../data/model/server/server.dart';
import '../../../data/model/server/snippet.dart';
import '../../../data/provider/server.dart';
import '../../../data/res/ui.dart';
import '../../../data/store/setting.dart';
import '../../../locator.dart';
import '../../widget/tag.dart';
import '/core/route.dart';
@@ -27,8 +27,6 @@ class _SnippetListPageState extends State<SnippetListPage> {
late S _s;
late MediaQueryData _media;
final _settingStore = locator<SettingStore>();
String? _tag;
@override
@@ -72,7 +70,7 @@ class _SnippetListPageState extends State<SnippetListPage> {
oldIdx,
newIdx,
onMove: (p0) {
_settingStore.snippetOrder.put(p0.map((e) => e.name).toList());
Stores.setting.snippetOrder.put(p0.map((e) => e.name).toList());
},
);
}),

View File

@@ -10,7 +10,9 @@ import 'package:provider/provider.dart';
import 'package:toolbox/core/extension/context/common.dart';
import 'package:toolbox/core/extension/context/dialog.dart';
import 'package:toolbox/core/extension/context/snackbar.dart';
import 'package:xterm/xterm.dart';
import 'package:toolbox/data/res/store.dart';
import 'package:xterm/core.dart';
import 'package:xterm/ui.dart' hide TerminalThemes;
import '../../core/route.dart';
import '../../core/utils/platform.dart';
@@ -21,7 +23,6 @@ import '../../data/model/ssh/virtual_key.dart';
import '../../data/provider/virtual_keyboard.dart';
import '../../data/res/color.dart';
import '../../data/res/terminal.dart';
import '../../data/store/setting.dart';
import '../../locator.dart';
const echoPWD = 'echo \$PWD';
@@ -37,7 +38,6 @@ class SSHPage extends StatefulWidget {
class _SSHPageState extends State<SSHPage> {
final _keyboard = locator<VirtualKeyboard>();
final _setting = locator<SettingStore>();
late final _terminal = Terminal(inputHandler: _keyboard);
final TerminalController _terminalController = TerminalController();
final List<List<VirtKey>> _virtKeysList = [];
@@ -59,13 +59,13 @@ class _SSHPageState extends State<SSHPage> {
@override
void initState() {
super.initState();
final fontFamilly = getFileName(_setting.fontPath.fetch());
final fontFamilly = getFileName(Stores.setting.fontPath.fetch());
final textStyle = TextStyle(
fontFamily: fontFamilly,
fontSize: _setting.termFontSize.fetch(),
fontSize: Stores.setting.termFontSize.fetch(),
);
_terminalStyle = TerminalStyle.fromTextStyle(textStyle);
_keyboardType = TextInputType.values[_setting.keyboardType.fetch()];
_keyboardType = TextInputType.values[Stores.setting.keyboardType.fetch()];
_initTerminal();
_initVirtKeys();
}
@@ -89,7 +89,7 @@ class _SSHPageState extends State<SSHPage> {
_isDark = context.isDark;
_media = MediaQuery.of(context);
_s = S.of(context)!;
_terminalTheme = _isDark ? termDarkTheme : termLightTheme;
_terminalTheme = _isDark ? TerminalThemes.dark : TerminalThemes.light;
// Because the virtual keyboard only displayed on mobile devices
if (isMobile) {
@@ -299,7 +299,7 @@ class _SSHPageState extends State<SSHPage> {
}
void _initVirtKeys() {
final virtKeys = List<VirtKey>.from(_setting.sshVirtKeys.fetch());
final virtKeys = List<VirtKey>.from(Stores.setting.sshVirtKeys.fetch());
for (int len = 0; len < virtKeys.length; len += 7) {
if (len + 7 > virtKeys.length) {
@@ -326,7 +326,7 @@ class _SSHPageState extends State<SSHPage> {
return _write('Sending password to auth...');
}
},
timeout: _setting.timeoutD,
timeout: Stores.setting.timeoutD,
);
_write('Connected\r\n');
_write('Terminal size: ${_terminal.viewWidth}x${_terminal.viewHeight}\r\n');

View File

@@ -10,7 +10,7 @@ import 'package:toolbox/core/extension/context/snackbar.dart';
import 'package:toolbox/core/extension/sftpfile.dart';
import 'package:toolbox/data/res/logger.dart';
import 'package:toolbox/data/res/misc.dart';
import 'package:toolbox/data/store/history.dart';
import 'package:toolbox/data/res/store.dart';
import 'package:toolbox/view/widget/round_rect_card.dart';
import '../../../core/extension/numx.dart';
@@ -26,7 +26,6 @@ import '../../../data/provider/server.dart';
import '../../../data/provider/sftp.dart';
import '../../../data/res/path.dart';
import '../../../data/res/ui.dart';
import '../../../data/store/setting.dart';
import '../../../locator.dart';
import '../../widget/custom_appbar.dart';
import '../../widget/fade_in.dart';
@@ -53,8 +52,6 @@ class _SftpPageState extends State<SftpPage> with AfterLayoutMixin {
final SftpBrowserStatus _status = SftpBrowserStatus();
final _sftp = locator<SftpProvider>();
final _history = locator<HistoryStore>();
final _setting = locator<SettingStore>();
late S _s;
@@ -228,10 +225,10 @@ class _SftpPageState extends State<SftpPage> with AfterLayoutMixin {
title: Text(_s.goto),
child: Autocomplete<String>(
optionsBuilder: (val) {
if (!_setting.recordHistory.fetch()) {
if (!Stores.setting.recordHistory.fetch()) {
return [];
}
return _history.sftpPath.all.where(
return Stores.history.sftpPath.all.where(
(element) => element.contains(val.text),
);
},
@@ -254,7 +251,9 @@ class _SftpPageState extends State<SftpPage> with AfterLayoutMixin {
_status.path?.update(p);
final suc = await _listDir(path: p);
if (suc && _setting.recordHistory.fetch()) _history.sftpPath.add(p);
if (suc && Stores.setting.recordHistory.fetch()) {
Stores.history.sftpPath.add(p);
}
},
icon: const Icon(Icons.gps_fixed),
);
@@ -429,7 +428,7 @@ class _SftpPageState extends State<SftpPage> with AfterLayoutMixin {
void _delete(BuildContext context, SftpName file) {
context.pop();
final isDir = file.attr.isDirectory;
final useRmrf = _setting.sftpRmrfDir.fetch();
final useRmrf = Stores.setting.sftpRmrfDir.fetch();
final dirText = (isDir && !useRmrf) ? '\n${_s.sureDirEmpty}' : '';
final text = '${_s.sureDelete(file.filename)}$dirText';
final child = Text(text);