diff --git a/ios/Runner.xcodeproj/project.pbxproj b/ios/Runner.xcodeproj/project.pbxproj index f66806f7..03b87ef9 100644 --- a/ios/Runner.xcodeproj/project.pbxproj +++ b/ios/Runner.xcodeproj/project.pbxproj @@ -360,7 +360,7 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements; - CURRENT_PROJECT_VERSION = 333; + CURRENT_PROJECT_VERSION = 341; DEVELOPMENT_TEAM = BA88US33G6; ENABLE_BITCODE = NO; INFOPLIST_FILE = "Runner/Info-$(CONFIGURATION).plist"; @@ -368,7 +368,7 @@ "$(inherited)", "@executable_path/Frameworks", ); - MARKETING_VERSION = 1.0.333; + MARKETING_VERSION = 1.0.341; PRODUCT_BUNDLE_IDENTIFIER = com.lollipopkit.toolbox; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; @@ -491,7 +491,7 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements; - CURRENT_PROJECT_VERSION = 333; + CURRENT_PROJECT_VERSION = 341; DEVELOPMENT_TEAM = BA88US33G6; ENABLE_BITCODE = NO; INFOPLIST_FILE = "Runner/Info-$(CONFIGURATION).plist"; @@ -499,7 +499,7 @@ "$(inherited)", "@executable_path/Frameworks", ); - MARKETING_VERSION = 1.0.333; + MARKETING_VERSION = 1.0.341; PRODUCT_BUNDLE_IDENTIFIER = com.lollipopkit.toolbox; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; @@ -516,7 +516,7 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements; - CURRENT_PROJECT_VERSION = 333; + CURRENT_PROJECT_VERSION = 341; DEVELOPMENT_TEAM = BA88US33G6; ENABLE_BITCODE = NO; INFOPLIST_FILE = "Runner/Info-$(CONFIGURATION).plist"; @@ -524,7 +524,7 @@ "$(inherited)", "@executable_path/Frameworks", ); - MARKETING_VERSION = 1.0.333; + MARKETING_VERSION = 1.0.341; PRODUCT_BUNDLE_IDENTIFIER = com.lollipopkit.toolbox; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; diff --git a/lib/app.dart b/lib/app.dart index ecbba68a..a0dbc1e2 100644 --- a/lib/app.dart +++ b/lib/app.dart @@ -23,9 +23,16 @@ class MyApp extends StatelessWidget { valueListenable: _setting.themeMode.listenable(), builder: (_, tMode, __) { final ok = tMode >= 0 && tMode <= ThemeMode.values.length - 1; - final themeMode = ok ? ThemeMode.values[tMode] : ThemeMode.system; + // Issue #57 + // if not [ok] -> [AMOLED] mode, use [ThemeMode.dark] + final themeMode = ok ? ThemeMode.values[tMode] : ThemeMode.dark; final localeStr = _setting.locale.fetch(); final locale = localeStr?.toLocale; + final darkTheme = ThemeData( + useMaterial3: true, + brightness: Brightness.dark, + colorSchemeSeed: primaryColor, + ); return MaterialApp( debugShowCheckedModeBanner: false, @@ -38,11 +45,30 @@ class MyApp extends StatelessWidget { useMaterial3: true, colorSchemeSeed: primaryColor, ), - darkTheme: ThemeData( - useMaterial3: true, - brightness: Brightness.dark, - colorSchemeSeed: primaryColor, - ), + darkTheme: ok + ? darkTheme + : darkTheme.copyWith( + scaffoldBackgroundColor: Colors.black, + dialogBackgroundColor: Colors.black, + drawerTheme: const DrawerThemeData( + backgroundColor: Colors.black, + ), + appBarTheme: const AppBarTheme( + backgroundColor: Colors.black, + ), + bottomSheetTheme: const BottomSheetThemeData( + backgroundColor: Colors.black, + ), + listTileTheme: const ListTileThemeData( + tileColor: Colors.black12, + ), + cardTheme: const CardTheme( + color: Colors.black12, + ), + navigationBarTheme: const NavigationBarThemeData( + backgroundColor: Colors.black, + ), + ), home: const HomePage(), ); }, diff --git a/lib/data/res/build_data.dart b/lib/data/res/build_data.dart index b41fc32c..df164339 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 = 333; + static const int build = 341; static const String engine = "3.10.2"; - static const String buildAt = "2023-05-28 19:42:38.911830"; - static const int modifications = 7; + static const String buildAt = "2023-05-31 19:23:57.263324"; + static const int modifications = 6; } diff --git a/lib/view/page/home.dart b/lib/view/page/home.dart index daf81bfd..a89be683 100644 --- a/lib/view/page/home.dart +++ b/lib/view/page/home.dart @@ -142,7 +142,6 @@ class _HomePageState extends State ); }); }, - elevation: 0.47, labelBehavior: NavigationDestinationLabelBehavior.onlyShowSelected, destinations: [ NavigationDestination( diff --git a/lib/view/page/server/tab.dart b/lib/view/page/server/tab.dart index 50847fe6..78f2cfe4 100644 --- a/lib/view/page/server/tab.dart +++ b/lib/view/page/server/tab.dart @@ -149,22 +149,22 @@ class _ServerPageState extends State (pro.servers[e]?.spi.tags?.contains(_tag) ?? false)) .toList(); return AnimationLimiter( - key: ValueKey(_tag), + key: ValueKey(_tag), child: ReorderableListView.builder( - header: _buildTagsSwitcher(pro), - padding: const EdgeInsets.fromLTRB(7, 10, 7, 7), - physics: const AlwaysScrollableScrollPhysics(), - onReorder: (oldIndex, newIndex) => setState(() { - pro.serverOrder.moveById( - filtered[oldIndex], - filtered[newIndex], - _settingStore.serverOrder, - ); - }), - itemBuilder: (context, index) => - _buildEachServerCard(pro.servers[filtered[index]], index), - itemCount: filtered.length, - )); + header: _buildTagsSwitcher(pro), + padding: const EdgeInsets.fromLTRB(7, 10, 7, 7), + physics: const AlwaysScrollableScrollPhysics(), + onReorder: (oldIndex, newIndex) => setState(() { + pro.serverOrder.moveById( + filtered[oldIndex], + filtered[newIndex], + _settingStore.serverOrder, + ); + }), + itemBuilder: (context, index) => + _buildEachServerCard(pro.servers[filtered[index]], index), + itemCount: filtered.length, + )); }, ), ); diff --git a/lib/view/page/setting.dart b/lib/view/page/setting.dart index c1c4c724..0d2301d9 100644 --- a/lib/view/page/setting.dart +++ b/lib/view/page/setting.dart @@ -365,15 +365,17 @@ class _SettingPageState extends State { } Widget _buildThemeMode() { - final items = ThemeMode.values.map( - (e) { - final str = _buildThemeModeStr(e.index); - return PopupMenuItem( - value: e.index, - child: Text(str), - ); - }, - ).toList(); + final items = ThemeMode.values + .map( + (e) => PopupMenuItem( + value: e.index, + child: Text(_buildThemeModeStr(e.index)), + ), + ) + .toList(); + // Issue #57 + final len = ThemeMode.values.length; + items.add(PopupMenuItem(value: len, child: Text(_buildThemeModeStr(len)))); return ListTile( title: Text( @@ -406,6 +408,8 @@ class _SettingPageState extends State { return _s.light; case 2: return _s.dark; + case 3: + return 'AMOLED'; default: return _s.auto; } diff --git a/lib/view/widget/tag.dart b/lib/view/widget/tag.dart index 84274118..a0619d4f 100644 --- a/lib/view/widget/tag.dart +++ b/lib/view/widget/tag.dart @@ -66,8 +66,16 @@ class TagEditor extends StatelessWidget { Widget _buildTagItem(BuildContext context, String tag, bool isAdd) { return Padding( padding: const EdgeInsets.symmetric(horizontal: 3), - child: GestureDetector( - onTap: () => _showRenameDialog(context, tag), + child: InkWell( + onTap: () { + if (isAdd) { + tags.add(tag); + } else { + tags.remove(tag); + } + onChanged?.call(tags); + }, + onLongPress: () => _showRenameDialog(context, tag), child: Container( decoration: BoxDecoration( borderRadius: const BorderRadius.all(Radius.circular(20.0)), @@ -82,21 +90,11 @@ class TagEditor extends StatelessWidget { style: const TextStyle(color: Colors.white), ), const SizedBox(width: 4.0), - InkWell( - child: Icon( - isAdd ? Icons.add_circle : Icons.cancel, - size: 14.0, - color: Colors.white, - ), - onTap: () { - if (isAdd) { - tags.add(tag); - } else { - tags.remove(tag); - } - onChanged?.call(tags); - }, - ) + Icon( + isAdd ? Icons.add_circle : Icons.cancel, + size: 14.0, + color: Colors.white, + ), ], ), ), diff --git a/macos/Runner.xcodeproj/project.pbxproj b/macos/Runner.xcodeproj/project.pbxproj index 94f82b2e..1a090a78 100644 --- a/macos/Runner.xcodeproj/project.pbxproj +++ b/macos/Runner.xcodeproj/project.pbxproj @@ -475,9 +475,9 @@ baseConfigurationReference = C1C758C41C4E208965A68933 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; - CURRENT_PROJECT_VERSION = 333; + CURRENT_PROJECT_VERSION = 341; GENERATE_INFOPLIST_FILE = YES; - MARKETING_VERSION = 1.0.333; + MARKETING_VERSION = 1.0.341; PRODUCT_BUNDLE_IDENTIFIER = tech.lolli.serverBox.RunnerTests; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_VERSION = 5.0; @@ -490,9 +490,9 @@ baseConfigurationReference = 15AF97DF993E8968098D6EBE /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; - CURRENT_PROJECT_VERSION = 333; + CURRENT_PROJECT_VERSION = 341; GENERATE_INFOPLIST_FILE = YES; - MARKETING_VERSION = 1.0.333; + MARKETING_VERSION = 1.0.341; PRODUCT_BUNDLE_IDENTIFIER = tech.lolli.serverBox.RunnerTests; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_VERSION = 5.0; @@ -505,9 +505,9 @@ baseConfigurationReference = 7CFA7DE7FABA75685DFB6948 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; - CURRENT_PROJECT_VERSION = 333; + CURRENT_PROJECT_VERSION = 341; GENERATE_INFOPLIST_FILE = YES; - MARKETING_VERSION = 1.0.333; + MARKETING_VERSION = 1.0.341; PRODUCT_BUNDLE_IDENTIFIER = tech.lolli.serverBox.RunnerTests; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_VERSION = 5.0; diff --git a/make.dart b/make.dart index 4aa8f771..707b701f 100755 --- a/make.dart +++ b/make.dart @@ -8,9 +8,7 @@ const appName = 'ServerBox'; const buildDataFilePath = 'lib/data/res/build_data.dart'; const apkPath = 'build/app/outputs/flutter-apk/app-release.apk'; -const ipaPath = 'build/ios/ipa/$appName.ipa'; const appleXCConfigPath = 'Runner.xcodeproj/project.pbxproj'; -const releaseDirPath = './release'; var regAppleProjectVer = RegExp(r'CURRENT_PROJECT_VERSION = .+;'); var regAppleMarketVer = RegExp(r'MARKETING_VERSION = .+'); @@ -103,8 +101,7 @@ void flutterRun(String? mode) { mode: ProcessStartMode.inheritStdio, runInShell: true); } -Future flutterBuild( - String source, String target, String buildType) async { +Future flutterBuild(String buildType) async { final args = [ 'build', buildType, @@ -126,20 +123,7 @@ Future flutterBuild( final buildResult = await fvmRun(['flutter', ...args]); final exitCode = buildResult.exitCode; - if (exitCode == 0) { - target = target.replaceFirst('build', build.toString()); - target = '$releaseDirPath/$target'; - print('Copying from $source to $target'); - if (isAndroid) { - await File(source).copy(target); - } else { - final result = await Process.run('cp', ['-r', source, target]); - if (result.exitCode != 0) { - print(result.stderr); - exit(1); - } - } - } else { + if (exitCode != 0) { print(buildResult.stdout); print(buildResult.stderr); print('\nBuild failed with exit code $exitCode'); @@ -148,15 +132,15 @@ Future flutterBuild( } Future flutterBuildIOS() async { - await flutterBuild(ipaPath, '${appName}_ios_build.ipa', 'ios'); + await flutterBuild('ipa'); } Future flutterBuildMacOS() async { - await flutterBuild(ipaPath, '${appName}_macos_build.ipa', 'macos'); + await flutterBuild('macos'); } Future flutterBuildAndroid() async { - await flutterBuild(apkPath, '${appName}_build_Arm64.apk', 'apk'); + await flutterBuild('apk'); await killJava(); }