diff --git a/ios/Runner.xcodeproj/project.pbxproj b/ios/Runner.xcodeproj/project.pbxproj index 37158f12..1855f6d9 100644 --- a/ios/Runner.xcodeproj/project.pbxproj +++ b/ios/Runner.xcodeproj/project.pbxproj @@ -586,7 +586,7 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements; - CURRENT_PROJECT_VERSION = 642; + CURRENT_PROJECT_VERSION = 643; DEVELOPMENT_TEAM = BA88US33G6; ENABLE_BITCODE = NO; INFOPLIST_FILE = "Runner/Info-$(CONFIGURATION).plist"; @@ -596,7 +596,7 @@ "$(inherited)", "@executable_path/Frameworks", ); - MARKETING_VERSION = 1.0.642; + MARKETING_VERSION = 1.0.643; PRODUCT_BUNDLE_IDENTIFIER = com.lollipopkit.toolbox; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; @@ -720,7 +720,7 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements; - CURRENT_PROJECT_VERSION = 642; + CURRENT_PROJECT_VERSION = 643; DEVELOPMENT_TEAM = BA88US33G6; ENABLE_BITCODE = NO; INFOPLIST_FILE = "Runner/Info-$(CONFIGURATION).plist"; @@ -730,7 +730,7 @@ "$(inherited)", "@executable_path/Frameworks", ); - MARKETING_VERSION = 1.0.642; + MARKETING_VERSION = 1.0.643; PRODUCT_BUNDLE_IDENTIFIER = com.lollipopkit.toolbox; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; @@ -748,7 +748,7 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements; - CURRENT_PROJECT_VERSION = 642; + CURRENT_PROJECT_VERSION = 643; DEVELOPMENT_TEAM = BA88US33G6; ENABLE_BITCODE = NO; INFOPLIST_FILE = "Runner/Info-$(CONFIGURATION).plist"; @@ -758,7 +758,7 @@ "$(inherited)", "@executable_path/Frameworks", ); - MARKETING_VERSION = 1.0.642; + MARKETING_VERSION = 1.0.643; PRODUCT_BUNDLE_IDENTIFIER = com.lollipopkit.toolbox; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; @@ -779,7 +779,7 @@ CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 642; + CURRENT_PROJECT_VERSION = 643; DEVELOPMENT_TEAM = BA88US33G6; GCC_C_LANGUAGE_STANDARD = gnu11; GENERATE_INFOPLIST_FILE = YES; @@ -792,7 +792,7 @@ "@executable_path/Frameworks", "@executable_path/../../Frameworks", ); - MARKETING_VERSION = 1.0.642; + MARKETING_VERSION = 1.0.643; MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; MTL_FAST_MATH = YES; PRODUCT_BUNDLE_IDENTIFIER = com.lollipopkit.toolbox.StatusWidget; @@ -818,7 +818,7 @@ CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 642; + CURRENT_PROJECT_VERSION = 643; DEVELOPMENT_TEAM = BA88US33G6; GCC_C_LANGUAGE_STANDARD = gnu11; GENERATE_INFOPLIST_FILE = YES; @@ -831,7 +831,7 @@ "@executable_path/Frameworks", "@executable_path/../../Frameworks", ); - MARKETING_VERSION = 1.0.642; + MARKETING_VERSION = 1.0.643; MTL_FAST_MATH = YES; PRODUCT_BUNDLE_IDENTIFIER = com.lollipopkit.toolbox.StatusWidget; PRODUCT_NAME = "$(TARGET_NAME)"; @@ -854,7 +854,7 @@ CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 642; + CURRENT_PROJECT_VERSION = 643; DEVELOPMENT_TEAM = BA88US33G6; GCC_C_LANGUAGE_STANDARD = gnu11; GENERATE_INFOPLIST_FILE = YES; @@ -867,7 +867,7 @@ "@executable_path/Frameworks", "@executable_path/../../Frameworks", ); - MARKETING_VERSION = 1.0.642; + MARKETING_VERSION = 1.0.643; MTL_FAST_MATH = YES; PRODUCT_BUNDLE_IDENTIFIER = com.lollipopkit.toolbox.StatusWidget; PRODUCT_NAME = "$(TARGET_NAME)"; @@ -890,7 +890,7 @@ CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 642; + CURRENT_PROJECT_VERSION = 643; DEVELOPMENT_ASSET_PATHS = ""; DEVELOPMENT_TEAM = BA88US33G6; ENABLE_PREVIEWS = YES; @@ -902,7 +902,7 @@ "$(inherited)", "@executable_path/Frameworks", ); - MARKETING_VERSION = 1.0.642; + MARKETING_VERSION = 1.0.643; MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; MTL_FAST_MATH = YES; PRODUCT_BUNDLE_IDENTIFIER = com.lollipopkit.toolbox.WatchEnd; @@ -931,7 +931,7 @@ CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 642; + CURRENT_PROJECT_VERSION = 643; DEVELOPMENT_ASSET_PATHS = ""; DEVELOPMENT_TEAM = BA88US33G6; ENABLE_PREVIEWS = YES; @@ -943,7 +943,7 @@ "$(inherited)", "@executable_path/Frameworks", ); - MARKETING_VERSION = 1.0.642; + MARKETING_VERSION = 1.0.643; MTL_FAST_MATH = YES; PRODUCT_BUNDLE_IDENTIFIER = com.lollipopkit.toolbox.WatchEnd; PRODUCT_NAME = ServerBox; @@ -969,7 +969,7 @@ CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 642; + CURRENT_PROJECT_VERSION = 643; DEVELOPMENT_ASSET_PATHS = ""; DEVELOPMENT_TEAM = BA88US33G6; ENABLE_PREVIEWS = YES; @@ -981,7 +981,7 @@ "$(inherited)", "@executable_path/Frameworks", ); - MARKETING_VERSION = 1.0.642; + MARKETING_VERSION = 1.0.643; MTL_FAST_MATH = YES; PRODUCT_BUNDLE_IDENTIFIER = com.lollipopkit.toolbox.WatchEnd; PRODUCT_NAME = ServerBox; diff --git a/lib/data/res/build_data.dart b/lib/data/res/build_data.dart index b1ab0e03..93b407e7 100644 --- a/lib/data/res/build_data.dart +++ b/lib/data/res/build_data.dart @@ -2,9 +2,9 @@ class BuildData { static const String name = "ServerBox"; - static const int build = 640; - static const String engine = "3.13.9"; - static const String buildAt = "2023-11-13 10:47:51"; + static const int build = 643; + static const String engine = "3.16.0"; + static const String buildAt = "2023-11-19 14:47:41"; static const int modifications = 1; static const int script = 26; } diff --git a/lib/view/page/server/edit.dart b/lib/view/page/server/edit.dart index 07a25ac4..afa6acec 100644 --- a/lib/view/page/server/edit.dart +++ b/lib/view/page/server/edit.dart @@ -126,7 +126,7 @@ class _ServerEditPageState extends State { '${l10n.delete} ${l10n.server}(${widget.spi!.name})', )), UIs.height13, - Row( + if (widget.spi?.server?.canViewDetails ?? false) Row( children: [ Checkbox( value: delScripts, diff --git a/lib/view/page/ssh/tab.dart b/lib/view/page/ssh/tab.dart index 3896cdfb..d93e98a2 100644 --- a/lib/view/page/ssh/tab.dart +++ b/lib/view/page/ssh/tab.dart @@ -1,11 +1,12 @@ import 'package:flutter/material.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/core/extension/context/locale.dart'; -import 'package:toolbox/data/model/server/server.dart'; -import 'package:toolbox/data/res/provider.dart'; +import 'package:toolbox/data/provider/server.dart'; import 'package:toolbox/data/res/ui.dart'; import 'package:toolbox/view/page/ssh/page.dart'; +import 'package:toolbox/view/widget/cardx.dart'; class SSHTabPage extends StatefulWidget { const SSHTabPage({super.key}); @@ -17,7 +18,7 @@ class SSHTabPage extends StatefulWidget { class _SSHTabPageState extends State with TickerProviderStateMixin, AutomaticKeepAliveClientMixin { late final _tabIds = { - l10n.add: _addPage, + l10n.add: _buildAddPage(), }; final _tabKeys = {}; late var _tabController = TabController( @@ -81,52 +82,41 @@ class _SSHTabPageState extends State ); } - late final Widget _addPage = Center( - child: Column( - mainAxisSize: MainAxisSize.min, - children: [ - Container( - decoration: BoxDecoration( - borderRadius: BorderRadius.circular(77), - color: Colors.white10, - ), - child: IconButton( - padding: const EdgeInsets.all(17), - onPressed: () async { - final spi = (await context.showPickDialog( - items: Pros.server.servers.toList(), - name: (e) => e.spi.name, - multi: false, - )) - ?.first - .spi; - if (spi == null) { - return; - } - final name = () { - if (_tabIds.containsKey(spi.name)) { - return '${spi.name}(${_tabIds.length + 1})'; - } - return spi.name; - }(); - final key = GlobalKey(debugLabel: 'sshTabPage_$name'); - _tabIds[name] = SSHPage( - key: key, - spi: spi, - pop: false, - ); - _tabKeys[name] = key; - _refreshTabs(); - _tabController.animateTo(_tabIds.length - 1); - }, - icon: const Icon(Icons.add), - ), - ), - UIs.height13, - Text(l10n.add), - ], - ), - ); + Widget _buildAddPage() { + return Center( + child: Consumer(builder: (_, pro, __) { + return ListView.builder( + padding: const EdgeInsets.all(7), + itemBuilder: (_, idx) { + final spi = pro.servers.toList()[idx].spi; + return CardX(ListTile( + title: Text(spi.name), + subtitle: Text(spi.id, style: UIs.textGrey), + trailing: const Icon(Icons.chevron_right), + onTap: () { + final name = () { + if (_tabIds.containsKey(spi.name)) { + return '${spi.name}(${_tabIds.length + 1})'; + } + return spi.name; + }(); + final key = GlobalKey(debugLabel: 'sshTabPage_$name'); + _tabIds[name] = SSHPage( + key: key, + spi: spi, + pop: false, + ); + _tabKeys[name] = key; + _refreshTabs(); + _tabController.animateTo(_tabIds.length - 1); + }, + )); + }, + itemCount: pro.servers.length, + ); + }), + ); + } Widget _buildBody() { return TabBarView(