From 6e918b07771f7ca02b4f5033b060df31f9afa955 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?lollipopkit=F0=9F=8F=B3=EF=B8=8F=E2=80=8D=E2=9A=A7?= =?UTF-8?q?=EF=B8=8F?= <10864310+lollipopkit@users.noreply.github.com> Date: Tue, 19 May 2026 13:43:14 +0800 Subject: [PATCH 1/8] fix: update Flutter deprecated list APIs --- lib/view/page/server/connection_stats.dart | 3 ++- lib/view/page/setting/entries/home_tabs.dart | 5 +---- lib/view/page/setting/seq/srv_detail_seq.dart | 7 ++----- lib/view/page/setting/seq/srv_func_seq.dart | 9 +++++++-- lib/view/page/setting/seq/srv_seq.dart | 7 ++----- lib/view/page/setting/seq/virt_key.dart | 7 ++----- pubspec.lock | 16 ++++++++-------- 7 files changed, 24 insertions(+), 30 deletions(-) diff --git a/lib/view/page/server/connection_stats.dart b/lib/view/page/server/connection_stats.dart index be32c23a6..7d157f285 100644 --- a/lib/view/page/server/connection_stats.dart +++ b/lib/view/page/server/connection_stats.dart @@ -2,6 +2,7 @@ import 'package:fl_lib/fl_lib.dart'; import 'package:flutter/material.dart'; +import 'package:flutter/rendering.dart'; import 'package:server_box/core/extension/context/locale.dart'; import 'package:server_box/data/model/server/connection_stat.dart'; import 'package:server_box/data/res/store.dart'; @@ -69,7 +70,7 @@ extension _Builds on _ConnectionStatsPageState { } return ListView.builder( - cacheExtent: 200, + scrollCacheExtent: const ScrollCacheExtent.pixels(200), itemCount: _serverStats.length, itemBuilder: (context, index) { final stats = _serverStats[index]; diff --git a/lib/view/page/setting/entries/home_tabs.dart b/lib/view/page/setting/entries/home_tabs.dart index 8bb149d65..01cab3603 100644 --- a/lib/view/page/setting/entries/home_tabs.dart +++ b/lib/view/page/setting/entries/home_tabs.dart @@ -48,7 +48,7 @@ class _HomeTabsConfigPageState extends ConsumerState { Expanded( child: ReorderableListView.builder( itemCount: _selectedTabs.length, - onReorder: _onReorder, + onReorderItem: _onReorder, buildDefaultDragHandles: false, itemBuilder: (context, index) { final tab = _selectedTabs[index]; @@ -117,9 +117,6 @@ class _HomeTabsConfigPageState extends ConsumerState { void _onReorder(int oldIndex, int newIndex) { setState(() { - if (newIndex > oldIndex) { - newIndex -= 1; - } final tab = _selectedTabs.removeAt(oldIndex); _selectedTabs.insert(newIndex, tab); }); diff --git a/lib/view/page/setting/seq/srv_detail_seq.dart b/lib/view/page/setting/seq/srv_detail_seq.dart index 6634afe0d..344959617 100644 --- a/lib/view/page/setting/seq/srv_detail_seq.dart +++ b/lib/view/page/setting/seq/srv_detail_seq.dart @@ -58,7 +58,7 @@ class _ServerDetailOrderPageState extends State { itemCount: _order.length, proxyDecorator: reorderProxyDecorator, itemBuilder: (_, idx) => _buildListItem(_order[idx], idx), - onReorder: _handleReorder, + onReorderItem: _handleReorder, ); } @@ -95,10 +95,7 @@ class _ServerDetailOrderPageState extends State { } void _handleReorder(int oldIndex, int newIndex) { - var targetIndex = newIndex; - if (targetIndex > oldIndex) { - targetIndex -= 1; - } + final targetIndex = newIndex; if (targetIndex == oldIndex) { return; } diff --git a/lib/view/page/setting/seq/srv_func_seq.dart b/lib/view/page/setting/seq/srv_func_seq.dart index c46f03f33..3b91289d8 100644 --- a/lib/view/page/setting/seq/srv_func_seq.dart +++ b/lib/view/page/setting/seq/srv_func_seq.dart @@ -40,12 +40,17 @@ class _ServerDetailOrderPageState extends State { padding: const EdgeInsets.all(7), itemCount: allKeys.length, itemBuilder: (_, idx) => _buildListItem(allKeys[idx], idx, keys), - onReorder: (o, n) { + onReorderItem: (o, n) { if (o >= keys.length || n >= keys.length) { context.showSnackBar(libL10n.disabled); return; } - keys.moveByItem(o, n, property: prop); + if (o == n) { + return; + } + final moved = keys.removeAt(o); + keys.insert(n, moved); + prop.set(keys); }, ); }, diff --git a/lib/view/page/setting/seq/srv_seq.dart b/lib/view/page/setting/seq/srv_seq.dart index 2da845116..36b150bc9 100644 --- a/lib/view/page/setting/seq/srv_seq.dart +++ b/lib/view/page/setting/seq/srv_seq.dart @@ -54,11 +54,8 @@ class _ServerOrderPageState extends ConsumerState { } return ReorderableListView.builder( footer: const SizedBox(height: 77), - onReorder: (oldIndex, newIndex) { - var targetIndex = newIndex; - if (targetIndex > oldIndex) { - targetIndex -= 1; - } + onReorderItem: (oldIndex, newIndex) { + final targetIndex = newIndex; if (targetIndex == oldIndex) { return; } diff --git a/lib/view/page/setting/seq/virt_key.dart b/lib/view/page/setting/seq/virt_key.dart index 9663fef76..069585d29 100644 --- a/lib/view/page/setting/seq/virt_key.dart +++ b/lib/view/page/setting/seq/virt_key.dart @@ -75,7 +75,7 @@ class _SSHVirtKeySettingPageState extends State { itemCount: _order.length, proxyDecorator: reorderProxyDecorator, itemBuilder: (_, idx) => _buildListItem(_order[idx], idx), - onReorder: _handleReorder, + onReorderItem: _handleReorder, ); } @@ -128,10 +128,7 @@ class _SSHVirtKeySettingPageState extends State { } void _handleReorder(int oldIndex, int newIndex) { - var targetIndex = newIndex; - if (targetIndex > oldIndex) { - targetIndex -= 1; - } + final targetIndex = newIndex; if (targetIndex == oldIndex) { return; } diff --git a/pubspec.lock b/pubspec.lock index 0d453740c..242558ad4 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -934,10 +934,10 @@ packages: dependency: transitive description: name: meta - sha256: "23f08335362185a5ea2ad3a4e597f1375e78bce8a040df5c600c8d3552ef2394" + sha256: "1741988757a65eb6b36abe716829688cf01910bbf91c34354ff7ec1c3de2b349" url: "https://pub.dev" source: hosted - version: "1.17.0" + version: "1.18.0" mime: dependency: transitive description: @@ -1514,26 +1514,26 @@ packages: dependency: "direct dev" description: name: test - sha256: "280d6d890011ca966ad08df7e8a4ddfab0fb3aa49f96ed6de56e3521347a9ae7" + sha256: "8d9ceddbab833f180fbefed08afa76d7c03513dfdba87ffcec2718b02bbcbf20" url: "https://pub.dev" source: hosted - version: "1.30.0" + version: "1.31.0" test_api: dependency: transitive description: name: test_api - sha256: "8161c84903fd860b26bfdefb7963b3f0b68fee7adea0f59ef805ecca346f0c7a" + sha256: "949a932224383300f01be9221c39180316445ecb8e7547f70a41a35bf421fb9e" url: "https://pub.dev" source: hosted - version: "0.7.10" + version: "0.7.11" test_core: dependency: transitive description: name: test_core - sha256: "0381bd1585d1a924763c308100f2138205252fb90c9d4eeaf28489ee65ccde51" + sha256: "1991d4cfe85d5043241acac92962c3977c8d2f2add1ee73130c7b286417d1d34" url: "https://pub.dev" source: hosted - version: "0.6.16" + version: "0.6.17" tuple: dependency: transitive description: From a2f9884597c1c9cc217d5ad3a531e10771d1cce8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?lollipopkit=F0=9F=8F=B3=EF=B8=8F=E2=80=8D=E2=9A=A7?= =?UTF-8?q?=EF=B8=8F?= <10864310+lollipopkit@users.noreply.github.com> Date: Tue, 19 May 2026 16:55:25 +0800 Subject: [PATCH 2/8] chore: update Flutter 3.44 package integrations --- .github/workflows/build.yml | 2 +- ios/Podfile.lock | 75 ------------------- ios/Runner.xcodeproj/project.pbxproj | 22 ++++++ .../xcshareddata/swiftpm/Package.resolved | 59 +++++++++++++++ .../xcshareddata/xcschemes/Runner.xcscheme | 18 +++++ .../xcshareddata/swiftpm/Package.resolved | 59 +++++++++++++++ packages/circle_chart | 2 +- packages/plain_notification_token | 2 +- packages/watch_connectivity | 2 +- pubspec.lock | 6 +- pubspec.yaml | 2 +- 11 files changed, 166 insertions(+), 83 deletions(-) create mode 100644 ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved create mode 100644 ios/Runner.xcworkspace/xcshareddata/swiftpm/Package.resolved diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 1d1b867cf..57052fa12 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -27,7 +27,7 @@ jobs: uses: subosito/flutter-action@v2 with: channel: "stable" - flutter-version: "3.41.4" + flutter-version: "3.44.0" - uses: actions/setup-java@v4 with: distribution: "zulu" diff --git a/ios/Podfile.lock b/ios/Podfile.lock index 2c32d78f8..70ee38797 100644 --- a/ios/Podfile.lock +++ b/ios/Podfile.lock @@ -1,96 +1,21 @@ PODS: - - camera_avfoundation (0.0.1): - - Flutter - - file_picker (0.0.1): - - Flutter - Flutter (1.0.0) - - flutter_native_splash (2.4.3): - - Flutter - - flutter_secure_storage_darwin (10.0.0): - - Flutter - - FlutterMacOS - icloud_storage (0.0.1): - Flutter - - local_auth_darwin (0.0.1): - - Flutter - - FlutterMacOS - - package_info_plus (0.4.5): - - Flutter - - plain_notification_token (0.0.1): - - Flutter - - share_plus (0.0.1): - - Flutter - - shared_preferences_foundation (0.0.1): - - Flutter - - FlutterMacOS - - url_launcher_ios (0.0.1): - - Flutter - - wakelock_plus (0.0.1): - - Flutter - - watch_connectivity (0.0.1): - - Flutter DEPENDENCIES: - - camera_avfoundation (from `.symlinks/plugins/camera_avfoundation/ios`) - - file_picker (from `.symlinks/plugins/file_picker/ios`) - Flutter (from `Flutter`) - - flutter_native_splash (from `.symlinks/plugins/flutter_native_splash/ios`) - - flutter_secure_storage_darwin (from `.symlinks/plugins/flutter_secure_storage_darwin/darwin`) - icloud_storage (from `.symlinks/plugins/icloud_storage/ios`) - - local_auth_darwin (from `.symlinks/plugins/local_auth_darwin/darwin`) - - package_info_plus (from `.symlinks/plugins/package_info_plus/ios`) - - plain_notification_token (from `.symlinks/plugins/plain_notification_token/ios`) - - share_plus (from `.symlinks/plugins/share_plus/ios`) - - shared_preferences_foundation (from `.symlinks/plugins/shared_preferences_foundation/darwin`) - - url_launcher_ios (from `.symlinks/plugins/url_launcher_ios/ios`) - - wakelock_plus (from `.symlinks/plugins/wakelock_plus/ios`) - - watch_connectivity (from `.symlinks/plugins/watch_connectivity/ios`) EXTERNAL SOURCES: - camera_avfoundation: - :path: ".symlinks/plugins/camera_avfoundation/ios" - file_picker: - :path: ".symlinks/plugins/file_picker/ios" Flutter: :path: Flutter - flutter_native_splash: - :path: ".symlinks/plugins/flutter_native_splash/ios" - flutter_secure_storage_darwin: - :path: ".symlinks/plugins/flutter_secure_storage_darwin/darwin" icloud_storage: :path: ".symlinks/plugins/icloud_storage/ios" - local_auth_darwin: - :path: ".symlinks/plugins/local_auth_darwin/darwin" - package_info_plus: - :path: ".symlinks/plugins/package_info_plus/ios" - plain_notification_token: - :path: ".symlinks/plugins/plain_notification_token/ios" - share_plus: - :path: ".symlinks/plugins/share_plus/ios" - shared_preferences_foundation: - :path: ".symlinks/plugins/shared_preferences_foundation/darwin" - url_launcher_ios: - :path: ".symlinks/plugins/url_launcher_ios/ios" - wakelock_plus: - :path: ".symlinks/plugins/wakelock_plus/ios" - watch_connectivity: - :path: ".symlinks/plugins/watch_connectivity/ios" SPEC CHECKSUMS: - camera_avfoundation: 5675ca25298b6f81fa0a325188e7df62cc217741 - file_picker: fb04e739ae6239a76ce1f571863a196a922c87d4 Flutter: cabc95a1d2626b1b06e7179b784ebcf0c0cde467 - flutter_native_splash: c32d145d68aeda5502d5f543ee38c192065986cf - flutter_secure_storage_darwin: acdb3f316ed05a3e68f856e0353b133eec373a23 icloud_storage: e55639f0c0d7cb2b0ba9c0b3d5968ccca9cd9aa2 - local_auth_darwin: c3ee6cce0a8d56be34c8ccb66ba31f7f180aaebb - package_info_plus: af8e2ca6888548050f16fa2f1938db7b5a5df499 - plain_notification_token: 047876b9d80a5b93565ddcc13a487a7e7b906f7d - share_plus: 50da8cb520a8f0f65671c6c6a99b3617ed10a58a - shared_preferences_foundation: 7036424c3d8ec98dfe75ff1667cb0cd531ec82bb - url_launcher_ios: 7a95fa5b60cc718a708b8f2966718e93db0cef1b - wakelock_plus: e29112ab3ef0b318e58cfa5c32326458be66b556 - watch_connectivity: 88e5bea25b473e66ef8d3f960954d154ed0356d6 PODFILE CHECKSUM: 5a0fb6438066e44ab2c77bd223668d351b8d8461 diff --git a/ios/Runner.xcodeproj/project.pbxproj b/ios/Runner.xcodeproj/project.pbxproj index 681b8d895..3dae686bb 100644 --- a/ios/Runner.xcodeproj/project.pbxproj +++ b/ios/Runner.xcodeproj/project.pbxproj @@ -42,6 +42,7 @@ E3DB67ED2A31FE200027B8CB /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = E3DB67EB2A31FE200027B8CB /* LaunchScreen.storyboard */; }; F0A1B2C31A2B3C4D5E6F0005 /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = F0A1B2C31A2B3C4D5E6F0001 /* Localizable.strings */; }; F0A1B2C31A2B3C4D5E6F1005 /* Localizable.strings (StatusWidget) in Resources */ = {isa = PBXBuildFile; fileRef = F0A1B2C31A2B3C4D5E6F1001 /* Localizable.strings */; }; + 78A318202AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage in Frameworks */ = {isa = PBXBuildFile; productRef = 78A3181F2AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -186,6 +187,7 @@ F0A1B2C31A2B3C4D5E6F100A /* pt-BR */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "pt-BR"; path = "pt-BR.lproj/Localizable.strings"; sourceTree = ""; }; F0A1B2C31A2B3C4D5E6F100B /* id */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = id; path = id.lproj/Localizable.strings; sourceTree = ""; }; F0A1B2C31A2B3C4D5E6F100C /* ja */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ja; path = ja.lproj/Localizable.strings; sourceTree = ""; }; + 78E0A7A72DC9AD7400C4905E /* FlutterGeneratedPluginSwiftPackage */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = FlutterGeneratedPluginSwiftPackage; path = Flutter/ephemeral/Packages/FlutterGeneratedPluginSwiftPackage; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -193,6 +195,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + 78A318202AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage in Frameworks */, 9234EA956D1225D388A01660 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; @@ -229,6 +232,7 @@ 9740EEB11CF90186004384FC /* Flutter */ = { isa = PBXGroup; children = ( + 78E0A7A72DC9AD7400C4905E /* FlutterGeneratedPluginSwiftPackage */, 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */, 9740EEB21CF90195004384FC /* Debug.xcconfig */, 7AFA3C8E1D35360C0083082E /* Release.xcconfig */, @@ -325,6 +329,9 @@ /* Begin PBXNativeTarget section */ 97C146ED1CF9000F007C117D /* Runner */ = { + packageProductDependencies = ( + 78A3181F2AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage */, + ); isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( @@ -389,6 +396,9 @@ /* Begin PBXProject section */ 97C146E61CF9000F007C117D /* Project object */ = { + packageReferences = ( + 781AD8BC2B33823900A9FFBB /* XCLocalSwiftPackageReference "Flutter/ephemeral/Packages/FlutterGeneratedPluginSwiftPackage" */, + ); isa = PBXProject; attributes = { LastSwiftUpdateCheck = 1430; @@ -1218,6 +1228,18 @@ defaultConfigurationName = Release; }; /* End XCConfigurationList section */ +/* Begin XCLocalSwiftPackageReference section */ + 781AD8BC2B33823900A9FFBB /* XCLocalSwiftPackageReference "Flutter/ephemeral/Packages/FlutterGeneratedPluginSwiftPackage" */ = { + isa = XCLocalSwiftPackageReference; + relativePath = Flutter/ephemeral/Packages/FlutterGeneratedPluginSwiftPackage; + }; +/* End XCLocalSwiftPackageReference section */ +/* Begin XCSwiftPackageProductDependency section */ + 78A3181F2AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage */ = { + isa = XCSwiftPackageProductDependency; + productName = FlutterGeneratedPluginSwiftPackage; + }; +/* End XCSwiftPackageProductDependency section */ }; rootObject = 97C146E61CF9000F007C117D /* Project object */; } diff --git a/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved b/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved new file mode 100644 index 000000000..4d7193eeb --- /dev/null +++ b/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -0,0 +1,59 @@ +{ + "pins" : [ + { + "identity" : "dkcamera", + "kind" : "remoteSourceControl", + "location" : "https://github.com/zhangao0086/DKCamera", + "state" : { + "branch" : "master", + "revision" : "5c691d11014b910aff69f960475d70e65d9dcc96" + } + }, + { + "identity" : "dkimagepickercontroller", + "kind" : "remoteSourceControl", + "location" : "https://github.com/zhangao0086/DKImagePickerController", + "state" : { + "branch" : "4.3.9", + "revision" : "0bdfeacefa308545adde07bef86e349186335915" + } + }, + { + "identity" : "dkphotogallery", + "kind" : "remoteSourceControl", + "location" : "https://github.com/zhangao0086/DKPhotoGallery", + "state" : { + "branch" : "master", + "revision" : "311c1bc7a94f1538f82773a79c84374b12a2ef3d" + } + }, + { + "identity" : "sdwebimage", + "kind" : "remoteSourceControl", + "location" : "https://github.com/SDWebImage/SDWebImage", + "state" : { + "revision" : "2de3a496eaf6df9a1312862adcfd54acd73c39c0", + "version" : "5.21.7" + } + }, + { + "identity" : "swiftygif", + "kind" : "remoteSourceControl", + "location" : "https://github.com/kirualex/SwiftyGif.git", + "state" : { + "revision" : "4430cbc148baa3907651d40562d96325426f409a", + "version" : "5.4.5" + } + }, + { + "identity" : "tocropviewcontroller", + "kind" : "remoteSourceControl", + "location" : "https://github.com/TimOliver/TOCropViewController", + "state" : { + "revision" : "d4a6d8100f4b886fdbc8ae399bf144ff3e9afb7e", + "version" : "2.8.0" + } + } + ], + "version" : 2 +} diff --git a/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme index 9c12df59c..5db441f58 100644 --- a/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme +++ b/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme @@ -5,6 +5,24 @@ + + + + + + + + + + =3.11.0 <4.0.0" - flutter: ">=3.41.0" + dart: ">=3.12.0 <4.0.0" + flutter: ">=3.44.0" diff --git a/pubspec.yaml b/pubspec.yaml index 1d7cf8694..43af64ec8 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -5,7 +5,7 @@ version: 1.0.1409+1409 environment: sdk: ">=3.11.0" - flutter: ">=3.41.0" + flutter: ">=3.44.0" dependencies: flutter: From 272c40228da895a3b590694ef79114d3bd11eca0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?lollipopkit=F0=9F=8F=B3=EF=B8=8F=E2=80=8D=E2=9A=A7?= =?UTF-8?q?=EF=B8=8F?= <10864310+lollipopkit@users.noreply.github.com> Date: Tue, 19 May 2026 18:57:48 +0800 Subject: [PATCH 3/8] chore: use forked editor dependencies --- lib/data/ssh/persistent_shell.dart | 4 ++-- packages/fl_lib | 2 +- pubspec.lock | 20 +++++++++++--------- pubspec.yaml | 9 ++++++++- 4 files changed, 22 insertions(+), 13 deletions(-) diff --git a/lib/data/ssh/persistent_shell.dart b/lib/data/ssh/persistent_shell.dart index 8b19e5b75..ad486ebc9 100644 --- a/lib/data/ssh/persistent_shell.dart +++ b/lib/data/ssh/persistent_shell.dart @@ -163,7 +163,7 @@ final class PersistentShell { _stdoutSub = session.stdout .cast>() - .transform(const Utf8Decoder(allowMalformed: true)) + .transform(const Utf8Decoder(_allowMalformed: true)) .listen( _handleStdout, onError: _handleStreamError, @@ -172,7 +172,7 @@ final class PersistentShell { _stderrSub = session.stderr .cast>() - .transform(const Utf8Decoder(allowMalformed: true)) + .transform(const Utf8Decoder(_allowMalformed: true)) .listen( _handleStderr, onError: _handleStreamError, diff --git a/packages/fl_lib b/packages/fl_lib index 27b3d16f9..87ac005b5 160000 --- a/packages/fl_lib +++ b/packages/fl_lib @@ -1 +1 @@ -Subproject commit 27b3d16f92a958412a87e55c5362c7628d2f8c5d +Subproject commit 87ac005b5834d9c909ef56bd3324493ecfa6ad6a diff --git a/pubspec.lock b/pubspec.lock index 7847e9868..b0fb42476 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -723,12 +723,13 @@ packages: source: hosted version: "2.2.0" icons_plus: - dependency: transitive + dependency: "direct main" description: - name: icons_plus - sha256: "8e2f601b8605d45dd55b106a0da084a1809125077a49574ca22e8bcd5b6e86f0" - url: "https://pub.dev" - source: hosted + path: "." + ref: main + resolved-ref: "42670d29c8c1cffb7203dd110e0009ba98709667" + url: "https://github.com/lollipopkit/icons_plus" + source: git version: "5.0.0" image: dependency: transitive @@ -1212,10 +1213,11 @@ packages: re_editor: dependency: "direct main" description: - name: re_editor - sha256: dd4e6ca7350a8fa0cda4e425b82a0c3c010f0f6b3f618c74223e05b8129ab629 - url: "https://pub.dev" - source: hosted + path: "." + ref: main + resolved-ref: d5d70020da74082d182301a49e2bb87d30f0ab66 + url: "https://github.com/lollipopkit/re-editor" + source: git version: "0.8.0" re_highlight: dependency: transitive diff --git a/pubspec.yaml b/pubspec.yaml index 43af64ec8..035fc47f5 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -30,7 +30,10 @@ dependencies: hive_ce_flutter: ^2.3.1 intl: ^0.20.2 json_annotation: ^4.9.0 - re_editor: ^0.8.0 + re_editor: + git: + url: https://github.com/lollipopkit/re-editor + ref: main responsive_framework: ^1.5.1 riverpod_annotation: ^4.0.2 shared_preferences: ^2.1.1 @@ -43,6 +46,10 @@ dependencies: path: packages/dartssh2 circle_chart: path: packages/circle_chart + icons_plus: + git: + url: https://github.com/lollipopkit/icons_plus + ref: main xterm: path: packages/xterm computer: From bc8c0502c313e8a2f166099c0db1e688993ec27c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?lollipopkit=F0=9F=8F=B3=EF=B8=8F=E2=80=8D=E2=9A=A7?= =?UTF-8?q?=EF=B8=8F?= <10864310+lollipopkit@users.noreply.github.com> Date: Fri, 22 May 2026 14:08:23 +0800 Subject: [PATCH 4/8] fix: update UTF-8 decoder parameter --- lib/data/ssh/persistent_shell.dart | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/data/ssh/persistent_shell.dart b/lib/data/ssh/persistent_shell.dart index ad486ebc9..8b19e5b75 100644 --- a/lib/data/ssh/persistent_shell.dart +++ b/lib/data/ssh/persistent_shell.dart @@ -163,7 +163,7 @@ final class PersistentShell { _stdoutSub = session.stdout .cast>() - .transform(const Utf8Decoder(_allowMalformed: true)) + .transform(const Utf8Decoder(allowMalformed: true)) .listen( _handleStdout, onError: _handleStreamError, @@ -172,7 +172,7 @@ final class PersistentShell { _stderrSub = session.stderr .cast>() - .transform(const Utf8Decoder(_allowMalformed: true)) + .transform(const Utf8Decoder(allowMalformed: true)) .listen( _handleStderr, onError: _handleStreamError, From 967738212c84ce2ae0052e3c215068dbb2b36db5 Mon Sep 17 00:00:00 2001 From: lollipopkit <10864310+lollipopkit@users.noreply.github.com> Date: Fri, 5 Jun 2026 16:24:20 +0800 Subject: [PATCH 5/8] fix: flutter 3.44.1 --- ios/Runner.xcodeproj/project.pbxproj | 1 + packages/fl_lib | 2 +- pubspec.lock | 72 +++++++++++++--------------- 3 files changed, 34 insertions(+), 41 deletions(-) diff --git a/ios/Runner.xcodeproj/project.pbxproj b/ios/Runner.xcodeproj/project.pbxproj index 3dae686bb..0997b4647 100644 --- a/ios/Runner.xcodeproj/project.pbxproj +++ b/ios/Runner.xcodeproj/project.pbxproj @@ -1237,6 +1237,7 @@ /* Begin XCSwiftPackageProductDependency section */ 78A3181F2AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage */ = { isa = XCSwiftPackageProductDependency; + package = 781AD8BC2B33823900A9FFBB /* XCLocalSwiftPackageReference "Flutter/ephemeral/Packages/FlutterGeneratedPluginSwiftPackage" */; productName = FlutterGeneratedPluginSwiftPackage; }; /* End XCSwiftPackageProductDependency section */ diff --git a/packages/fl_lib b/packages/fl_lib index 87ac005b5..654b1f1eb 160000 --- a/packages/fl_lib +++ b/packages/fl_lib @@ -1 +1 @@ -Subproject commit 87ac005b5834d9c909ef56bd3324493ecfa6ad6a +Subproject commit 654b1f1eb5f06154c45905351dc092fb23f87082 diff --git a/pubspec.lock b/pubspec.lock index b0fb42476..c23e6d085 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -220,10 +220,10 @@ packages: dependency: transitive description: name: code_assets - sha256: "83ccdaa064c980b5596c35dd64a8d3ecc68620174ab9b90b6343b753aa721687" + sha256: bf394f466ba9205f1812a0433b392d6af280f155f56651eda7c18cc32ed493b8 url: "https://pub.dev" source: hosted - version: "1.0.0" + version: "1.2.1" code_builder: dependency: transitive description: @@ -308,10 +308,10 @@ packages: dependency: transitive description: name: dbus - sha256: d0c98dcd4f5169878b6cf8f6e0a52403a9dff371a3e2f019697accbf6f44a270 + sha256: "0ce9b0a839e6dee59a37a623d2fc26a35bbbe6404213e419b0d6411023d62645" url: "https://pub.dev" source: hosted - version: "0.7.12" + version: "0.7.14" dio: dependency: "direct main" description: @@ -500,18 +500,18 @@ packages: dependency: "direct dev" description: name: flutter_native_splash - sha256: "4fb9f4113350d3a80841ce05ebf1976a36de622af7d19aca0ca9a9911c7ff002" + sha256: "9db4b80b044e9af17cc4b1272137fc7ace0054d879ef8210a76adc34aaf4cdff" url: "https://pub.dev" source: hosted - version: "2.4.7" + version: "2.4.8" flutter_plugin_android_lifecycle: dependency: transitive description: name: flutter_plugin_android_lifecycle - sha256: "38d1c268de9097ff59cf0e844ac38759fc78f76836d37edad06fa21e182055a0" + sha256: "3854fe5e3bff0b113c658f260b90c95dea17c92db0f2addeac2e343dd9969785" url: "https://pub.dev" source: hosted - version: "2.0.34" + version: "2.0.35" flutter_riverpod: dependency: "direct main" description: @@ -524,26 +524,26 @@ packages: dependency: transitive description: name: flutter_secure_storage - sha256: "6848263f9744072d0977347c383fb8b57d9780319a6bf5238b5a2866a029de62" + sha256: "7686b1d6a29985dcbb808c59518226e603e3bfa7c0ddfd1a0d00e4cda77c868e" url: "https://pub.dev" source: hosted - version: "10.2.0" + version: "10.3.1" flutter_secure_storage_darwin: dependency: transitive description: name: flutter_secure_storage_darwin - sha256: "67cd1ff671add31dc13e45194398187a04bb63804b37fa47866afae296d73fcb" + sha256: "82329fa5cdf343773b1b6897dea959105a29f092454259edff92f9f6637e8149" url: "https://pub.dev" source: hosted - version: "0.3.1" + version: "0.3.2" flutter_secure_storage_linux: dependency: transitive description: name: flutter_secure_storage_linux - sha256: "2b5c76dce569ab752d55a1cee6a2242bcc11fdba927078fb88c503f150767cda" + sha256: a5f35ddab43cf5c8215d2feb4ce1957851f28c5c37e6f04335066a0602087bf5 url: "https://pub.dev" source: hosted - version: "3.0.0" + version: "3.0.1" flutter_secure_storage_platform_interface: dependency: transitive description: @@ -670,10 +670,10 @@ packages: dependency: transitive description: name: hooks - sha256: "025f060e86d2d4c3c47b56e33caf7f93bf9283340f26d23424ebcfccf34f621e" + sha256: "9a62a50b50b769a737bc0a8ff381f333529df3ab746b2f6b02e83760231455ba" url: "https://pub.dev" source: hosted - version: "1.0.3" + version: "2.0.2" html: dependency: transitive description: @@ -863,10 +863,10 @@ packages: dependency: transitive description: name: local_auth_android - sha256: b201c006fa769c23386f89aa6837ec0eb8179fcfb212eadcf87b422b3f9a6a78 + sha256: fdb936d59ab945c7af297defd67bd1ed87b11b6db1bc16d01e94677a8f1c38ec url: "https://pub.dev" source: hosted - version: "2.0.8" + version: "2.0.9" local_auth_darwin: dependency: transitive description: @@ -959,18 +959,10 @@ packages: dependency: transitive description: name: multi_split_view - sha256: "06f5126a65d3010ce0a9d5c003e793041fe99377b23e3534bb05059f79a580e9" + sha256: "76f6d593bce29e36ec52d8eff8849ac5a0e5b28648ebf38d8bbc158155b109d3" url: "https://pub.dev" source: hosted - version: "3.6.1" - native_toolchain_c: - dependency: transitive - description: - name: native_toolchain_c - sha256: "6ba77bb18063eebe9de401f5e6437e95e1438af0a87a3a39084fbd37c90df572" - url: "https://pub.dev" - source: hosted - version: "0.17.6" + version: "3.6.2" nested: dependency: transitive description: @@ -991,10 +983,10 @@ packages: dependency: transitive description: name: objective_c - sha256: "100a1c87616ab6ed41ec263b083c0ef3261ee6cd1dc3b0f35f8ddfa4f996fe52" + sha256: "6cb691c686fa2838c6deb34980d426145c2a5d537491cb83d463c33cdbc726ed" url: "https://pub.dev" source: hosted - version: "9.3.0" + version: "9.4.1" package_config: dependency: transitive description: @@ -1343,10 +1335,10 @@ packages: dependency: transitive description: name: shared_preferences_android - sha256: e8d4762b1e2e8578fc4d0fd548cebf24afd24f49719c08974df92834565e2c53 + sha256: a2c49fc1fed7140cadd892d765bd47edbe4ac0b9c7e7e3c493dcb58126f99cf0 url: "https://pub.dev" source: hosted - version: "2.4.23" + version: "2.4.25" shared_preferences_foundation: dependency: transitive description: @@ -1572,10 +1564,10 @@ packages: dependency: transitive description: name: url_launcher_android - sha256: "3bb000251e55d4a209aa0e2e563309dc9bb2befea2295fd0cec1f51760aac572" + sha256: b413d49b73867ac08dd2f9890efd3cc11f2a0e577618d50843440a1fb3776c32 url: "https://pub.dev" source: hosted - version: "6.3.29" + version: "6.3.32" url_launcher_ios: dependency: transitive description: @@ -1636,10 +1628,10 @@ packages: dependency: transitive description: name: vector_graphics - sha256: "4d35a36400983c3457c289d4d553b5308f506ea84f7e51c7a564651b5525209a" + sha256: "2306c03da2ba81724afeb589c351ebbc0aa7d86005925be8f8735856dbe5e42d" url: "https://pub.dev" source: hosted - version: "1.2.1" + version: "1.2.2" vector_graphics_codec: dependency: transitive description: @@ -1652,10 +1644,10 @@ packages: dependency: transitive description: name: vector_graphics_compiler - sha256: "98e7e94de127b46a86ef46197fff84ff99f3d3b80a708390d717ad731efef598" + sha256: "7ee12e6dffe0fc8e755179d6d91b3b34f5924223fc104d85572ef9180d73d172" url: "https://pub.dev" source: hosted - version: "1.2.2" + version: "1.2.5" vector_math: dependency: transitive description: @@ -1692,10 +1684,10 @@ packages: dependency: transitive description: name: wakelock_plus_platform_interface - sha256: "14b2e5b9e35c2631e656913c47adecdd71633ae92896a27a64c8f1fcfabc21cc" + sha256: b13f99e992e7ae6a152e16c5559d3c07ff445b13330192662494e614ca3e7d7b url: "https://pub.dev" source: hosted - version: "1.5.0" + version: "1.5.1" watch_connectivity: dependency: "direct main" description: From 236f72b24809f429f6e0e54d2b29dd61b9dda202 Mon Sep 17 00:00:00 2001 From: lollipopkit <10864310+lollipopkit@users.noreply.github.com> Date: Fri, 5 Jun 2026 18:01:34 +0800 Subject: [PATCH 6/8] fix: action --- .github/workflows/analysis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/analysis.yml b/.github/workflows/analysis.yml index b0587af31..b78b97e41 100644 --- a/.github/workflows/analysis.yml +++ b/.github/workflows/analysis.yml @@ -24,7 +24,7 @@ jobs: - uses: subosito/flutter-action@v2 with: channel: 'stable' - flutter-version: '3.41.9' + # flutter-version: '3.44.1' - name: Install dependencies run: flutter pub get From 1d8e9b5a107032ff2ee0573c7987d92cff973a56 Mon Sep 17 00:00:00 2001 From: lollipopkit <10864310+lollipopkit@users.noreply.github.com> Date: Fri, 5 Jun 2026 19:52:23 +0800 Subject: [PATCH 7/8] fix: migrate iCloud storage and iOS lifecycle --- ios/Podfile.lock | 6 - ios/Runner.xcodeproj/project.pbxproj | 186 ++++++++---------- ios/Runner/AppDelegate.swift | 21 +- ios/Runner/Info-Debug.plist | 21 ++ ios/Runner/Info-Profile.plist | 21 ++ ios/Runner/Info-Release.plist | 21 ++ ios/Runner/Info.plist | 68 +++++++ lib/view/page/backup.dart | 8 +- lib/view/page/setting/entries/app.dart | 6 + lib/view/page/storage/local.dart | 6 + lib/view/page/storage/sftp.dart | 6 + macos/Flutter/GeneratedPluginRegistrant.swift | 4 +- macos/Podfile.lock | 69 ------- macos/Runner.xcodeproj/project.pbxproj | 22 +++ .../xcshareddata/xcschemes/Runner.xcscheme | 18 ++ packages/fl_lib | 2 +- pubspec.lock | 8 +- 17 files changed, 298 insertions(+), 195 deletions(-) create mode 100644 ios/Runner/Info.plist diff --git a/ios/Podfile.lock b/ios/Podfile.lock index 70ee38797..19a0c8619 100644 --- a/ios/Podfile.lock +++ b/ios/Podfile.lock @@ -1,21 +1,15 @@ PODS: - Flutter (1.0.0) - - icloud_storage (0.0.1): - - Flutter DEPENDENCIES: - Flutter (from `Flutter`) - - icloud_storage (from `.symlinks/plugins/icloud_storage/ios`) EXTERNAL SOURCES: Flutter: :path: Flutter - icloud_storage: - :path: ".symlinks/plugins/icloud_storage/ios" SPEC CHECKSUMS: Flutter: cabc95a1d2626b1b06e7179b784ebcf0c0cde467 - icloud_storage: e55639f0c0d7cb2b0ba9c0b3d5968ccca9cd9aa2 PODFILE CHECKSUM: 5a0fb6438066e44ab2c77bd223668d351b8d8461 diff --git a/ios/Runner.xcodeproj/project.pbxproj b/ios/Runner.xcodeproj/project.pbxproj index 0997b4647..463b94162 100644 --- a/ios/Runner.xcodeproj/project.pbxproj +++ b/ios/Runner.xcodeproj/project.pbxproj @@ -17,6 +17,7 @@ 7538AEC32BB83FAB002AB82A /* PrivacyInfo.xcprivacy in Resources */ = {isa = PBXBuildFile; fileRef = 7538AEC22BB83FAB002AB82A /* PrivacyInfo.xcprivacy */; }; 7538AEC52BB83FC8002AB82A /* PrivacyInfo.xcprivacy in Resources */ = {isa = PBXBuildFile; fileRef = 7538AEC42BB83FC8002AB82A /* PrivacyInfo.xcprivacy */; }; 7538AEC72BB83FD3002AB82A /* PrivacyInfo.xcprivacy in Resources */ = {isa = PBXBuildFile; fileRef = 7538AEC62BB83FD3002AB82A /* PrivacyInfo.xcprivacy */; }; + 78A318202AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage in Frameworks */ = {isa = PBXBuildFile; productRef = 78A3181F2AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage */; }; 9234EA956D1225D388A01660 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 278C1EB3935F9285537B0516 /* Pods_Runner.framework */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; @@ -40,9 +41,8 @@ E3AE8AEB2AB601DB000A6459 /* Utils.swift in Sources */ = {isa = PBXBuildFile; fileRef = E3AE8AE92AB601DB000A6459 /* Utils.swift */; }; E3AE8AEC2AB601DB000A6459 /* Utils.swift in Sources */ = {isa = PBXBuildFile; fileRef = E3AE8AE92AB601DB000A6459 /* Utils.swift */; }; E3DB67ED2A31FE200027B8CB /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = E3DB67EB2A31FE200027B8CB /* LaunchScreen.storyboard */; }; - F0A1B2C31A2B3C4D5E6F0005 /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = F0A1B2C31A2B3C4D5E6F0001 /* Localizable.strings */; }; - F0A1B2C31A2B3C4D5E6F1005 /* Localizable.strings (StatusWidget) in Resources */ = {isa = PBXBuildFile; fileRef = F0A1B2C31A2B3C4D5E6F1001 /* Localizable.strings */; }; - 78A318202AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage in Frameworks */ = {isa = PBXBuildFile; productRef = 78A3181F2AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage */; }; + F0A1B2C31A2B3C4D5E6F0005 /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = F0A1B2C31A2B3C4D5E6F0001 /* Localizable.strings */; }; + F0A1B2C31A2B3C4D5E6F1005 /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = F0A1B2C31A2B3C4D5E6F1001 /* Localizable.strings */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -112,6 +112,7 @@ 7538AEC22BB83FAB002AB82A /* PrivacyInfo.xcprivacy */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = PrivacyInfo.xcprivacy; sourceTree = ""; }; 7538AEC42BB83FC8002AB82A /* PrivacyInfo.xcprivacy */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = PrivacyInfo.xcprivacy; sourceTree = ""; }; 7538AEC62BB83FD3002AB82A /* PrivacyInfo.xcprivacy */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = PrivacyInfo.xcprivacy; sourceTree = ""; }; + 78E0A7A72DC9AD7400C4905E /* FlutterGeneratedPluginSwiftPackage */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = FlutterGeneratedPluginSwiftPackage; path = Flutter/ephemeral/Packages/FlutterGeneratedPluginSwiftPackage; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; @@ -167,27 +168,26 @@ E3D26BD22B9966EC00D83425 /* ja */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ja; path = ja.lproj/Main.strings; sourceTree = ""; }; E3D26BD32B9966EC00D83425 /* ja */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ja; path = ja.lproj/LaunchScreen.strings; sourceTree = ""; }; E3DB67EC2A31FE200027B8CB /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; - F0A1B2C31A2B3C4D5E6F0002 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/Localizable.strings; sourceTree = ""; }; - F0A1B2C31A2B3C4D5E6F0003 /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hans"; path = "zh-Hans.lproj/Localizable.strings"; sourceTree = ""; }; - F0A1B2C31A2B3C4D5E6F0004 /* zh-Hant */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hant"; path = "zh-Hant.lproj/Localizable.strings"; sourceTree = ""; }; - F0A1B2C31A2B3C4D5E6F0006 /* fr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fr; path = fr.lproj/Localizable.strings; sourceTree = ""; }; - F0A1B2C31A2B3C4D5E6F0007 /* ru */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ru; path = ru.lproj/Localizable.strings; sourceTree = ""; }; - F0A1B2C31A2B3C4D5E6F0008 /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = es.lproj/Localizable.strings; sourceTree = ""; }; - F0A1B2C31A2B3C4D5E6F0009 /* de */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = de; path = de.lproj/Localizable.strings; sourceTree = ""; }; - F0A1B2C31A2B3C4D5E6F000A /* pt-BR */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "pt-BR"; path = "pt-BR.lproj/Localizable.strings"; sourceTree = ""; }; - F0A1B2C31A2B3C4D5E6F000B /* id */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = id; path = id.lproj/Localizable.strings; sourceTree = ""; }; - F0A1B2C31A2B3C4D5E6F000C /* ja */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ja; path = ja.lproj/Localizable.strings; sourceTree = ""; }; - F0A1B2C31A2B3C4D5E6F1002 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/Localizable.strings; sourceTree = ""; }; - F0A1B2C31A2B3C4D5E6F1003 /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hans"; path = "zh-Hans.lproj/Localizable.strings"; sourceTree = ""; }; - F0A1B2C31A2B3C4D5E6F1004 /* zh-Hant */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hant"; path = "zh-Hant.lproj/Localizable.strings"; sourceTree = ""; }; - F0A1B2C31A2B3C4D5E6F1006 /* fr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fr; path = fr.lproj/Localizable.strings; sourceTree = ""; }; - F0A1B2C31A2B3C4D5E6F1007 /* ru */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ru; path = ru.lproj/Localizable.strings; sourceTree = ""; }; - F0A1B2C31A2B3C4D5E6F1008 /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = es.lproj/Localizable.strings; sourceTree = ""; }; - F0A1B2C31A2B3C4D5E6F1009 /* de */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = de; path = de.lproj/Localizable.strings; sourceTree = ""; }; - F0A1B2C31A2B3C4D5E6F100A /* pt-BR */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "pt-BR"; path = "pt-BR.lproj/Localizable.strings"; sourceTree = ""; }; - F0A1B2C31A2B3C4D5E6F100B /* id */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = id; path = id.lproj/Localizable.strings; sourceTree = ""; }; - F0A1B2C31A2B3C4D5E6F100C /* ja */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ja; path = ja.lproj/Localizable.strings; sourceTree = ""; }; - 78E0A7A72DC9AD7400C4905E /* FlutterGeneratedPluginSwiftPackage */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = FlutterGeneratedPluginSwiftPackage; path = Flutter/ephemeral/Packages/FlutterGeneratedPluginSwiftPackage; sourceTree = ""; }; + F0A1B2C31A2B3C4D5E6F0002 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/Localizable.strings; sourceTree = ""; }; + F0A1B2C31A2B3C4D5E6F0003 /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hans"; path = "zh-Hans.lproj/Localizable.strings"; sourceTree = ""; }; + F0A1B2C31A2B3C4D5E6F0004 /* zh-Hant */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hant"; path = "zh-Hant.lproj/Localizable.strings"; sourceTree = ""; }; + F0A1B2C31A2B3C4D5E6F0006 /* fr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fr; path = fr.lproj/Localizable.strings; sourceTree = ""; }; + F0A1B2C31A2B3C4D5E6F0007 /* ru */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ru; path = ru.lproj/Localizable.strings; sourceTree = ""; }; + F0A1B2C31A2B3C4D5E6F0008 /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = es.lproj/Localizable.strings; sourceTree = ""; }; + F0A1B2C31A2B3C4D5E6F0009 /* de */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = de; path = de.lproj/Localizable.strings; sourceTree = ""; }; + F0A1B2C31A2B3C4D5E6F000A /* pt-BR */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "pt-BR"; path = "pt-BR.lproj/Localizable.strings"; sourceTree = ""; }; + F0A1B2C31A2B3C4D5E6F000B /* id */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = id; path = id.lproj/Localizable.strings; sourceTree = ""; }; + F0A1B2C31A2B3C4D5E6F000C /* ja */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ja; path = ja.lproj/Localizable.strings; sourceTree = ""; }; + F0A1B2C31A2B3C4D5E6F1002 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/Localizable.strings; sourceTree = ""; }; + F0A1B2C31A2B3C4D5E6F1003 /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hans"; path = "zh-Hans.lproj/Localizable.strings"; sourceTree = ""; }; + F0A1B2C31A2B3C4D5E6F1004 /* zh-Hant */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hant"; path = "zh-Hant.lproj/Localizable.strings"; sourceTree = ""; }; + F0A1B2C31A2B3C4D5E6F1006 /* fr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fr; path = fr.lproj/Localizable.strings; sourceTree = ""; }; + F0A1B2C31A2B3C4D5E6F1007 /* ru */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ru; path = ru.lproj/Localizable.strings; sourceTree = ""; }; + F0A1B2C31A2B3C4D5E6F1008 /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = es.lproj/Localizable.strings; sourceTree = ""; }; + F0A1B2C31A2B3C4D5E6F1009 /* de */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = de; path = de.lproj/Localizable.strings; sourceTree = ""; }; + F0A1B2C31A2B3C4D5E6F100A /* pt-BR */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "pt-BR"; path = "pt-BR.lproj/Localizable.strings"; sourceTree = ""; }; + F0A1B2C31A2B3C4D5E6F100B /* id */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = id; path = id.lproj/Localizable.strings; sourceTree = ""; }; + F0A1B2C31A2B3C4D5E6F100C /* ja */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ja; path = ja.lproj/Localizable.strings; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -267,7 +267,7 @@ 97C146F01CF9000F007C117D /* Runner */ = { isa = PBXGroup; children = ( - F0A1B2C31A2B3C4D5E6F0001 /* Localizable.strings */, + F0A1B2C31A2B3C4D5E6F0001 /* Localizable.strings */, 7538AEC22BB83FAB002AB82A /* PrivacyInfo.xcprivacy */, E398BF6A29BDB34500FE4FD5 /* Runner.entitlements */, 97C146FA1CF9000F007C117D /* Main.storyboard */, @@ -300,7 +300,7 @@ E33A3E3A2A626DCE009744AB /* StatusWidget */ = { isa = PBXGroup; children = ( - F0A1B2C31A2B3C4D5E6F1001 /* Localizable.strings */, + F0A1B2C31A2B3C4D5E6F1001 /* Localizable.strings */, 7538AEC42BB83FC8002AB82A /* PrivacyInfo.xcprivacy */, E33A3E3B2A626DCE009744AB /* StatusWidgetBundle.swift */, 4A2DCD6D2E4B128100CF68B7 /* TerminalLiveActivity.swift */, @@ -329,9 +329,6 @@ /* Begin PBXNativeTarget section */ 97C146ED1CF9000F007C117D /* Runner */ = { - packageProductDependencies = ( - 78A3181F2AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage */, - ); isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( @@ -341,7 +338,6 @@ 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, - AA0A1FF2F3246F84EB0D91F2 /* [CP] Embed Pods Frameworks */, E33A3E4A2A626DD0009744AB /* Embed Foundation Extensions */, E39515D52AB5AD64003602C1 /* Embed Watch Content */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, @@ -354,6 +350,9 @@ E39515D32AB5AD64003602C1 /* PBXTargetDependency */, ); name = Runner; + packageProductDependencies = ( + 78A3181F2AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage */, + ); productName = Runner; productReference = 97C146EE1CF9000F007C117D /* Runner.app */; productType = "com.apple.product-type.application"; @@ -396,9 +395,6 @@ /* Begin PBXProject section */ 97C146E61CF9000F007C117D /* Project object */ = { - packageReferences = ( - 781AD8BC2B33823900A9FFBB /* XCLocalSwiftPackageReference "Flutter/ephemeral/Packages/FlutterGeneratedPluginSwiftPackage" */, - ); isa = PBXProject; attributes = { LastSwiftUpdateCheck = 1430; @@ -435,6 +431,9 @@ ja, ); mainGroup = 97C146E51CF9000F007C117D; + packageReferences = ( + 781AD8BC2B33823900A9FFBB /* XCLocalSwiftPackageReference "FlutterGeneratedPluginSwiftPackage" */, + ); productRefGroup = 97C146EF1CF9000F007C117D /* Products */; projectDirPath = ""; projectRoot = ""; @@ -459,7 +458,7 @@ E39A76B02AB9A2F70067C641 /* Info-Profile.plist in Resources */, 7538AEC32BB83FAB002AB82A /* PrivacyInfo.xcprivacy in Resources */, 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */, - F0A1B2C31A2B3C4D5E6F0005 /* Localizable.strings in Resources */, + F0A1B2C31A2B3C4D5E6F0005 /* Localizable.strings in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -468,7 +467,7 @@ buildActionMask = 2147483647; files = ( 7538AEC52BB83FC8002AB82A /* PrivacyInfo.xcprivacy in Resources */, - F0A1B2C31A2B3C4D5E6F1005 /* Localizable.strings (StatusWidget) in Resources */, + F0A1B2C31A2B3C4D5E6F1005 /* Localizable.strings in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -515,58 +514,41 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; - F3A15C782F6E1D8B00A1C001 /* Generate Missing Framework dSYMs */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - ); - name = "Generate Missing Framework dSYMs"; - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "/bin/sh \"${PROJECT_DIR}/scripts/generate_missing_framework_dsyms.sh\"\n"; - }; - AA0A1FF2F3246F84EB0D91F2 /* [CP] Embed Pods Frameworks */ = { + D539DA9CBCC9FFF884ED67C9 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "[CP] Embed Pods Frameworks"; + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - D539DA9CBCC9FFF884ED67C9 /* [CP] Check Pods Manifest.lock */ = { + F3A15C782F6E1D8B00A1C001 /* Generate Missing Framework dSYMs */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); - inputFileListPaths = ( - ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( ); + name = "Generate Missing Framework dSYMs"; outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; + shellScript = "/bin/sh \"${PROJECT_DIR}/scripts/generate_missing_framework_dsyms.sh\"\n"; }; /* End PBXShellScriptBuildPhase section */ @@ -677,40 +659,40 @@ name = LaunchScreen.storyboard; sourceTree = ""; }; - F0A1B2C31A2B3C4D5E6F0001 /* Localizable.strings */ = { - isa = PBXVariantGroup; - children = ( - F0A1B2C31A2B3C4D5E6F0002 /* en */, - F0A1B2C31A2B3C4D5E6F0003 /* zh-Hans */, - F0A1B2C31A2B3C4D5E6F0004 /* zh-Hant */, - F0A1B2C31A2B3C4D5E6F0006 /* fr */, - F0A1B2C31A2B3C4D5E6F0007 /* ru */, - F0A1B2C31A2B3C4D5E6F0008 /* es */, - F0A1B2C31A2B3C4D5E6F0009 /* de */, - F0A1B2C31A2B3C4D5E6F000A /* pt-BR */, - F0A1B2C31A2B3C4D5E6F000B /* id */, - F0A1B2C31A2B3C4D5E6F000C /* ja */, - ); - name = Localizable.strings; - sourceTree = ""; - }; - F0A1B2C31A2B3C4D5E6F1001 /* Localizable.strings */ = { - isa = PBXVariantGroup; - children = ( - F0A1B2C31A2B3C4D5E6F1002 /* en */, - F0A1B2C31A2B3C4D5E6F1003 /* zh-Hans */, - F0A1B2C31A2B3C4D5E6F1004 /* zh-Hant */, - F0A1B2C31A2B3C4D5E6F1006 /* fr */, - F0A1B2C31A2B3C4D5E6F1007 /* ru */, - F0A1B2C31A2B3C4D5E6F1008 /* es */, - F0A1B2C31A2B3C4D5E6F1009 /* de */, - F0A1B2C31A2B3C4D5E6F100A /* pt-BR */, - F0A1B2C31A2B3C4D5E6F100B /* id */, - F0A1B2C31A2B3C4D5E6F100C /* ja */, - ); - name = Localizable.strings; - sourceTree = ""; - }; + F0A1B2C31A2B3C4D5E6F0001 /* Localizable.strings */ = { + isa = PBXVariantGroup; + children = ( + F0A1B2C31A2B3C4D5E6F0002 /* en */, + F0A1B2C31A2B3C4D5E6F0003 /* zh-Hans */, + F0A1B2C31A2B3C4D5E6F0004 /* zh-Hant */, + F0A1B2C31A2B3C4D5E6F0006 /* fr */, + F0A1B2C31A2B3C4D5E6F0007 /* ru */, + F0A1B2C31A2B3C4D5E6F0008 /* es */, + F0A1B2C31A2B3C4D5E6F0009 /* de */, + F0A1B2C31A2B3C4D5E6F000A /* pt-BR */, + F0A1B2C31A2B3C4D5E6F000B /* id */, + F0A1B2C31A2B3C4D5E6F000C /* ja */, + ); + name = Localizable.strings; + sourceTree = ""; + }; + F0A1B2C31A2B3C4D5E6F1001 /* Localizable.strings */ = { + isa = PBXVariantGroup; + children = ( + F0A1B2C31A2B3C4D5E6F1002 /* en */, + F0A1B2C31A2B3C4D5E6F1003 /* zh-Hans */, + F0A1B2C31A2B3C4D5E6F1004 /* zh-Hant */, + F0A1B2C31A2B3C4D5E6F1006 /* fr */, + F0A1B2C31A2B3C4D5E6F1007 /* ru */, + F0A1B2C31A2B3C4D5E6F1008 /* es */, + F0A1B2C31A2B3C4D5E6F1009 /* de */, + F0A1B2C31A2B3C4D5E6F100A /* pt-BR */, + F0A1B2C31A2B3C4D5E6F100B /* id */, + F0A1B2C31A2B3C4D5E6F100C /* ja */, + ); + name = Localizable.strings; + sourceTree = ""; + }; /* End PBXVariantGroup section */ /* Begin XCBuildConfiguration section */ @@ -1228,16 +1210,18 @@ defaultConfigurationName = Release; }; /* End XCConfigurationList section */ + /* Begin XCLocalSwiftPackageReference section */ - 781AD8BC2B33823900A9FFBB /* XCLocalSwiftPackageReference "Flutter/ephemeral/Packages/FlutterGeneratedPluginSwiftPackage" */ = { + 781AD8BC2B33823900A9FFBB /* XCLocalSwiftPackageReference "FlutterGeneratedPluginSwiftPackage" */ = { isa = XCLocalSwiftPackageReference; relativePath = Flutter/ephemeral/Packages/FlutterGeneratedPluginSwiftPackage; }; /* End XCLocalSwiftPackageReference section */ + /* Begin XCSwiftPackageProductDependency section */ 78A3181F2AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage */ = { isa = XCSwiftPackageProductDependency; - package = 781AD8BC2B33823900A9FFBB /* XCLocalSwiftPackageReference "Flutter/ephemeral/Packages/FlutterGeneratedPluginSwiftPackage" */; + package = 781AD8BC2B33823900A9FFBB /* XCLocalSwiftPackageReference "FlutterGeneratedPluginSwiftPackage" */; productName = FlutterGeneratedPluginSwiftPackage; }; /* End XCSwiftPackageProductDependency section */ diff --git a/ios/Runner/AppDelegate.swift b/ios/Runner/AppDelegate.swift index 86dce037c..44d0bb5bc 100644 --- a/ios/Runner/AppDelegate.swift +++ b/ios/Runner/AppDelegate.swift @@ -4,16 +4,21 @@ import Flutter import ActivityKit @main -@objc class AppDelegate: FlutterAppDelegate { +@objc class AppDelegate: FlutterAppDelegate, FlutterImplicitEngineDelegate { override func application( _ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? ) -> Bool { - GeneratedPluginRegistrant.register(with: self) - - let controller : FlutterViewController = window?.rootViewController as! FlutterViewController - // Home widget channel (legacy) - let homeWidgetChannel = FlutterMethodChannel(name: "tech.lolli.toolbox/home_widget", binaryMessenger: controller.binaryMessenger) + return super.application(application, didFinishLaunchingWithOptions: launchOptions) + } + + func didInitializeImplicitFlutterEngine(_ engineBridge: FlutterImplicitEngineBridge) { + GeneratedPluginRegistrant.register(with: engineBridge.pluginRegistry) + setupMethodChannels(binaryMessenger: engineBridge.applicationRegistrar.messenger()) + } + + private func setupMethodChannels(binaryMessenger: FlutterBinaryMessenger) { + let homeWidgetChannel = FlutterMethodChannel(name: "tech.lolli.toolbox/home_widget", binaryMessenger: binaryMessenger) homeWidgetChannel.setMethodCallHandler({(call: FlutterMethodCall, result: @escaping FlutterResult) -> Void in if call.method == "update" { if #available(iOS 14.0, *) { @@ -22,8 +27,7 @@ import ActivityKit } }) - // Main channel for cross-platform calls (incl. Live Activities) - let mainChannel = FlutterMethodChannel(name: "tech.lolli.toolbox/main_chan", binaryMessenger: controller.binaryMessenger) + let mainChannel = FlutterMethodChannel(name: "tech.lolli.toolbox/main_chan", binaryMessenger: binaryMessenger) mainChannel.setMethodCallHandler({(call: FlutterMethodCall, result: @escaping FlutterResult) -> Void in switch call.method { case "updateHomeWidget": @@ -54,7 +58,6 @@ import ActivityKit result(FlutterMethodNotImplemented) } }) - return super.application(application, didFinishLaunchingWithOptions: launchOptions) } override func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any] = [:]) -> Bool { diff --git a/ios/Runner/Info-Debug.plist b/ios/Runner/Info-Debug.plist index 4e589262a..2f46b7867 100644 --- a/ios/Runner/Info-Debug.plist +++ b/ios/Runner/Info-Debug.plist @@ -45,6 +45,27 @@ UIApplicationSupportsIndirectInputEvents + UIApplicationSceneManifest + + UIApplicationSupportsMultipleScenes + + UISceneConfigurations + + UIWindowSceneSessionRoleApplication + + + UISceneClassName + UIWindowScene + UISceneDelegateClassName + FlutterSceneDelegate + UISceneConfigurationName + flutter + UISceneStoryboardFile + Main + + + + UIBackgroundModes fetch diff --git a/ios/Runner/Info-Profile.plist b/ios/Runner/Info-Profile.plist index a1fabb700..d149d701b 100644 --- a/ios/Runner/Info-Profile.plist +++ b/ios/Runner/Info-Profile.plist @@ -37,6 +37,27 @@ UIApplicationSupportsIndirectInputEvents + UIApplicationSceneManifest + + UIApplicationSupportsMultipleScenes + + UISceneConfigurations + + UIWindowSceneSessionRoleApplication + + + UISceneClassName + UIWindowScene + UISceneDelegateClassName + FlutterSceneDelegate + UISceneConfigurationName + flutter + UISceneStoryboardFile + Main + + + + UIBackgroundModes fetch diff --git a/ios/Runner/Info-Release.plist b/ios/Runner/Info-Release.plist index c37501af9..ba6b3f244 100644 --- a/ios/Runner/Info-Release.plist +++ b/ios/Runner/Info-Release.plist @@ -37,6 +37,27 @@ UIApplicationSupportsIndirectInputEvents + UIApplicationSceneManifest + + UIApplicationSupportsMultipleScenes + + UISceneConfigurations + + UIWindowSceneSessionRoleApplication + + + UISceneClassName + UIWindowScene + UISceneDelegateClassName + FlutterSceneDelegate + UISceneConfigurationName + flutter + UISceneStoryboardFile + Main + + + + UIBackgroundModes fetch diff --git a/ios/Runner/Info.plist b/ios/Runner/Info.plist new file mode 100644 index 000000000..e34a6d48c --- /dev/null +++ b/ios/Runner/Info.plist @@ -0,0 +1,68 @@ + + + + + CADisableMinimumFrameDurationOnPhone + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + ServerBox + CFBundlePackageType + APPL + CFBundleShortVersionString + $(MARKETING_VERSION) + CFBundleSignature + ???? + CFBundleVersion + $(CURRENT_PROJECT_VERSION) + LSRequiresIPhoneOS + + UIApplicationSceneManifest + + UIApplicationSupportsMultipleScenes + + UISceneConfigurations + + UIWindowSceneSessionRoleApplication + + + UISceneClassName + UIWindowScene + UISceneDelegateClassName + FlutterSceneDelegate + UISceneConfigurationName + flutter + UISceneStoryboardFile + Main + + + + + UIApplicationSupportsIndirectInputEvents + + UILaunchStoryboardName + LaunchScreen + UIMainStoryboardFile + Main + UISupportedInterfaceOrientations + + UIInterfaceOrientationPortrait + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + UISupportedInterfaceOrientations~ipad + + UIInterfaceOrientationPortrait + UIInterfaceOrientationPortraitUpsideDown + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + + diff --git a/lib/view/page/backup.dart b/lib/view/page/backup.dart index 8a707211a..4fde5daba 100644 --- a/lib/view/page/backup.dart +++ b/lib/view/page/backup.dart @@ -562,17 +562,19 @@ extension on _BackupPageState { if (!isICloudSupported) return null; final files = await icloud.list(); - final matches = files.where((file) => file.relativePath == Paths.bakName); + final matches = files.where( + (file) => file.relativePath == Paths.bakName && file.contentChangeDate != null, + ); if (matches.isEmpty) return null; final file = matches.reduce( (latest, current) => - current.contentChangeDate.isAfter(latest.contentChangeDate) + current.contentChangeDate!.isAfter(latest.contentChangeDate!) ? current : latest, ); return _ICloudBackupStatus( - lastModified: file.contentChangeDate, + lastModified: file.contentChangeDate!, isUploading: file.isUploading, isUploaded: file.isUploaded, hasConflict: file.hasUnresolvedConflicts, diff --git a/lib/view/page/setting/entries/app.dart b/lib/view/page/setting/entries/app.dart index 295400a0b..69db87ac2 100644 --- a/lib/view/page/setting/entries/app.dart +++ b/lib/view/page/setting/entries/app.dart @@ -497,6 +497,12 @@ extension _App on _AppSettingsPageState { closeAfterSave: _setting.closeAfterSave.fetch(), softWrap: _setting.editorSoftWrap.fetch(), enableHighlight: _setting.editorHighlight.fetch(), + lightTheme: HighlightTheme.fromThemeMapKey( + _setting.editorTheme.fetch(), + ), + darkTheme: HighlightTheme.fromThemeMapKey( + _setting.editorDarkTheme.fetch(), + ), fontFamily: editorFont.isEmpty ? null : editorFont, ), ); diff --git a/lib/view/page/storage/local.dart b/lib/view/page/storage/local.dart index c8edc0588..dffd1ceb9 100644 --- a/lib/view/page/storage/local.dart +++ b/lib/view/page/storage/local.dart @@ -393,6 +393,12 @@ extension _OnTapFile on _LocalFilePageState { closeAfterSave: Stores.setting.closeAfterSave.fetch(), softWrap: Stores.setting.editorSoftWrap.fetch(), enableHighlight: Stores.setting.editorHighlight.fetch(), + lightTheme: HighlightTheme.fromThemeMapKey( + Stores.setting.editorTheme.fetch(), + ), + darkTheme: HighlightTheme.fromThemeMapKey( + Stores.setting.editorDarkTheme.fetch(), + ), fontFamily: () { final font = Stores.setting.editorFontFamily.fetch(); return font.isEmpty ? null : font; diff --git a/lib/view/page/storage/sftp.dart b/lib/view/page/storage/sftp.dart index 4a1942a98..8a7a5a1d4 100644 --- a/lib/view/page/storage/sftp.dart +++ b/lib/view/page/storage/sftp.dart @@ -682,6 +682,12 @@ extension _Actions on _SftpPageState { closeAfterSave: Stores.setting.closeAfterSave.fetch(), softWrap: Stores.setting.editorSoftWrap.fetch(), enableHighlight: Stores.setting.editorHighlight.fetch(), + lightTheme: HighlightTheme.fromThemeMapKey( + Stores.setting.editorTheme.fetch(), + ), + darkTheme: HighlightTheme.fromThemeMapKey( + Stores.setting.editorDarkTheme.fetch(), + ), fontFamily: () { final font = Stores.setting.editorFontFamily.fetch(); return font.isEmpty ? null : font; diff --git a/macos/Flutter/GeneratedPluginRegistrant.swift b/macos/Flutter/GeneratedPluginRegistrant.swift index b9a9f0a55..bdbdb4dfd 100644 --- a/macos/Flutter/GeneratedPluginRegistrant.swift +++ b/macos/Flutter/GeneratedPluginRegistrant.swift @@ -8,7 +8,7 @@ import Foundation import dynamic_color import file_picker import flutter_secure_storage_darwin -import icloud_storage +import icloud_storage_plus import local_auth_darwin import package_info_plus import screen_retriever_macos @@ -22,7 +22,7 @@ func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) { DynamicColorPlugin.register(with: registry.registrar(forPlugin: "DynamicColorPlugin")) FilePickerPlugin.register(with: registry.registrar(forPlugin: "FilePickerPlugin")) FlutterSecureStorageDarwinPlugin.register(with: registry.registrar(forPlugin: "FlutterSecureStorageDarwinPlugin")) - IcloudStoragePlugin.register(with: registry.registrar(forPlugin: "IcloudStoragePlugin")) + ICloudStoragePlugin.register(with: registry.registrar(forPlugin: "ICloudStoragePlugin")) LocalAuthPlugin.register(with: registry.registrar(forPlugin: "LocalAuthPlugin")) FPPPackageInfoPlusPlugin.register(with: registry.registrar(forPlugin: "FPPPackageInfoPlusPlugin")) ScreenRetrieverMacosPlugin.register(with: registry.registrar(forPlugin: "ScreenRetrieverMacosPlugin")) diff --git a/macos/Podfile.lock b/macos/Podfile.lock index 1511e2f55..a1edde1c9 100644 --- a/macos/Podfile.lock +++ b/macos/Podfile.lock @@ -1,90 +1,21 @@ PODS: - - dynamic_color (0.0.2): - - FlutterMacOS - - file_picker (0.0.1): - - FlutterMacOS - - flutter_secure_storage_darwin (10.0.0): - - Flutter - - FlutterMacOS - FlutterMacOS (1.0.0) - - icloud_storage (0.0.1): - - FlutterMacOS - - local_auth_darwin (0.0.1): - - Flutter - - FlutterMacOS - - package_info_plus (0.0.1): - - FlutterMacOS - screen_retriever_macos (0.0.1): - FlutterMacOS - - share_plus (0.0.1): - - FlutterMacOS - - shared_preferences_foundation (0.0.1): - - Flutter - - FlutterMacOS - - url_launcher_macos (0.0.1): - - FlutterMacOS - - wakelock_plus (0.0.1): - - FlutterMacOS - - window_manager (0.5.0): - - FlutterMacOS DEPENDENCIES: - - dynamic_color (from `Flutter/ephemeral/.symlinks/plugins/dynamic_color/macos`) - - file_picker (from `Flutter/ephemeral/.symlinks/plugins/file_picker/macos`) - - flutter_secure_storage_darwin (from `Flutter/ephemeral/.symlinks/plugins/flutter_secure_storage_darwin/darwin`) - FlutterMacOS (from `Flutter/ephemeral`) - - icloud_storage (from `Flutter/ephemeral/.symlinks/plugins/icloud_storage/macos`) - - local_auth_darwin (from `Flutter/ephemeral/.symlinks/plugins/local_auth_darwin/darwin`) - - package_info_plus (from `Flutter/ephemeral/.symlinks/plugins/package_info_plus/macos`) - screen_retriever_macos (from `Flutter/ephemeral/.symlinks/plugins/screen_retriever_macos/macos`) - - share_plus (from `Flutter/ephemeral/.symlinks/plugins/share_plus/macos`) - - shared_preferences_foundation (from `Flutter/ephemeral/.symlinks/plugins/shared_preferences_foundation/darwin`) - - url_launcher_macos (from `Flutter/ephemeral/.symlinks/plugins/url_launcher_macos/macos`) - - wakelock_plus (from `Flutter/ephemeral/.symlinks/plugins/wakelock_plus/macos`) - - window_manager (from `Flutter/ephemeral/.symlinks/plugins/window_manager/macos`) EXTERNAL SOURCES: - dynamic_color: - :path: Flutter/ephemeral/.symlinks/plugins/dynamic_color/macos - file_picker: - :path: Flutter/ephemeral/.symlinks/plugins/file_picker/macos - flutter_secure_storage_darwin: - :path: Flutter/ephemeral/.symlinks/plugins/flutter_secure_storage_darwin/darwin FlutterMacOS: :path: Flutter/ephemeral - icloud_storage: - :path: Flutter/ephemeral/.symlinks/plugins/icloud_storage/macos - local_auth_darwin: - :path: Flutter/ephemeral/.symlinks/plugins/local_auth_darwin/darwin - package_info_plus: - :path: Flutter/ephemeral/.symlinks/plugins/package_info_plus/macos screen_retriever_macos: :path: Flutter/ephemeral/.symlinks/plugins/screen_retriever_macos/macos - share_plus: - :path: Flutter/ephemeral/.symlinks/plugins/share_plus/macos - shared_preferences_foundation: - :path: Flutter/ephemeral/.symlinks/plugins/shared_preferences_foundation/darwin - url_launcher_macos: - :path: Flutter/ephemeral/.symlinks/plugins/url_launcher_macos/macos - wakelock_plus: - :path: Flutter/ephemeral/.symlinks/plugins/wakelock_plus/macos - window_manager: - :path: Flutter/ephemeral/.symlinks/plugins/window_manager/macos SPEC CHECKSUMS: - dynamic_color: cb7c2a300ee67ed3bd96c3e852df3af0300bf610 - file_picker: 7584aae6fa07a041af2b36a2655122d42f578c1a - flutter_secure_storage_darwin: acdb3f316ed05a3e68f856e0353b133eec373a23 FlutterMacOS: d0db08ddef1a9af05a5ec4b724367152bb0500b1 - icloud_storage: eb5b0f20687cf5a4fabc0b541f3b079cd6df7dcb - local_auth_darwin: c3ee6cce0a8d56be34c8ccb66ba31f7f180aaebb - package_info_plus: f0052d280d17aa382b932f399edf32507174e870 screen_retriever_macos: 452e51764a9e1cdb74b3c541238795849f21557f - share_plus: 510bf0af1a42cd602274b4629920c9649c52f4cc - shared_preferences_foundation: 7036424c3d8ec98dfe75ff1667cb0cd531ec82bb - url_launcher_macos: f87a979182d112f911de6820aefddaf56ee9fbfd - wakelock_plus: 917609be14d812ddd9e9528876538b2263aaa03b - window_manager: b729e31d38fb04905235df9ea896128991cad99e PODFILE CHECKSUM: 8cdf29216ea1ab6b9743188287968d22b4579c1d diff --git a/macos/Runner.xcodeproj/project.pbxproj b/macos/Runner.xcodeproj/project.pbxproj index 39a5fc8f1..bc5f8ecdb 100644 --- a/macos/Runner.xcodeproj/project.pbxproj +++ b/macos/Runner.xcodeproj/project.pbxproj @@ -28,6 +28,7 @@ 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; CB890EE4310DAC9F20C4B22D /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B4428BFC11DD7EDA01918FBB /* Pods_Runner.framework */; }; E372ECA42BB94B360078B9D4 /* PrivacyInfo.xcprivacy in Resources */ = {isa = PBXBuildFile; fileRef = E372ECA32BB94B360078B9D4 /* PrivacyInfo.xcprivacy */; }; + 78A318202AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage in Frameworks */ = {isa = PBXBuildFile; productRef = 78A3181F2AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -89,6 +90,7 @@ E3D26BDA2B9968B800D83425 /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = es.lproj/MainMenu.strings; sourceTree = ""; }; E3D26BDB2B9968C400D83425 /* id */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = id; path = id.lproj/MainMenu.strings; sourceTree = ""; }; E3D26BDC2B9968D000D83425 /* pt-BR */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "pt-BR"; path = "pt-BR.lproj/MainMenu.strings"; sourceTree = ""; }; + 78E0A7A72DC9AD7400C4905E /* FlutterGeneratedPluginSwiftPackage */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = FlutterGeneratedPluginSwiftPackage; path = ephemeral/Packages/FlutterGeneratedPluginSwiftPackage; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -96,6 +98,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + 78A318202AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage in Frameworks */, CB890EE4310DAC9F20C4B22D /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; @@ -156,6 +159,7 @@ 33CEB47122A05771004F2AC0 /* Flutter */ = { isa = PBXGroup; children = ( + 78E0A7A72DC9AD7400C4905E /* FlutterGeneratedPluginSwiftPackage */, 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */, 33CEB47222A05771004F2AC0 /* Flutter-Debug.xcconfig */, 33CEB47422A05771004F2AC0 /* Flutter-Release.xcconfig */, @@ -204,6 +208,9 @@ /* Begin PBXNativeTarget section */ 33CC10EC2044A3C60003C045 /* Runner */ = { + packageProductDependencies = ( + 78A3181F2AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage */, + ); isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( @@ -230,6 +237,9 @@ /* Begin PBXProject section */ 33CC10E52044A3C60003C045 /* Project object */ = { + packageReferences = ( + 781AD8BC2B33823900A9FFBB /* XCLocalSwiftPackageReference "Flutter/ephemeral/Packages/FlutterGeneratedPluginSwiftPackage" */, + ); isa = PBXProject; attributes = { LastSwiftUpdateCheck = 0920; @@ -727,6 +737,18 @@ defaultConfigurationName = Release; }; /* End XCConfigurationList section */ +/* Begin XCLocalSwiftPackageReference section */ + 781AD8BC2B33823900A9FFBB /* XCLocalSwiftPackageReference "Flutter/ephemeral/Packages/FlutterGeneratedPluginSwiftPackage" */ = { + isa = XCLocalSwiftPackageReference; + relativePath = Flutter/ephemeral/Packages/FlutterGeneratedPluginSwiftPackage; + }; +/* End XCLocalSwiftPackageReference section */ +/* Begin XCSwiftPackageProductDependency section */ + 78A3181F2AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage */ = { + isa = XCSwiftPackageProductDependency; + productName = FlutterGeneratedPluginSwiftPackage; + }; +/* End XCSwiftPackageProductDependency section */ }; rootObject = 33CC10E52044A3C60003C045 /* Project object */; } diff --git a/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme index 92c4e200b..c7c59f197 100644 --- a/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme +++ b/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme @@ -5,6 +5,24 @@ + + + + + + + + + + Date: Fri, 5 Jun 2026 20:15:18 +0800 Subject: [PATCH 8/8] fix --- ios/Runner/AppDelegate.swift | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/ios/Runner/AppDelegate.swift b/ios/Runner/AppDelegate.swift index 44d0bb5bc..5690288aa 100644 --- a/ios/Runner/AppDelegate.swift +++ b/ios/Runner/AppDelegate.swift @@ -20,10 +20,14 @@ import ActivityKit private func setupMethodChannels(binaryMessenger: FlutterBinaryMessenger) { let homeWidgetChannel = FlutterMethodChannel(name: "tech.lolli.toolbox/home_widget", binaryMessenger: binaryMessenger) homeWidgetChannel.setMethodCallHandler({(call: FlutterMethodCall, result: @escaping FlutterResult) -> Void in - if call.method == "update" { + switch call.method { + case "update": if #available(iOS 14.0, *) { WidgetCenter.shared.reloadTimelines(ofKind: "StatusWidget") } + result(nil) + default: + result(FlutterMethodNotImplemented) } })