From e1284feae6dc07ad2c779b992fdf7b805eec8451 Mon Sep 17 00:00:00 2001 From: lollipopkit Date: Mon, 28 Aug 2023 15:22:12 +0800 Subject: [PATCH] opt.: more params of `editor` page --- ios/Runner.xcodeproj/project.pbxproj | 26 +++--- .../xcshareddata/xcschemes/Runner.xcscheme | 2 +- .../{navigator.dart => context.dart} | 2 + lib/core/route.dart | 18 ++++- lib/core/update.dart | 2 +- lib/core/utils/ui.dart | 5 +- lib/data/model/app/dynamic_color.dart | 4 +- lib/data/model/sftp/worker.dart | 9 ++- lib/data/res/build_data.dart | 6 +- lib/data/res/misc.dart | 2 + lib/data/store/setting.dart | 2 + lib/view/page/backup.dart | 2 +- lib/view/page/debug.dart | 2 +- lib/view/page/docker.dart | 2 +- lib/view/page/editor.dart | 79 +++++++++++-------- lib/view/page/home.dart | 30 +++++++ lib/view/page/ping.dart | 2 +- lib/view/page/pkg.dart | 2 +- lib/view/page/private_key/edit.dart | 2 +- lib/view/page/private_key/list.dart | 2 +- lib/view/page/process.dart | 2 +- lib/view/page/server/detail.dart | 2 +- lib/view/page/server/edit.dart | 2 +- lib/view/page/setting/entry.dart | 2 +- lib/view/page/snippet/edit.dart | 2 +- lib/view/page/ssh_term.dart | 4 +- lib/view/page/storage/local.dart | 2 +- lib/view/page/storage/sftp.dart | 3 +- lib/view/page/storage/sftp_mission.dart | 2 +- lib/view/widget/tag.dart | 2 +- macos/Runner.xcodeproj/project.pbxproj | 12 +-- 31 files changed, 149 insertions(+), 87 deletions(-) rename lib/core/extension/{navigator.dart => context.dart} (76%) diff --git a/ios/Runner.xcodeproj/project.pbxproj b/ios/Runner.xcodeproj/project.pbxproj index 77fbd36b..9bba201d 100644 --- a/ios/Runner.xcodeproj/project.pbxproj +++ b/ios/Runner.xcodeproj/project.pbxproj @@ -236,7 +236,7 @@ isa = PBXProject; attributes = { LastSwiftUpdateCheck = 1430; - LastUpgradeCheck = 1300; + LastUpgradeCheck = 1430; ORGANIZATIONNAME = ""; TargetAttributes = { 97C146ED1CF9000F007C117D = { @@ -470,7 +470,7 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements; - CURRENT_PROJECT_VERSION = 493; + CURRENT_PROJECT_VERSION = 501; DEVELOPMENT_TEAM = BA88US33G6; ENABLE_BITCODE = NO; INFOPLIST_FILE = "Runner/Info-$(CONFIGURATION).plist"; @@ -478,7 +478,7 @@ "$(inherited)", "@executable_path/Frameworks", ); - MARKETING_VERSION = 1.0.493; + MARKETING_VERSION = 1.0.501; PRODUCT_BUNDLE_IDENTIFIER = com.lollipopkit.toolbox; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; @@ -602,7 +602,7 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements; - CURRENT_PROJECT_VERSION = 493; + CURRENT_PROJECT_VERSION = 501; DEVELOPMENT_TEAM = BA88US33G6; ENABLE_BITCODE = NO; INFOPLIST_FILE = "Runner/Info-$(CONFIGURATION).plist"; @@ -610,7 +610,7 @@ "$(inherited)", "@executable_path/Frameworks", ); - MARKETING_VERSION = 1.0.493; + MARKETING_VERSION = 1.0.501; PRODUCT_BUNDLE_IDENTIFIER = com.lollipopkit.toolbox; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; @@ -628,7 +628,7 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements; - CURRENT_PROJECT_VERSION = 493; + CURRENT_PROJECT_VERSION = 501; DEVELOPMENT_TEAM = BA88US33G6; ENABLE_BITCODE = NO; INFOPLIST_FILE = "Runner/Info-$(CONFIGURATION).plist"; @@ -636,7 +636,7 @@ "$(inherited)", "@executable_path/Frameworks", ); - MARKETING_VERSION = 1.0.493; + MARKETING_VERSION = 1.0.501; PRODUCT_BUNDLE_IDENTIFIER = com.lollipopkit.toolbox; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; @@ -657,7 +657,7 @@ CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 493; + CURRENT_PROJECT_VERSION = 501; DEVELOPMENT_TEAM = BA88US33G6; GCC_C_LANGUAGE_STANDARD = gnu11; GENERATE_INFOPLIST_FILE = YES; @@ -670,7 +670,7 @@ "@executable_path/Frameworks", "@executable_path/../../Frameworks", ); - MARKETING_VERSION = 1.0.493; + MARKETING_VERSION = 1.0.501; MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; MTL_FAST_MATH = YES; PRODUCT_BUNDLE_IDENTIFIER = com.lollipopkit.toolbox.StatusWidget; @@ -696,7 +696,7 @@ CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 493; + CURRENT_PROJECT_VERSION = 501; DEVELOPMENT_TEAM = BA88US33G6; GCC_C_LANGUAGE_STANDARD = gnu11; GENERATE_INFOPLIST_FILE = YES; @@ -709,7 +709,7 @@ "@executable_path/Frameworks", "@executable_path/../../Frameworks", ); - MARKETING_VERSION = 1.0.493; + MARKETING_VERSION = 1.0.501; MTL_FAST_MATH = YES; PRODUCT_BUNDLE_IDENTIFIER = com.lollipopkit.toolbox.StatusWidget; PRODUCT_NAME = "$(TARGET_NAME)"; @@ -732,7 +732,7 @@ CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 493; + CURRENT_PROJECT_VERSION = 501; DEVELOPMENT_TEAM = BA88US33G6; GCC_C_LANGUAGE_STANDARD = gnu11; GENERATE_INFOPLIST_FILE = YES; @@ -745,7 +745,7 @@ "@executable_path/Frameworks", "@executable_path/../../Frameworks", ); - MARKETING_VERSION = 1.0.493; + MARKETING_VERSION = 1.0.501; MTL_FAST_MATH = YES; PRODUCT_BUNDLE_IDENTIFIER = com.lollipopkit.toolbox.StatusWidget; PRODUCT_NAME = "$(TARGET_NAME)"; diff --git a/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme index 3db53b6e..b52b2e69 100644 --- a/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme +++ b/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme @@ -1,6 +1,6 @@ Navigator.of(this).canPop(); + + bool get isDark => Theme.of(this).brightness == Brightness.dark; } diff --git a/lib/core/route.dart b/lib/core/route.dart index 37e5d490..700c2d6c 100644 --- a/lib/core/route.dart +++ b/lib/core/route.dart @@ -156,8 +156,22 @@ class AppRoute { return AppRoute(DockerManagePage(key: key, spi: spi), 'docker'); } - static AppRoute editor({Key? key, required String path}) { - return AppRoute(EditorPage(key: key, path: path), 'editor'); + /// - Pop true if the text is changed & [path] is not null + /// - Pop text if [path] is null + static AppRoute editor({ + Key? key, + String? path, + String? text, + String? langCode, + }) { + return AppRoute( + EditorPage( + key: key, + path: path, + text: text, + langCode: langCode, + ), + 'editor'); } static AppRoute fullscreen({Key? key}) { diff --git a/lib/core/update.dart b/lib/core/update.dart index af2b0766..933fb683 100644 --- a/lib/core/update.dart +++ b/lib/core/update.dart @@ -5,7 +5,7 @@ import 'package:flutter/material.dart'; import 'package:flutter_gen/gen_l10n/l10n.dart'; import 'package:logging/logging.dart'; import 'package:r_upgrade/r_upgrade.dart'; -import 'package:toolbox/core/extension/navigator.dart'; +import 'package:toolbox/core/extension/context.dart'; import 'package:toolbox/core/utils/misc.dart' hide pathJoin; import 'package:toolbox/data/model/app/update.dart'; import 'package:toolbox/data/res/path.dart'; diff --git a/lib/core/utils/ui.dart b/lib/core/utils/ui.dart index 2a924552..36c2ae43 100644 --- a/lib/core/utils/ui.dart +++ b/lib/core/utils/ui.dart @@ -3,7 +3,7 @@ import 'dart:io'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:flutter_gen/gen_l10n/l10n.dart'; -import 'package:toolbox/core/extension/navigator.dart'; +import 'package:toolbox/core/extension/context.dart'; import 'package:toolbox/data/model/app/tab.dart'; import 'package:url_launcher/url_launcher.dart'; @@ -19,9 +19,6 @@ import 'platform.dart'; import '../extension/stringx.dart'; import '../extension/uint8list.dart'; -bool isDarkMode(BuildContext context) => - Theme.of(context).brightness == Brightness.dark; - void showSnackBar(BuildContext context, Widget child) => ScaffoldMessenger.of(context).showSnackBar(SnackBar( content: child, diff --git a/lib/data/model/app/dynamic_color.dart b/lib/data/model/app/dynamic_color.dart index 334a9ef1..0ebe8017 100644 --- a/lib/data/model/app/dynamic_color.dart +++ b/lib/data/model/app/dynamic_color.dart @@ -1,6 +1,6 @@ import 'package:flutter/widgets.dart'; -import '../../../core/utils/ui.dart'; +import '../../../core/extension/context.dart'; class DynamicColor { /// 白天模式显示的颜色 @@ -11,5 +11,5 @@ class DynamicColor { DynamicColor(this.light, this.dark); - Color resolve(BuildContext context) => isDarkMode(context) ? dark : light; + Color resolve(BuildContext context) => context.isDark ? dark : light; } diff --git a/lib/data/model/sftp/worker.dart b/lib/data/model/sftp/worker.dart index 2b7fee50..d22692bc 100644 --- a/lib/data/model/sftp/worker.dart +++ b/lib/data/model/sftp/worker.dart @@ -136,9 +136,12 @@ Future _upload( req.remotePath, mode: SftpFileOpenMode.write | SftpFileOpenMode.create, ); - final writer = file.write(localFile, onProgress: (total) { - mainSendPort.send(total / localLen * 100); - },); + final writer = file.write( + localFile, + onProgress: (total) { + mainSendPort.send(total / localLen * 100); + }, + ); await writer.done; await file.close(); mainSendPort.send(watch.elapsed); diff --git a/lib/data/res/build_data.dart b/lib/data/res/build_data.dart index 0ae272e9..02a46676 100644 --- a/lib/data/res/build_data.dart +++ b/lib/data/res/build_data.dart @@ -2,8 +2,8 @@ class BuildData { static const String name = "ServerBox"; - static const int build = 499; - static const String engine = "3.13.0"; - static const String buildAt = "2023-08-25 18:04:51.443337"; + static const int build = 501; + static const String engine = "3.13.1"; + static const String buildAt = "2023-08-27 00:15:00.994465"; static const int modifications = 4; } diff --git a/lib/data/res/misc.dart b/lib/data/res/misc.dart index cc461534..e15eabba 100644 --- a/lib/data/res/misc.dart +++ b/lib/data/res/misc.dart @@ -49,4 +49,6 @@ const participants = { 'Ealrang', 'hange33', 'yuchen1204', + 'xgzxmytx', + 'wind057', }; diff --git a/lib/data/store/setting.dart b/lib/data/store/setting.dart index 09090524..6653ce28 100644 --- a/lib/data/store/setting.dart +++ b/lib/data/store/setting.dart @@ -7,6 +7,8 @@ import '../model/app/net_view.dart'; import '../res/default.dart'; class SettingStore extends PersistentStore { + Map toJson() => {for (var e in box.keys) e: box.get(e)}; + StoreProperty get primaryColor => property( 'primaryColor', defaultValue: 4287106639, diff --git a/lib/view/page/backup.dart b/lib/view/page/backup.dart index 7ce97dc1..c58f62b8 100644 --- a/lib/view/page/backup.dart +++ b/lib/view/page/backup.dart @@ -5,7 +5,7 @@ import 'dart:io'; import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:flutter_gen/gen_l10n/l10n.dart'; -import 'package:toolbox/core/extension/navigator.dart'; +import 'package:toolbox/core/extension/context.dart'; import 'package:toolbox/data/res/path.dart'; import '../../core/extension/colorx.dart'; diff --git a/lib/view/page/debug.dart b/lib/view/page/debug.dart index 506eff41..3f072ed5 100644 --- a/lib/view/page/debug.dart +++ b/lib/view/page/debug.dart @@ -1,6 +1,6 @@ import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; -import 'package:toolbox/core/extension/navigator.dart'; +import 'package:toolbox/core/extension/context.dart'; import 'package:toolbox/data/provider/debug.dart'; import '../widget/custom_appbar.dart'; diff --git a/lib/view/page/docker.dart b/lib/view/page/docker.dart index 2ccdfdcf..3e7dfd29 100644 --- a/lib/view/page/docker.dart +++ b/lib/view/page/docker.dart @@ -1,7 +1,7 @@ import 'package:flutter/material.dart'; import 'package:flutter_gen/gen_l10n/l10n.dart'; import 'package:provider/provider.dart'; -import 'package:toolbox/core/extension/navigator.dart'; +import 'package:toolbox/core/extension/context.dart'; import 'package:toolbox/core/route.dart'; import 'package:toolbox/data/model/docker/image.dart'; import 'package:toolbox/view/widget/input_field.dart'; diff --git a/lib/view/page/editor.dart b/lib/view/page/editor.dart index 4e1b0b26..7a8b6d3c 100644 --- a/lib/view/page/editor.dart +++ b/lib/view/page/editor.dart @@ -8,7 +8,7 @@ import 'package:flutter_gen/gen_l10n/l10n.dart'; import 'package:flutter_highlight/theme_map.dart'; import 'package:flutter_highlight/themes/a11y-light.dart'; import 'package:flutter_highlight/themes/monokai.dart'; -import 'package:toolbox/core/extension/navigator.dart'; +import 'package:toolbox/core/extension/context.dart'; import 'package:toolbox/core/utils/misc.dart'; import 'package:toolbox/core/utils/ui.dart'; import 'package:toolbox/data/res/highlight.dart'; @@ -19,8 +19,23 @@ import '../widget/custom_appbar.dart'; import '../widget/two_line_text.dart'; class EditorPage extends StatefulWidget { + /// If path is not null, then it's a file editor + /// If path is null, then it's a text editor final String? path; - const EditorPage({Key? key, this.path}) : super(key: key); + + /// Only used when path is null + final String? text; + + /// Code of language, eg: dart, go, etc. + /// Higher priority than [path] + final String? langCode; + + const EditorPage({ + Key? key, + this.path, + this.text, + this.langCode, + }) : super(key: key); @override _EditorPageState createState() => _EditorPageState(); @@ -30,7 +45,7 @@ class _EditorPageState extends State with AfterLayoutMixin { late CodeController _controller; late final _focusNode = FocusNode(); final _setting = locator(); - Map? _codeTheme; + late Map _codeTheme; late S _s; late String? _langCode; late TextStyle _textStyle; @@ -38,27 +53,26 @@ class _EditorPageState extends State with AfterLayoutMixin { @override void initState() { super.initState(); - _langCode = widget.path.highlightCode; + + /// Higher priority than [path] + _langCode = widget.langCode ?? widget.path.highlightCode; _controller = CodeController( language: suffix2HighlightMap[_langCode], ); _textStyle = TextStyle(fontSize: _setting.editorFontSize.fetch()); - - WidgetsBinding.instance.addPostFrameCallback((Duration duration) async { - if (isDarkMode(context)) { - _codeTheme = themeMap[_setting.editorDarkTheme.fetch()] ?? monokaiTheme; - } else { - _codeTheme = themeMap[_setting.editorTheme.fetch()] ?? a11yLightTheme; - } - _focusNode.requestFocus(); - setState(() {}); - }); } @override void didChangeDependencies() { super.didChangeDependencies(); _s = S.of(context)!; + + if (context.isDark) { + _codeTheme = themeMap[_setting.editorDarkTheme.fetch()] ?? monokaiTheme; + } else { + _codeTheme = themeMap[_setting.editorTheme.fetch()] ?? a11yLightTheme; + } + _focusNode.requestFocus(); } @override @@ -71,7 +85,7 @@ class _EditorPageState extends State with AfterLayoutMixin { @override Widget build(BuildContext context) { return Scaffold( - backgroundColor: _codeTheme?['root']?.backgroundColor, + backgroundColor: _codeTheme['root']?.backgroundColor, appBar: _buildAppBar(), body: _buildBody(), floatingActionButton: FloatingActionButton( @@ -119,24 +133,18 @@ class _EditorPageState extends State with AfterLayoutMixin { } Widget _buildBody() { - return Visibility( - visible: _codeTheme != null, - replacement: const Center( - child: CircularProgressIndicator(), - ), - child: SingleChildScrollView( - child: CodeTheme( - data: CodeThemeData( - styles: _codeTheme ?? - (isDarkMode(context) ? monokaiTheme : a11yLightTheme)), - child: CodeField( - focusNode: _focusNode, - controller: _controller, - textStyle: _textStyle, - lineNumberStyle: const LineNumberStyle( - width: 47, - margin: 7, - ), + return SingleChildScrollView( + child: CodeTheme( + data: CodeThemeData( + styles: _codeTheme, + ), + child: CodeField( + focusNode: _focusNode, + controller: _controller, + textStyle: _textStyle, + lineNumberStyle: const LineNumberStyle( + width: 47, + margin: 7, ), ), ), @@ -145,10 +153,13 @@ class _EditorPageState extends State with AfterLayoutMixin { @override FutureOr afterFirstLayout(BuildContext context) async { + /// TODO: This is a temporary solution to avoid the loading stuck + await Future.delayed(const Duration(milliseconds: 377)); if (widget.path != null) { - await Future.delayed(const Duration(milliseconds: 233)); final code = await File(widget.path!).readAsString(); _controller.text = code; + } else if (widget.text != null) { + _controller.text = widget.text!; } } } diff --git a/lib/view/page/home.dart b/lib/view/page/home.dart index d2b6a667..efb46c52 100644 --- a/lib/view/page/home.dart +++ b/lib/view/page/home.dart @@ -1,7 +1,10 @@ +import 'dart:convert'; + import 'package:after_layout/after_layout.dart'; import 'package:flutter/material.dart'; import 'package:flutter_gen/gen_l10n/l10n.dart'; import 'package:get_it/get_it.dart'; +import 'package:toolbox/core/extension/context.dart'; import 'package:toolbox/data/model/app/github_id.dart'; import 'package:toolbox/data/model/app/tab.dart'; import 'package:toolbox/data/provider/app.dart'; @@ -230,6 +233,33 @@ class _HomePageState extends State leading: const Icon(Icons.settings), title: Text(_s.setting), onTap: () => AppRoute.setting().go(context), + onLongPress: () async { + final map = _setting.toJson(); + final go = await showRoundDialog( + context: context, + child: Text(_s.attention), + actions: [ + TextButton( + onPressed: () => context.pop(true), + child: Text( + _s.ok, + style: const TextStyle(color: Colors.red), + ), + ), + ], + ); + if (go != true) { + return; + } + + /// Encode [map] to String with indent `\t` + final text = const JsonEncoder.withIndent('\t').convert(map); + final result = await AppRoute.editor(text: text, langCode: 'json',).go(context); + if (result == null) { + return; + } + _setting.box.putAll(json.decode(result) as Map); + }, ), ListTile( leading: const Icon(Icons.vpn_key), diff --git a/lib/view/page/ping.dart b/lib/view/page/ping.dart index dca7a08c..4cdf30b6 100644 --- a/lib/view/page/ping.dart +++ b/lib/view/page/ping.dart @@ -3,7 +3,7 @@ import 'dart:async'; import 'package:after_layout/after_layout.dart'; import 'package:flutter/material.dart'; import 'package:flutter_gen/gen_l10n/l10n.dart'; -import 'package:toolbox/core/extension/navigator.dart'; +import 'package:toolbox/core/extension/context.dart'; import 'package:toolbox/core/utils/misc.dart'; import 'package:toolbox/view/widget/value_notifier.dart'; diff --git a/lib/view/page/pkg.dart b/lib/view/page/pkg.dart index 081fae77..f28f059c 100644 --- a/lib/view/page/pkg.dart +++ b/lib/view/page/pkg.dart @@ -1,7 +1,7 @@ import 'package:flutter/material.dart'; import 'package:flutter_gen/gen_l10n/l10n.dart'; import 'package:provider/provider.dart'; -import 'package:toolbox/core/extension/navigator.dart'; +import 'package:toolbox/core/extension/context.dart'; import 'package:toolbox/view/widget/input_field.dart'; import '../../data/model/pkg/upgrade_info.dart'; diff --git a/lib/view/page/private_key/edit.dart b/lib/view/page/private_key/edit.dart index 1262c192..77fc6ab7 100644 --- a/lib/view/page/private_key/edit.dart +++ b/lib/view/page/private_key/edit.dart @@ -5,7 +5,7 @@ import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:flutter_gen/gen_l10n/l10n.dart'; -import 'package:toolbox/core/extension/navigator.dart'; +import 'package:toolbox/core/extension/context.dart'; import 'package:toolbox/core/extension/numx.dart'; import 'package:toolbox/core/utils/misc.dart'; import 'package:toolbox/data/res/misc.dart'; diff --git a/lib/view/page/private_key/list.dart b/lib/view/page/private_key/list.dart index 8ef2c045..a91d5a9b 100644 --- a/lib/view/page/private_key/list.dart +++ b/lib/view/page/private_key/list.dart @@ -4,7 +4,7 @@ import 'package:after_layout/after_layout.dart'; import 'package:flutter/material.dart'; import 'package:flutter_gen/gen_l10n/l10n.dart'; import 'package:provider/provider.dart'; -import 'package:toolbox/core/extension/navigator.dart'; +import 'package:toolbox/core/extension/context.dart'; import 'package:toolbox/core/utils/ui.dart'; import 'package:toolbox/data/store/private_key.dart'; import 'package:toolbox/locator.dart'; diff --git a/lib/view/page/process.dart b/lib/view/page/process.dart index bb64c9bf..df592571 100644 --- a/lib/view/page/process.dart +++ b/lib/view/page/process.dart @@ -3,7 +3,7 @@ import 'dart:async'; import 'package:dartssh2/dartssh2.dart'; import 'package:flutter/material.dart'; import 'package:flutter_gen/gen_l10n/l10n.dart'; -import 'package:toolbox/core/extension/navigator.dart'; +import 'package:toolbox/core/extension/context.dart'; import 'package:toolbox/core/extension/stringx.dart'; import 'package:toolbox/core/extension/uint8list.dart'; import 'package:toolbox/core/utils/ui.dart'; diff --git a/lib/view/page/server/detail.dart b/lib/view/page/server/detail.dart index c5df864e..f27a1af9 100644 --- a/lib/view/page/server/detail.dart +++ b/lib/view/page/server/detail.dart @@ -1,7 +1,7 @@ import 'package:flutter/material.dart'; import 'package:flutter_gen/gen_l10n/l10n.dart'; import 'package:provider/provider.dart'; -import 'package:toolbox/core/extension/navigator.dart'; +import 'package:toolbox/core/extension/context.dart'; 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'; diff --git a/lib/view/page/server/edit.dart b/lib/view/page/server/edit.dart index 1d459d48..9706ae70 100644 --- a/lib/view/page/server/edit.dart +++ b/lib/view/page/server/edit.dart @@ -2,7 +2,7 @@ import 'package:after_layout/after_layout.dart'; import 'package:flutter/material.dart'; import 'package:flutter_gen/gen_l10n/l10n.dart'; import 'package:provider/provider.dart'; -import 'package:toolbox/core/extension/navigator.dart'; +import 'package:toolbox/core/extension/context.dart'; import 'package:toolbox/view/widget/input_field.dart'; import 'package:toolbox/view/widget/round_rect_card.dart'; diff --git a/lib/view/page/setting/entry.dart b/lib/view/page/setting/entry.dart index 1ba6ee6b..82e130c0 100644 --- a/lib/view/page/setting/entry.dart +++ b/lib/view/page/setting/entry.dart @@ -8,7 +8,7 @@ import 'package:provider/provider.dart'; import 'package:shared_preferences/shared_preferences.dart'; import 'package:toolbox/core/extension/colorx.dart'; import 'package:toolbox/core/extension/locale.dart'; -import 'package:toolbox/core/extension/navigator.dart'; +import 'package:toolbox/core/extension/context.dart'; import 'package:toolbox/core/extension/stringx.dart'; import 'package:toolbox/core/persistant_store.dart'; import 'package:toolbox/core/route.dart'; diff --git a/lib/view/page/snippet/edit.dart b/lib/view/page/snippet/edit.dart index 9097dc27..e9f76469 100644 --- a/lib/view/page/snippet/edit.dart +++ b/lib/view/page/snippet/edit.dart @@ -1,7 +1,7 @@ import 'package:after_layout/after_layout.dart'; import 'package:flutter/material.dart'; import 'package:flutter_gen/gen_l10n/l10n.dart'; -import 'package:toolbox/core/extension/navigator.dart'; +import 'package:toolbox/core/extension/context.dart'; import 'package:toolbox/view/widget/input_field.dart'; import '../../../core/utils/ui.dart'; diff --git a/lib/view/page/ssh_term.dart b/lib/view/page/ssh_term.dart index 079b6555..58ce2c31 100644 --- a/lib/view/page/ssh_term.dart +++ b/lib/view/page/ssh_term.dart @@ -7,7 +7,7 @@ import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:flutter_gen/gen_l10n/l10n.dart'; import 'package:provider/provider.dart'; -import 'package:toolbox/core/extension/navigator.dart'; +import 'package:toolbox/core/extension/context.dart'; import 'package:xterm/xterm.dart'; import '../../core/route.dart'; @@ -85,7 +85,7 @@ class _SSHPageState extends State { @override void didChangeDependencies() { super.didChangeDependencies(); - _isDark = isDarkMode(context); + _isDark = context.isDark; _media = MediaQuery.of(context); _s = S.of(context)!; _terminalTheme = _isDark ? termDarkTheme : termLightTheme; diff --git a/lib/view/page/storage/local.dart b/lib/view/page/storage/local.dart index 7af7e1f2..3f6fb436 100644 --- a/lib/view/page/storage/local.dart +++ b/lib/view/page/storage/local.dart @@ -2,7 +2,7 @@ import 'dart:io'; import 'package:flutter/material.dart'; import 'package:flutter_gen/gen_l10n/l10n.dart'; -import 'package:toolbox/core/extension/navigator.dart'; +import 'package:toolbox/core/extension/context.dart'; import 'package:toolbox/data/model/sftp/req.dart'; import 'package:toolbox/data/provider/server.dart'; import 'package:toolbox/data/provider/sftp.dart'; diff --git a/lib/view/page/storage/sftp.dart b/lib/view/page/storage/sftp.dart index 7ecfbb28..2f174925 100644 --- a/lib/view/page/storage/sftp.dart +++ b/lib/view/page/storage/sftp.dart @@ -5,7 +5,7 @@ import 'package:dartssh2/dartssh2.dart'; import 'package:flutter/material.dart'; import 'package:flutter_gen/gen_l10n/l10n.dart'; import 'package:logging/logging.dart'; -import 'package:toolbox/core/extension/navigator.dart'; +import 'package:toolbox/core/extension/context.dart'; import 'package:toolbox/core/extension/sftpfile.dart'; import 'package:toolbox/data/res/misc.dart'; import 'package:toolbox/data/store/history.dart'; @@ -391,6 +391,7 @@ class _SftpPageState extends State with AfterLayoutMixin { final result = await AppRoute.editor(path: localPath).go(context); if (result != null && result) { _sftp.add(SftpReq(req.spi, remotePath, localPath, SftpReqType.upload)); + showSnackBar(context, Text(_s.added2List)); } } diff --git a/lib/view/page/storage/sftp_mission.dart b/lib/view/page/storage/sftp_mission.dart index f6d1654c..70e8d369 100644 --- a/lib/view/page/storage/sftp_mission.dart +++ b/lib/view/page/storage/sftp_mission.dart @@ -2,7 +2,7 @@ import 'package:flutter/material.dart'; import 'package:flutter_gen/gen_l10n/l10n.dart'; import 'package:provider/provider.dart'; import 'package:toolbox/core/extension/datetime.dart'; -import 'package:toolbox/core/extension/navigator.dart'; +import 'package:toolbox/core/extension/context.dart'; import 'package:toolbox/core/route.dart'; import 'package:toolbox/locator.dart'; diff --git a/lib/view/widget/tag.dart b/lib/view/widget/tag.dart index dea04826..7c329b57 100644 --- a/lib/view/widget/tag.dart +++ b/lib/view/widget/tag.dart @@ -1,5 +1,5 @@ import 'package:flutter/material.dart'; -import 'package:toolbox/core/extension/navigator.dart'; +import 'package:toolbox/core/extension/context.dart'; import 'package:toolbox/data/res/ui.dart'; import 'package:toolbox/view/widget/input_field.dart'; import 'package:toolbox/view/widget/round_rect_card.dart'; diff --git a/macos/Runner.xcodeproj/project.pbxproj b/macos/Runner.xcodeproj/project.pbxproj index ea8a555c..9b974dd0 100644 --- a/macos/Runner.xcodeproj/project.pbxproj +++ b/macos/Runner.xcodeproj/project.pbxproj @@ -474,9 +474,9 @@ baseConfigurationReference = C1C758C41C4E208965A68933 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; - CURRENT_PROJECT_VERSION = 499; + CURRENT_PROJECT_VERSION = 501; GENERATE_INFOPLIST_FILE = YES; - MARKETING_VERSION = 1.0.499; + MARKETING_VERSION = 1.0.501; PRODUCT_BUNDLE_IDENTIFIER = tech.lolli.serverBox.RunnerTests; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_VERSION = 5.0; @@ -489,9 +489,9 @@ baseConfigurationReference = 15AF97DF993E8968098D6EBE /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; - CURRENT_PROJECT_VERSION = 499; + CURRENT_PROJECT_VERSION = 501; GENERATE_INFOPLIST_FILE = YES; - MARKETING_VERSION = 1.0.499; + MARKETING_VERSION = 1.0.501; PRODUCT_BUNDLE_IDENTIFIER = tech.lolli.serverBox.RunnerTests; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_VERSION = 5.0; @@ -504,9 +504,9 @@ baseConfigurationReference = 7CFA7DE7FABA75685DFB6948 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; - CURRENT_PROJECT_VERSION = 499; + CURRENT_PROJECT_VERSION = 501; GENERATE_INFOPLIST_FILE = YES; - MARKETING_VERSION = 1.0.499; + MARKETING_VERSION = 1.0.501; PRODUCT_BUNDLE_IDENTIFIER = tech.lolli.serverBox.RunnerTests; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_VERSION = 5.0;