From d663106f9f78195876e703ccd22522b3c5b5512b Mon Sep 17 00:00:00 2001 From: lollipopkit Date: Sun, 20 Aug 2023 22:40:39 +0800 Subject: [PATCH] opt.: UI --- ios/Runner.xcodeproj/project.pbxproj | 24 ++++---- lib/data/res/build_data.dart | 6 +- lib/view/page/server/detail.dart | 15 +++-- lib/view/page/server/tab.dart | 83 ++++++++++++++++---------- lib/view/widget/tag/btn.dart | 19 +++--- macos/Runner.xcodeproj/project.pbxproj | 12 ++-- 6 files changed, 90 insertions(+), 69 deletions(-) diff --git a/ios/Runner.xcodeproj/project.pbxproj b/ios/Runner.xcodeproj/project.pbxproj index 050ecda0..e7cc68b7 100644 --- a/ios/Runner.xcodeproj/project.pbxproj +++ b/ios/Runner.xcodeproj/project.pbxproj @@ -470,7 +470,7 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements; - CURRENT_PROJECT_VERSION = 480; + CURRENT_PROJECT_VERSION = 488; DEVELOPMENT_TEAM = BA88US33G6; ENABLE_BITCODE = NO; INFOPLIST_FILE = "Runner/Info-$(CONFIGURATION).plist"; @@ -478,7 +478,7 @@ "$(inherited)", "@executable_path/Frameworks", ); - MARKETING_VERSION = 1.0.480; + MARKETING_VERSION = 1.0.488; 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 = 480; + CURRENT_PROJECT_VERSION = 488; DEVELOPMENT_TEAM = BA88US33G6; ENABLE_BITCODE = NO; INFOPLIST_FILE = "Runner/Info-$(CONFIGURATION).plist"; @@ -610,7 +610,7 @@ "$(inherited)", "@executable_path/Frameworks", ); - MARKETING_VERSION = 1.0.480; + MARKETING_VERSION = 1.0.488; 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 = 480; + CURRENT_PROJECT_VERSION = 488; DEVELOPMENT_TEAM = BA88US33G6; ENABLE_BITCODE = NO; INFOPLIST_FILE = "Runner/Info-$(CONFIGURATION).plist"; @@ -636,7 +636,7 @@ "$(inherited)", "@executable_path/Frameworks", ); - MARKETING_VERSION = 1.0.480; + MARKETING_VERSION = 1.0.488; 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 = 480; + CURRENT_PROJECT_VERSION = 488; 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.480; + MARKETING_VERSION = 1.0.488; 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 = 480; + CURRENT_PROJECT_VERSION = 488; 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.480; + MARKETING_VERSION = 1.0.488; 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 = 480; + CURRENT_PROJECT_VERSION = 488; 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.480; + MARKETING_VERSION = 1.0.488; MTL_FAST_MATH = YES; PRODUCT_BUNDLE_IDENTIFIER = com.lollipopkit.toolbox.StatusWidget; PRODUCT_NAME = "$(TARGET_NAME)"; diff --git a/lib/data/res/build_data.dart b/lib/data/res/build_data.dart index ffd67395..ad4e3241 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 = 480; + static const int build = 488; static const String engine = "3.10.6"; - static const String buildAt = "2023-08-19 23:10:30.475495"; - static const int modifications = 10; + static const String buildAt = "2023-08-20 22:00:57.355648"; + static const int modifications = 4; } diff --git a/lib/view/page/server/detail.dart b/lib/view/page/server/detail.dart index 2774e294..87bd2d6e 100644 --- a/lib/view/page/server/detail.dart +++ b/lib/view/page/server/detail.dart @@ -79,6 +79,7 @@ class _ServerDetailPageState extends State } Widget _buildMainPage(Server si) { + final buildFuncs = !_setting.moveOutServerTabFuncBtns.fetch()!; return Scaffold( appBar: CustomAppBar( title: Text(si.spi.name, style: textSize18), @@ -94,9 +95,6 @@ class _ServerDetailPageState extends State ) ], ), - bottomNavigationBar: _setting.moveOutServerTabFuncBtns.fetch()! - ? null - : ServerFuncBtns(spi: widget.spi, s: _s, iconSize: 19), body: ListView.builder( padding: EdgeInsets.only( left: 13, @@ -104,9 +102,14 @@ class _ServerDetailPageState extends State top: 13, bottom: _media.padding.bottom + 77, ), - itemCount: _cardsOrder.length, - itemBuilder: (context, index) => - _cardBuildMap[_cardsOrder[index]]?.call(si.status), + itemCount: buildFuncs ? _cardsOrder.length + 1 : _cardsOrder.length, + itemBuilder: (context, index) { + if (index == 0 && buildFuncs) { + return ServerFuncBtns(spi: widget.spi, s: _s, iconSize: 19); + } + if (buildFuncs) index--; + return _cardBuildMap[_cardsOrder[index]]?.call(si.status); + }, ), ); } diff --git a/lib/view/page/server/tab.dart b/lib/view/page/server/tab.dart index 5ed7d25c..48d59efe 100644 --- a/lib/view/page/server/tab.dart +++ b/lib/view/page/server/tab.dart @@ -71,20 +71,6 @@ class _ServerPageState extends State heroTag: 'server', child: const Icon(Icons.add), ), - bottomNavigationBar: Padding( - padding: const EdgeInsets.fromLTRB(7, 17, 7, 3), - child: Consumer(builder: (_, pro, __) { - return TagSwitcher( - tags: pro.tags, - width: _media.size.width, - onTagChanged: (p0) => setState(() { - _tag = p0; - }), - initTag: _tag, - all: _s.all, - ); - }), - ), ); } @@ -126,16 +112,37 @@ class _ServerPageState extends State _tag == null || (pro.servers[e]?.spi.tags?.contains(_tag) ?? false)) .toList(); + Widget _buildTagsSwitcher(ServerProvider provider) { + return TagSwitcher( + tags: provider.tags, + width: _media.size.width, + onTagChanged: (p0) => setState(() { + _tag = p0; + }), + initTag: _tag, + all: _s.all, + ); + } + Widget _buildBodySmall({ required ServerProvider provider, required List filtered, EdgeInsets? padding = const EdgeInsets.fromLTRB(7, 10, 7, 7), + bool buildTags = true, }) { + final count = buildTags ? filtered.length + 2 : filtered.length + 1; return ListView.builder( padding: padding, - itemBuilder: (_, index) => - _buildEachServerCard(provider.servers[filtered[index]]), - itemCount: filtered.length, + itemCount: count, + itemBuilder: (_, index) { + if (index == 0 && buildTags) return _buildTagsSwitcher(provider); + + // Issue #130 + if (index == count - 1) return const SizedBox(height: 77); + + if (buildTags) index--; + return _buildEachServerCard(provider.servers[filtered[index]]); + }, ); } @@ -143,22 +150,30 @@ class _ServerPageState extends State final filtered = _filterServers(pro); final left = filtered.where((e) => filtered.indexOf(e) % 2 == 0).toList(); final right = filtered.where((e) => filtered.indexOf(e) % 2 == 1).toList(); - return Row( + return Column( + mainAxisSize: MainAxisSize.min, children: [ - Expanded( - child: _buildBodySmall( - provider: pro, - filtered: left, - padding: const EdgeInsets.fromLTRB(7, 10, 0, 7), - ), - ), - Expanded( - child: _buildBodySmall( - provider: pro, - filtered: right, - padding: const EdgeInsets.fromLTRB(0, 10, 7, 7), - ), - ), + Padding(padding: const EdgeInsets.symmetric(horizontal: 7), child: _buildTagsSwitcher(pro),), + Expanded(child: Row( + children: [ + Expanded( + child: _buildBodySmall( + provider: pro, + filtered: left, + padding: const EdgeInsets.fromLTRB(7, 10, 0, 7), + buildTags: false, + ), + ), + Expanded( + child: _buildBodySmall( + provider: pro, + filtered: right, + padding: const EdgeInsets.fromLTRB(0, 10, 7, 7), + buildTags: false, + ), + ), + ], + )) ], ); } @@ -189,7 +204,9 @@ class _ServerPageState extends State Widget _wrapWithSizedbox(Widget child) { return SizedBox( - width: _useDoubleColumn ? (_media.size.width - 146) / 8 : (_media.size.width - 74) / 4, + width: _useDoubleColumn + ? (_media.size.width - 146) / 10 + : (_media.size.width - 74) / 5, child: child, ); } diff --git a/lib/view/widget/tag/btn.dart b/lib/view/widget/tag/btn.dart index c26692fe..706889be 100644 --- a/lib/view/widget/tag/btn.dart +++ b/lib/view/widget/tag/btn.dart @@ -23,19 +23,20 @@ class TagBtn extends StatelessWidget { child: Material( color: primaryColor.withAlpha(20), child: InkWell( - onTap: onTap, - child: Padding( - padding: const EdgeInsets.symmetric(horizontal: 11, vertical: 2.7), - child: Text( - content, - style: TextStyle( - color: isEnable ? null : Colors.grey, - fontSize: 13, + onTap: onTap, + child: Padding( + padding: + const EdgeInsets.symmetric(horizontal: 11, vertical: 2.7), + child: Text( + content, + style: TextStyle( + color: isEnable ? null : Colors.grey, + fontSize: 13, + ), ), ), ), ), - ), ), ); } diff --git a/macos/Runner.xcodeproj/project.pbxproj b/macos/Runner.xcodeproj/project.pbxproj index ed38c625..9e01b93d 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 = 480; + CURRENT_PROJECT_VERSION = 488; GENERATE_INFOPLIST_FILE = YES; - MARKETING_VERSION = 1.0.480; + MARKETING_VERSION = 1.0.488; 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 = 480; + CURRENT_PROJECT_VERSION = 488; GENERATE_INFOPLIST_FILE = YES; - MARKETING_VERSION = 1.0.480; + MARKETING_VERSION = 1.0.488; 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 = 480; + CURRENT_PROJECT_VERSION = 488; GENERATE_INFOPLIST_FILE = YES; - MARKETING_VERSION = 1.0.480; + MARKETING_VERSION = 1.0.488; PRODUCT_BUNDLE_IDENTIFIER = tech.lolli.serverBox.RunnerTests; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_VERSION = 5.0;