diff --git a/mobile/.gitignore b/mobile/.gitignore index 3cc72276a..07996ce46 100644 --- a/mobile/.gitignore +++ b/mobile/.gitignore @@ -67,3 +67,6 @@ libisar.so # Translation file lib/generated/ + +# Flutter widget previews cache +.widget_preview/ diff --git a/mobile/analysis_options.yaml b/mobile/analysis_options.yaml index 065b3d56d..0a7895c64 100644 --- a/mobile/analysis_options.yaml +++ b/mobile/analysis_options.yaml @@ -88,6 +88,12 @@ analyzer: - lib/generated_plugin_registrant.dart - lib/**/*.g.dart - lib/**/*.drift.dart + - android/** + - ios/** + - web/** + - windows/** + - macos/** + - linux/** # NOTE: We explicitly do not use riverpod_lint as there are analyzer version conflicts between # our Flutter version and the required old riverpod_lint 2.x diff --git a/mobile/ios/Podfile.lock b/mobile/ios/Podfile.lock index 75eda67ce..b43c755e7 100644 --- a/mobile/ios/Podfile.lock +++ b/mobile/ios/Podfile.lock @@ -57,7 +57,7 @@ EXTERNAL SOURCES: SPEC CHECKSUMS: bonsoir_darwin: 29c7ccf356646118844721f36e1de4b61f6cbd0e cupertino_http: 94ac07f5ff090b8effa6c5e2c47871d48ab7c86c - Flutter: cabc95a1d2626b1b06e7179b784ebcf0c0cde467 + Flutter: 71a624a5bc0c04062bf19101d501e466baf2fb47 flutter_local_notifications: ad39620c743ea4c15127860f4b5641649a988100 flutter_secure_storage: 1ed9476fba7e7a782b22888f956cce43e2c62f13 fluttertoast: 2c67e14dce98bbdb200df9e1acf610d7a6264ea1 @@ -67,4 +67,4 @@ SPEC CHECKSUMS: PODFILE CHECKSUM: 3c43a700a4bffb4120bf696cad263aefd4bb3c8c -COCOAPODS: 1.16.2 +COCOAPODS: 1.17.0 diff --git a/mobile/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved b/mobile/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved index e1c39435f..20495f960 100644 --- a/mobile/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved +++ b/mobile/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -32,8 +32,8 @@ "kind" : "remoteSourceControl", "location" : "https://github.com/maplibre/maplibre-gl-native-distribution.git", "state" : { - "revision" : "84a79bc375a301169390ac110c868f06c857b83f", - "version" : "6.27.0" + "revision" : "5ee345ca5d65238a6fce29bba87816204be7df20", + "version" : "6.28.0" } }, { diff --git a/mobile/lib/extensions/maplibrecontroller_extensions.dart b/mobile/lib/extensions/maplibrecontroller_extensions.dart index e1f32a4d8..d15f7c501 100644 --- a/mobile/lib/extensions/maplibrecontroller_extensions.dart +++ b/mobile/lib/extensions/maplibrecontroller_extensions.dart @@ -71,7 +71,9 @@ extension MapMarkers on MapLibreMapController { try { final ByteData bytes = await rootBundle.load("assets/location-pin.png"); await addImage("mapMarker", bytes.buffer.asUint8List()); - return addSymbol(SymbolOptions(geometry: centre, iconImage: "mapMarker", iconSize: 0.15, iconAnchor: "bottom")); + return await addSymbol( + SymbolOptions(geometry: centre, iconImage: "mapMarker", iconSize: 0.15, iconAnchor: "bottom"), + ); } finally { // no-op } diff --git a/mobile/lib/presentation/widgets/asset_viewer/video_viewer.widget.dart b/mobile/lib/presentation/widgets/asset_viewer/video_viewer.widget.dart index 9011888b5..f0e01d8f0 100644 --- a/mobile/lib/presentation/widgets/asset_viewer/video_viewer.widget.dart +++ b/mobile/lib/presentation/widgets/asset_viewer/video_viewer.widget.dart @@ -117,7 +117,7 @@ class _NativeVideoViewerState extends ConsumerState with Widg throw Exception('No file found for the video'); } - return VideoSource.init( + return await VideoSource.init( path: CurrentPlatform.isAndroid ? file.uri.toString() : file.path, type: VideoSourceType.file, ); @@ -141,7 +141,7 @@ class _NativeVideoViewerState extends ConsumerState with Widg // Pass a file:// URI so Android's Uri.parse doesn't // interpret characters like '#' as fragment identifiers. - return VideoSource.init( + return await VideoSource.init( path: CurrentPlatform.isAndroid ? file.uri.toString() : file.path, type: VideoSourceType.file, ); @@ -159,7 +159,11 @@ class _NativeVideoViewerState extends ConsumerState with Widg final String assetId = remoteAsset.livePhotoVideoId ?? remoteAsset.id; final String videoUrl = '$serverEndpoint/assets/$assetId/$postfixUrl'; - return VideoSource.init(path: videoUrl, type: VideoSourceType.network, headers: ApiService.getRequestHeaders()); + return await VideoSource.init( + path: videoUrl, + type: VideoSourceType.network, + headers: ApiService.getRequestHeaders(), + ); } catch (error) { _log.severe('Error creating video source for asset ${videoAsset.name}: $error'); return null; diff --git a/mobile/mise.lock b/mobile/mise.lock index cd3ac2584..ca6e41752 100644 --- a/mobile/mise.lock +++ b/mobile/mise.lock @@ -1,30 +1,30 @@ # @generated - this file is auto-generated by `mise lock` https://mise.en.dev/dev-tools/mise-lock.html [[tools."aqua:flutter/flutter"]] -version = "3.44.9" +version = "3.47.1" backend = "aqua:flutter/flutter" [tools."aqua:flutter/flutter"."platforms.linux-arm64"] -url = "https://storage.googleapis.com/flutter_infra_release/releases/stable/linux/flutter_linux_3.44.9-stable.tar.xz" +url = "https://storage.googleapis.com/flutter_infra_release/releases/stable/linux/flutter_linux_3.47.1-stable.tar.xz" [tools."aqua:flutter/flutter"."platforms.linux-arm64-musl"] -url = "https://storage.googleapis.com/flutter_infra_release/releases/stable/linux/flutter_linux_3.44.9-stable.tar.xz" +url = "https://storage.googleapis.com/flutter_infra_release/releases/stable/linux/flutter_linux_3.47.1-stable.tar.xz" [tools."aqua:flutter/flutter"."platforms.linux-x64"] -url = "https://storage.googleapis.com/flutter_infra_release/releases/stable/linux/flutter_linux_3.44.9-stable.tar.xz" +url = "https://storage.googleapis.com/flutter_infra_release/releases/stable/linux/flutter_linux_3.47.1-stable.tar.xz" [tools."aqua:flutter/flutter"."platforms.linux-x64-musl"] -url = "https://storage.googleapis.com/flutter_infra_release/releases/stable/linux/flutter_linux_3.44.9-stable.tar.xz" +url = "https://storage.googleapis.com/flutter_infra_release/releases/stable/linux/flutter_linux_3.47.1-stable.tar.xz" [tools."aqua:flutter/flutter"."platforms.macos-arm64"] -checksum = "blake3:e5c14d6b5e917a8578327d2564ab78ece83cd685c74c29572ddaf7655f42205d" -url = "https://storage.googleapis.com/flutter_infra_release/releases/stable/macos/flutter_macos_arm64_3.44.9-stable.zip" +checksum = "blake3:7eab9d8e9ea4ffbfefee7c22f3287ade60a47bdd2aef1630e4d6f353a9b43dc1" +url = "https://storage.googleapis.com/flutter_infra_release/releases/stable/macos/flutter_macos_arm64_3.47.1-stable.zip" [tools."aqua:flutter/flutter"."platforms.macos-x64"] -url = "https://storage.googleapis.com/flutter_infra_release/releases/stable/macos/flutter_macos_3.44.9-stable.zip" +url = "https://storage.googleapis.com/flutter_infra_release/releases/stable/macos/flutter_macos_3.47.1-stable.zip" [tools."aqua:flutter/flutter"."platforms.windows-x64"] -url = "https://storage.googleapis.com/flutter_infra_release/releases/stable/windows/flutter_windows_3.44.9-stable.zip" +url = "https://storage.googleapis.com/flutter_infra_release/releases/stable/windows/flutter_windows_3.47.1-stable.zip" [[tools."github:CQLabs/homebrew-dcm"]] version = "1.37.0" diff --git a/mobile/mise.toml b/mobile/mise.toml index 348ce1a0a..2264e6459 100644 --- a/mobile/mise.toml +++ b/mobile/mise.toml @@ -2,7 +2,7 @@ java = "21.0.2" [tools."aqua:flutter/flutter"] -version = "3.44.9" +version = "3.47.1" postinstall = "bash {{config_root}}/ios/scripts/xcode_flutter_patch.sh" [tools."github:CQLabs/homebrew-dcm"] diff --git a/mobile/packages/ui/lib/src/previews.dart b/mobile/packages/ui/lib/src/previews.dart index 076bc253c..7ed229258 100644 --- a/mobile/packages/ui/lib/src/previews.dart +++ b/mobile/packages/ui/lib/src/previews.dart @@ -34,10 +34,19 @@ const ColorScheme _darkColorScheme = ColorScheme.dark( outlineVariant: Color(0xFF43464F), ); -PreviewThemeData immichPreviewTheme() => PreviewThemeData( - materialLight: ThemeData(colorScheme: _lightColorScheme, useMaterial3: true), - materialDark: ThemeData(colorScheme: _darkColorScheme, useMaterial3: true), - ); +final class _ImmichPreviewThemeData extends PreviewThemeData { + const _ImmichPreviewThemeData(); + + @override + Widget apply(BuildContext context, Widget child) => Theme( + data: ThemeData( + colorScheme: MediaQuery.platformBrightnessOf(context) == Brightness.dark ? _darkColorScheme : _lightColorScheme, + ), + child: child, + ); +} + +PreviewThemeData immichPreviewTheme() => const _ImmichPreviewThemeData(); Widget immichPreviewWrapper(Widget child) { return Builder( @@ -56,5 +65,5 @@ Widget immichPreviewWrapper(Widget child) { final class ImmichPreview extends Preview { const ImmichPreview({super.name, super.group, super.size, super.textScaleFactor}) - : super(theme: immichPreviewTheme, wrapper: immichPreviewWrapper); + : super(theme: immichPreviewTheme, wrapper: immichPreviewWrapper); } diff --git a/mobile/packages/ui/pubspec.lock b/mobile/packages/ui/pubspec.lock index b58a985de..63992cb2a 100644 --- a/mobile/packages/ui/pubspec.lock +++ b/mobile/packages/ui/pubspec.lock @@ -87,10 +87,10 @@ packages: dependency: transitive description: name: matcher - sha256: dc0b7dc7651697ea4ff3e69ef44b0407ea32c487a39fff6a4004fa585e901861 + sha256: "31bd099b47c10cd1aeb55146a2d46ce0277630ecef3f7dae54ad7873f36696cd" url: "https://pub.dev" source: hosted - version: "0.12.19" + version: "0.12.20" material_color_utilities: dependency: "direct main" description: @@ -103,10 +103,10 @@ packages: dependency: transitive description: name: meta - sha256: "1741988757a65eb6b36abe716829688cf01910bbf91c34354ff7ec1c3de2b349" + sha256: "307249ce4ff29d58a18e97f6345f539382eb9c9c29ecda628900f31de0443dd9" url: "https://pub.dev" source: hosted - version: "1.18.0" + version: "1.19.0" path: dependency: transitive description: @@ -164,18 +164,18 @@ packages: dependency: transitive description: name: test_api - sha256: "949a932224383300f01be9221c39180316445ecb8e7547f70a41a35bf421fb9e" + sha256: "2a122cbe059f8b610d3a5415f42e255b6c17b1f21eee1d960f31080237fb4f11" url: "https://pub.dev" source: hosted - version: "0.7.11" + version: "0.7.12" vector_math: dependency: transitive description: name: vector_math - sha256: d530bd74fea330e6e364cda7a85019c434070188383e1cd8d9777ee586914c5b + sha256: f36f9f3be64c6198714492bb455c11056e33e2f85d9a0b676a48301e44fdcf47 url: "https://pub.dev" source: hosted - version: "2.2.0" + version: "2.4.2" vm_service: dependency: transitive description: @@ -185,5 +185,5 @@ packages: source: hosted version: "15.2.0" sdks: - dart: ">=3.12.0 <4.0.0" + dart: ">=3.13.0 <4.0.0" flutter: ">=3.18.0-18.0.pre.54" diff --git a/mobile/packages/ui/pubspec.yaml b/mobile/packages/ui/pubspec.yaml index b924becdc..630c706d4 100644 --- a/mobile/packages/ui/pubspec.yaml +++ b/mobile/packages/ui/pubspec.yaml @@ -2,7 +2,7 @@ name: immich_ui publish_to: none environment: - sdk: '>=3.12.0 <4.0.0' + sdk: '>=3.13.0 <4.0.0' dependencies: flutter: @@ -14,4 +14,4 @@ dev_dependencies: sdk: flutter flutter: - uses-material-design: true \ No newline at end of file + uses-material-design: true diff --git a/mobile/pubspec.lock b/mobile/pubspec.lock index 65cd03c3a..5490fb2e3 100644 --- a/mobile/pubspec.lock +++ b/mobile/pubspec.lock @@ -944,10 +944,10 @@ packages: dependency: "direct main" description: name: intl - sha256: "3df61194eb431efc39c4ceba583b95633a403f46c9fd341e550ce0bfa50e9aa5" + sha256: "1ca20c894b1717686a2319b8548763d812bc0aabdac580420a44c5178c57a867" url: "https://pub.dev" source: hosted - version: "0.20.2" + version: "0.20.3" io: dependency: transitive description: @@ -1096,10 +1096,10 @@ packages: dependency: transitive description: name: matcher - sha256: dc0b7dc7651697ea4ff3e69ef44b0407ea32c487a39fff6a4004fa585e901861 + sha256: "31bd099b47c10cd1aeb55146a2d46ce0277630ecef3f7dae54ad7873f36696cd" url: "https://pub.dev" source: hosted - version: "0.12.19" + version: "0.12.20" material_color_utilities: dependency: transitive description: @@ -1112,10 +1112,10 @@ packages: dependency: transitive description: name: meta - sha256: "1741988757a65eb6b36abe716829688cf01910bbf91c34354ff7ec1c3de2b349" + sha256: "307249ce4ff29d58a18e97f6345f539382eb9c9c29ecda628900f31de0443dd9" url: "https://pub.dev" source: hosted - version: "1.18.0" + version: "1.19.0" mime: dependency: transitive description: @@ -1752,10 +1752,10 @@ packages: dependency: transitive description: name: test_api - sha256: "949a932224383300f01be9221c39180316445ecb8e7547f70a41a35bf421fb9e" + sha256: "2a122cbe059f8b610d3a5415f42e255b6c17b1f21eee1d960f31080237fb4f11" url: "https://pub.dev" source: hosted - version: "0.7.11" + version: "0.7.12" thumbhash: dependency: "direct main" description: @@ -1896,10 +1896,10 @@ packages: dependency: transitive description: name: vector_math - sha256: d530bd74fea330e6e364cda7a85019c434070188383e1cd8d9777ee586914c5b + sha256: f36f9f3be64c6198714492bb455c11056e33e2f85d9a0b676a48301e44fdcf47 url: "https://pub.dev" source: hosted - version: "2.2.0" + version: "2.4.2" vm_service: dependency: transitive description: @@ -2030,4 +2030,4 @@ packages: version: "3.1.3" sdks: dart: ">=3.12.0 <4.0.0" - flutter: "3.44.9" + flutter: "3.47.1" diff --git a/mobile/pubspec.yaml b/mobile/pubspec.yaml index 9bda1b20f..d46e02e5d 100644 --- a/mobile/pubspec.yaml +++ b/mobile/pubspec.yaml @@ -6,7 +6,7 @@ version: 3.1.0+3057 environment: sdk: '>=3.12.0 <4.0.0' - flutter: 3.44.9 + flutter: 3.47.1 dependencies: async: ^2.13.1