Просмотр исходного кода

Merge pull request #242 from ente-io/photos_manger_upgrade

Upgrade photos manger
Vishnu Mohandas 3 лет назад
Родитель
Сommit
4494dc13a7

+ 1 - 1
.github/workflows/release.yml

@@ -26,7 +26,7 @@ jobs:
       - uses: subosito/flutter-action@v1
       - uses: subosito/flutter-action@v1
         with:
         with:
           channel: 'stable'
           channel: 'stable'
-          flutter-version: '2.8.1'
+          flutter-version: '3.0.0'
 
 
       # Fetch sub modules
       # Fetch sub modules
       - run: git submodule update --init --recursive
       - run: git submodule update --init --recursive

+ 1 - 1
android/app/build.gradle

@@ -32,7 +32,7 @@ if (keystorePropertiesFile.exists()) {
 }
 }
 
 
 android {
 android {
-    compileSdkVersion 31
+    compileSdkVersion 32
 
 
     sourceSets {
     sourceSets {
         main.java.srcDirs += 'src/main/kotlin'
         main.java.srcDirs += 'src/main/kotlin'

+ 1 - 6
android/app/src/main/AndroidManifest.xml

@@ -1,10 +1,5 @@
 <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="io.ente.photos">
 <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="io.ente.photos">
-    <!-- io.flutter.app.FlutterApplication is an android.app.Application that
-         calls FlutterMain.startInitialization(this); in its onCreate method.
-         In most cases you can leave this as-is, but you if you want to provide
-         additional functionality it is fine to subclass or reimplement
-         FlutterApplication and put your custom class here. -->
-    <application android:name="io.flutter.app.FlutterApplication" android:label="@string/app_name" android:icon="@mipmap/ic_launcher" android:usesCleartextTraffic="true" android:requestLegacyExternalStorage="true" android:allowBackup="false" android:fullBackupContent="false" android:largeHeap="true">
+    <application android:name="${applicationName}" android:label="@string/app_name" android:icon="@mipmap/ic_launcher" android:usesCleartextTraffic="true" android:requestLegacyExternalStorage="true" android:allowBackup="false" android:fullBackupContent="false" android:largeHeap="true">
 
 
         <activity android:name=".MainActivity" android:launchMode="singleTop" android:theme="@style/LaunchTheme" android:configChanges="orientation|keyboardHidden|keyboard|screenSize|smallestScreenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode" android:hardwareAccelerated="true" android:windowSoftInputMode="adjustResize">
         <activity android:name=".MainActivity" android:launchMode="singleTop" android:theme="@style/LaunchTheme" android:configChanges="orientation|keyboardHidden|keyboard|screenSize|smallestScreenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode" android:hardwareAccelerated="true" android:windowSoftInputMode="adjustResize">
             <intent-filter>
             <intent-filter>

+ 2 - 2
ios/Podfile.lock

@@ -139,7 +139,7 @@ PODS:
     - Flutter
     - Flutter
   - "permission_handler (5.1.0+2)":
   - "permission_handler (5.1.0+2)":
     - Flutter
     - Flutter
-  - photo_manager (1.0.0):
+  - photo_manager (2.0.0):
     - Flutter
     - Flutter
     - FlutterMacOS
     - FlutterMacOS
   - PromisesObjC (2.0.0)
   - PromisesObjC (2.0.0)
@@ -370,7 +370,7 @@ SPEC CHECKSUMS:
   package_info_plus: 6c92f08e1f853dc01228d6f553146438dafcd14e
   package_info_plus: 6c92f08e1f853dc01228d6f553146438dafcd14e
   path_provider: abfe2b5c733d04e238b0d8691db0cfd63a27a93c
   path_provider: abfe2b5c733d04e238b0d8691db0cfd63a27a93c
   permission_handler: ccb20a9fad0ee9b1314a52b70b76b473c5f8dab0
   permission_handler: ccb20a9fad0ee9b1314a52b70b76b473c5f8dab0
-  photo_manager: 84fa94fbeb82e607333ea9a13c43b58e0903a463
+  photo_manager: 4f6810b7dfc4feb03b461ac1a70dacf91fba7604
   PromisesObjC: 68159ce6952d93e17b2dfe273b8c40907db5ba58
   PromisesObjC: 68159ce6952d93e17b2dfe273b8c40907db5ba58
   Reachability: 33e18b67625424e47b6cde6d202dce689ad7af96
   Reachability: 33e18b67625424e47b6cde6d202dce689ad7af96
   receive_sharing_intent: c0d87310754e74c0f9542947e7cbdf3a0335a3b1
   receive_sharing_intent: c0d87310754e74c0f9542947e7cbdf3a0335a3b1

+ 7 - 0
lib/core/cache/thumbnail_cache.dart

@@ -24,4 +24,11 @@ class ThumbnailLruCache {
             (size != null ? size.toString() : kThumbnailLargeSize.toString()),
             (size != null ? size.toString() : kThumbnailLargeSize.toString()),
         imageData);
         imageData);
   }
   }
+
+  static void clearCache(File file) {
+    _map.remove(
+        file.generatedID.toString() + "_" + kThumbnailLargeSize.toString());
+    _map.remove(
+        file.generatedID.toString() + "_" + kThumbnailSmallSize.toString());
+  }
 }
 }

+ 5 - 5
lib/models/file.dart

@@ -82,7 +82,7 @@ class File {
       }
       }
     }
     }
     file.modificationTime = asset.modifiedDateTime.microsecondsSinceEpoch;
     file.modificationTime = asset.modifiedDateTime.microsecondsSinceEpoch;
-    file.fileSubType = asset.subTypes;
+    file.fileSubType = asset.subtype;
     file.metadataVersion = kCurrentMetadataVersion;
     file.metadataVersion = kCurrentMetadataVersion;
     return file;
     return file;
   }
   }
@@ -94,9 +94,9 @@ class File {
         type = FileType.image;
         type = FileType.image;
         // PHAssetMediaSubtype.photoLive.rawValue is 8
         // PHAssetMediaSubtype.photoLive.rawValue is 8
         // This hack should go away once photos_manager support livePhotos
         // This hack should go away once photos_manager support livePhotos
-        if (asset.subTypes != null &&
-            asset.subTypes > -1 &&
-            (asset.subTypes & 8) != 0) {
+        if (asset.subtype != null &&
+            asset.subtype > -1 &&
+            (asset.subtype & 8) != 0) {
           type = FileType.livePhoto;
           type = FileType.livePhoto;
         }
         }
         break;
         break;
@@ -142,7 +142,7 @@ class File {
     final asset = await getAsset();
     final asset = await getAsset();
     // asset can be null for files shared to app
     // asset can be null for files shared to app
     if (asset != null) {
     if (asset != null) {
-      fileSubType = asset.subTypes;
+      fileSubType = asset.subtype;
       if (fileType == FileType.video) {
       if (fileType == FileType.video) {
         duration = asset.duration;
         duration = asset.duration;
       }
       }

+ 2 - 1
lib/services/local_sync_service.dart

@@ -232,7 +232,8 @@ class LocalSyncService {
       updatedFiles
       updatedFiles
           .removeWhere((file) => downloadedFileIDs.contains(file.localID));
           .removeWhere((file) => downloadedFileIDs.contains(file.localID));
       if (updatedFiles.isNotEmpty) {
       if (updatedFiles.isNotEmpty) {
-        _logger.info(updatedFiles.length.toString() + " local files were updated.");
+        _logger.info(
+            updatedFiles.length.toString() + " local files were updated.");
       }
       }
       for (final file in updatedFiles) {
       for (final file in updatedFiles) {
         await _db.updateUploadedFile(
         await _db.updateUploadedFile(

+ 1 - 1
lib/services/notification_service.dart

@@ -34,7 +34,7 @@ class NotificationService {
         AndroidNotificationDetails(
         AndroidNotificationDetails(
       'io.ente.photos',
       'io.ente.photos',
       'ente',
       'ente',
-      'ente alerts',
+      channelDescription: 'ente alerts',
       importance: Importance.max,
       importance: Importance.max,
       priority: Priority.high,
       priority: Priority.high,
       showWhen: false,
       showWhen: false,

+ 10 - 3
lib/ui/create_collection_page.dart

@@ -77,9 +77,16 @@ class _CreateCollectionPageState extends State<CreateCollectionPage> {
                 child: Padding(
                 child: Padding(
                   padding: const EdgeInsets.only(
                   padding: const EdgeInsets.only(
                       top: 30, bottom: 12, left: 40, right: 40),
                       top: 30, bottom: 12, left: 40, right: 40),
-                  child: OutlineButton.icon(
-                    padding: EdgeInsets.all(20),
-                    icon: Icon(Icons.create_new_folder_outlined),
+                  child: OutlinedButton.icon(
+                    style: ButtonStyle(
+                      padding: MaterialStateProperty.all<EdgeInsets>(
+                        EdgeInsets.all(20),
+                      ),
+                    ),
+                    icon: Icon(
+                      Icons.create_new_folder_outlined,
+                      color: Theme.of(context).buttonColor,
+                    ),
                     label: Text(
                     label: Text(
                       "to a new album",
                       "to a new album",
                       style: Theme.of(context).textTheme.bodyText1,
                       style: Theme.of(context).textTheme.bodyText1,

+ 2 - 1
lib/ui/share_collection_widget.dart

@@ -59,9 +59,10 @@ class _SharingDialogState extends State<SharingDialog> {
     if (!_showEntryField) {
     if (!_showEntryField) {
       children.add(SizedBox(
       children.add(SizedBox(
         width: 220,
         width: 220,
-        child: OutlineButton(
+        child: OutlinedButton(
           child: Icon(
           child: Icon(
             Icons.add,
             Icons.add,
+            color: Theme.of(context).buttonColor,
           ),
           ),
           onPressed: () {
           onPressed: () {
             setState(() {
             setState(() {

+ 22 - 6
lib/utils/file_sync_util.dart

@@ -7,6 +7,7 @@ import 'package:photos/models/file.dart';
 
 
 final _logger = Logger("FileSyncUtil");
 final _logger = Logger("FileSyncUtil");
 final ignoreSizeConstraint = SizeConstraint(ignoreSize: true);
 final ignoreSizeConstraint = SizeConstraint(ignoreSize: true);
+final assetFetchPageSize = 2000;
 Future<List<File>> getDeviceFiles(
 Future<List<File>> getDeviceFiles(
     int fromTime, int toTime, Computer computer) async {
     int fromTime, int toTime, Computer computer) async {
   final pathEntities = await _getGalleryList(fromTime, toTime);
   final pathEntities = await _getGalleryList(fromTime, toTime);
@@ -28,10 +29,12 @@ Future<List<File>> getDeviceFiles(
 }
 }
 
 
 Future<List<LocalAsset>> getAllLocalAssets() async {
 Future<List<LocalAsset>> getAllLocalAssets() async {
-  final filterOptionGroup = FilterOptionGroup(
-      imageOption: FilterOption(sizeConstraint: ignoreSizeConstraint),
-      videoOption: FilterOption(sizeConstraint: ignoreSizeConstraint),
-      createTimeCond: DateTimeCond.def().copyWith(ignore: true));
+  final filterOptionGroup = FilterOptionGroup();
+  filterOptionGroup.setOption(
+      AssetType.image, FilterOption(sizeConstraint: ignoreSizeConstraint));
+  filterOptionGroup.setOption(
+      AssetType.video, FilterOption(sizeConstraint: ignoreSizeConstraint));
+  filterOptionGroup.createTimeCond = DateTimeCond.def().copyWith(ignore: true);
   final assetPaths = await PhotoManager.getAssetPathList(
   final assetPaths = await PhotoManager.getAssetPathList(
     hasAll: true,
     hasAll: true,
     type: RequestType.common,
     type: RequestType.common,
@@ -39,7 +42,7 @@ Future<List<LocalAsset>> getAllLocalAssets() async {
   );
   );
   final List<LocalAsset> assets = [];
   final List<LocalAsset> assets = [];
   for (final assetPath in assetPaths) {
   for (final assetPath in assetPaths) {
-    for (final asset in await assetPath.assetList) {
+    for (final asset in await _getAllAssetLists(assetPath)) {
       assets.add(LocalAsset(asset.id, assetPath.name));
       assets.add(LocalAsset(asset.id, assetPath.name));
     }
     }
   }
   }
@@ -131,12 +134,25 @@ Future<List<File>> _computeFiles(AssetPathEntity pathEntity, int fromTime,
     List<File> files, Computer computer) async {
     List<File> files, Computer computer) async {
   final args = Map<String, dynamic>();
   final args = Map<String, dynamic>();
   args["pathEntity"] = pathEntity;
   args["pathEntity"] = pathEntity;
-  args["assetList"] = await pathEntity.assetList;
+  args["assetList"] = await _getAllAssetLists(pathEntity);
   args["fromTime"] = fromTime;
   args["fromTime"] = fromTime;
   args["files"] = files;
   args["files"] = files;
   return await computer.compute(_getFiles, param: args);
   return await computer.compute(_getFiles, param: args);
 }
 }
 
 
+Future<List<AssetEntity>> _getAllAssetLists(AssetPathEntity pathEntity) async {
+  List<AssetEntity> result = [];
+  int currentPage = 0;
+  List<AssetEntity> currentPageResult = [];
+  do {
+    currentPageResult = await pathEntity.getAssetListPaged(
+        page: currentPage, size: assetFetchPageSize);
+    result.addAll(currentPageResult);
+    currentPage = currentPage + 1;
+  } while (currentPageResult.length >= assetFetchPageSize);
+  return result;
+}
+
 Future<List<File>> _getFiles(Map<String, dynamic> args) async {
 Future<List<File>> _getFiles(Map<String, dynamic> args) async {
   final pathEntity = args["pathEntity"];
   final pathEntity = args["pathEntity"];
   final assetList = args["assetList"];
   final assetList = args["assetList"];

+ 2 - 3
lib/utils/file_uploader_util.dart

@@ -95,9 +95,8 @@ Future<MediaUploadData> _getMediaUploadDataFromAssetFile(ente.File file) async {
     sourceFile = io.File(livePhotoPath);
     sourceFile = io.File(livePhotoPath);
   }
   }
 
 
-  thumbnailData = await asset.thumbDataWithSize(
-    kThumbnailLargeSize,
-    kThumbnailLargeSize,
+  thumbnailData = await asset.thumbnailDataWithSize(
+    ThumbnailSize(kThumbnailLargeSize, kThumbnailLargeSize),
     quality: kThumbnailQuality,
     quality: kThumbnailQuality,
   );
   );
   if (thumbnailData == null) {
   if (thumbnailData == null) {

+ 5 - 5
lib/utils/file_util.dart

@@ -11,6 +11,7 @@ import 'package:logging/logging.dart';
 import 'package:motionphoto/motionphoto.dart';
 import 'package:motionphoto/motionphoto.dart';
 import 'package:path/path.dart';
 import 'package:path/path.dart';
 import 'package:photos/core/cache/image_cache.dart';
 import 'package:photos/core/cache/image_cache.dart';
+import 'package:photos/core/cache/thumbnail_cache.dart';
 import 'package:photos/core/cache/video_cache_manager.dart';
 import 'package:photos/core/cache/video_cache_manager.dart';
 import 'package:photos/core/configuration.dart';
 import 'package:photos/core/configuration.dart';
 import 'package:photos/core/constants.dart';
 import 'package:photos/core/constants.dart';
@@ -134,8 +135,7 @@ Future<io.File> getFileFromServer(
   return fileDownloadsInProgress[downloadID];
   return fileDownloadsInProgress[downloadID];
 }
 }
 
 
-Future<bool> isFileCached(ente.File file,
-    {bool liveVideo = false}) async {
+Future<bool> isFileCached(ente.File file, {bool liveVideo = false}) async {
   final cacheManager = (file.fileType == FileType.video || liveVideo)
   final cacheManager = (file.fileType == FileType.video || liveVideo)
       ? VideoCacheManager.instance
       ? VideoCacheManager.instance
       : DefaultCacheManager();
       : DefaultCacheManager();
@@ -160,7 +160,7 @@ Future<io.File> _getLivePhotoFromServer(ente.File file,
       return null;
       return null;
     }
     }
     return needLiveVideo ? livePhoto.video : livePhoto.image;
     return needLiveVideo ? livePhoto.video : livePhoto.image;
-  } catch (e,s) {
+  } catch (e, s) {
     _logger.warning("live photo get failed", e, s);
     _logger.warning("live photo get failed", e, s);
     livePhotoDownloadsTracker.remove(downloadID);
     livePhotoDownloadsTracker.remove(downloadID);
     return null;
     return null;
@@ -226,8 +226,7 @@ Future<_LivePhoto> _downloadLivePhoto(ente.File file,
     }
     }
     return _LivePhoto(imageFileCache, videoFileCache);
     return _LivePhoto(imageFileCache, videoFileCache);
   }).catchError((e) {
   }).catchError((e) {
-    _logger.warning(
-        "failed to download live photos : ${file.tag()}", e);
+    _logger.warning("failed to download live photos : ${file.tag()}", e);
     throw e;
     throw e;
   });
   });
 }
 }
@@ -298,6 +297,7 @@ Future<void> clearCache(ente.File file) async {
   if (cachedThumbnail.existsSync()) {
   if (cachedThumbnail.existsSync()) {
     await cachedThumbnail.delete();
     await cachedThumbnail.delete();
   }
   }
+  ThumbnailLruCache.clearCache(file);
 }
 }
 
 
 class _LivePhoto {
 class _LivePhoto {

+ 4 - 1
lib/utils/thumbnail_util.dart

@@ -6,6 +6,7 @@ import 'dart:typed_data';
 import 'package:dio/dio.dart';
 import 'package:dio/dio.dart';
 import 'package:flutter_sodium/flutter_sodium.dart';
 import 'package:flutter_sodium/flutter_sodium.dart';
 import 'package:logging/logging.dart';
 import 'package:logging/logging.dart';
+import 'package:photo_manager/photo_manager.dart';
 import 'package:photos/core/cache/thumbnail_cache.dart';
 import 'package:photos/core/cache/thumbnail_cache.dart';
 import 'package:photos/core/configuration.dart';
 import 'package:photos/core/configuration.dart';
 import 'package:photos/core/constants.dart';
 import 'package:photos/core/constants.dart';
@@ -82,7 +83,9 @@ Future<Uint8List> getThumbnailFromLocal(File file,
       if (asset == null || !(await asset.exists)) {
       if (asset == null || !(await asset.exists)) {
         return null;
         return null;
       }
       }
-      return asset.thumbDataWithSize(size, size, quality: quality).then((data) {
+      return asset
+          .thumbnailDataWithSize(ThumbnailSize(size, size), quality: quality)
+          .then((data) {
         ThumbnailLruCache.put(file, data, size);
         ThumbnailLruCache.put(file, data, size);
         return data;
         return data;
       });
       });

+ 216 - 118
pubspec.lock

@@ -4,24 +4,26 @@ packages:
   alice:
   alice:
     dependency: "direct main"
     dependency: "direct main"
     description:
     description:
-      name: alice
-      url: "https://pub.dartlang.org"
-    source: hosted
-    version: "0.2.4"
+      path: "."
+      ref: HEAD
+      resolved-ref: "42c97aebbea93d1944a199b453b41bbed1f3013a"
+      url: "https://github.com/jhomlala/alice.git"
+    source: git
+    version: "0.2.5"
   animate_do:
   animate_do:
     dependency: "direct main"
     dependency: "direct main"
     description:
     description:
       name: animate_do
       name: animate_do
       url: "https://pub.dartlang.org"
       url: "https://pub.dartlang.org"
     source: hosted
     source: hosted
-    version: "2.0.0"
+    version: "2.1.0"
   archive:
   archive:
     dependency: "direct main"
     dependency: "direct main"
     description:
     description:
       name: archive
       name: archive
       url: "https://pub.dartlang.org"
       url: "https://pub.dartlang.org"
     source: hosted
     source: hosted
-    version: "3.1.2"
+    version: "3.3.0"
   args:
   args:
     dependency: transitive
     dependency: transitive
     description:
     description:
@@ -42,14 +44,14 @@ packages:
       name: background_fetch
       name: background_fetch
       url: "https://pub.dartlang.org"
       url: "https://pub.dartlang.org"
     source: hosted
     source: hosted
-    version: "1.0.1"
+    version: "1.1.0"
   better_player:
   better_player:
     dependency: transitive
     dependency: transitive
     description:
     description:
       name: better_player
       name: better_player
       url: "https://pub.dartlang.org"
       url: "https://pub.dartlang.org"
     source: hosted
     source: hosted
-    version: "0.0.73"
+    version: "0.0.81"
   bip39:
   bip39:
     dependency: "direct main"
     dependency: "direct main"
     description:
     description:
@@ -70,7 +72,21 @@ packages:
       name: cached_network_image
       name: cached_network_image
       url: "https://pub.dartlang.org"
       url: "https://pub.dartlang.org"
     source: hosted
     source: hosted
-    version: "3.0.0"
+    version: "3.2.1"
+  cached_network_image_platform_interface:
+    dependency: transitive
+    description:
+      name: cached_network_image_platform_interface
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "1.0.0"
+  cached_network_image_web:
+    dependency: transitive
+    description:
+      name: cached_network_image_web
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "1.0.1"
   characters:
   characters:
     dependency: transitive
     dependency: transitive
     description:
     description:
@@ -98,7 +114,7 @@ packages:
       name: chopper
       name: chopper
       url: "https://pub.dartlang.org"
       url: "https://pub.dartlang.org"
     source: hosted
     source: hosted
-    version: "4.0.1"
+    version: "4.0.5"
   clock:
   clock:
     dependency: transitive
     dependency: transitive
     description:
     description:
@@ -112,7 +128,7 @@ packages:
       name: collection
       name: collection
       url: "https://pub.dartlang.org"
       url: "https://pub.dartlang.org"
     source: hosted
     source: hosted
-    version: "1.15.0"
+    version: "1.16.0"
   computer:
   computer:
     dependency: "direct main"
     dependency: "direct main"
     description:
     description:
@@ -140,14 +156,14 @@ packages:
       name: connectivity_for_web
       name: connectivity_for_web
       url: "https://pub.dartlang.org"
       url: "https://pub.dartlang.org"
     source: hosted
     source: hosted
-    version: "0.4.0"
+    version: "0.4.0+1"
   connectivity_macos:
   connectivity_macos:
     dependency: transitive
     dependency: transitive
     description:
     description:
       name: connectivity_macos
       name: connectivity_macos
       url: "https://pub.dartlang.org"
       url: "https://pub.dartlang.org"
     source: hosted
     source: hosted
-    version: "0.2.0"
+    version: "0.2.1+2"
   connectivity_platform_interface:
   connectivity_platform_interface:
     dependency: transitive
     dependency: transitive
     description:
     description:
@@ -161,14 +177,14 @@ packages:
       name: contact_picker_platform_interface
       name: contact_picker_platform_interface
       url: "https://pub.dartlang.org"
       url: "https://pub.dartlang.org"
     source: hosted
     source: hosted
-    version: "4.4.0"
+    version: "4.7.0"
   contact_picker_web:
   contact_picker_web:
     dependency: transitive
     dependency: transitive
     description:
     description:
       name: contact_picker_web
       name: contact_picker_web
       url: "https://pub.dartlang.org"
       url: "https://pub.dartlang.org"
     source: hosted
     source: hosted
-    version: "4.4.0"
+    version: "4.7.0"
   convert:
   convert:
     dependency: transitive
     dependency: transitive
     description:
     description:
@@ -182,7 +198,7 @@ packages:
       name: crypto
       name: crypto
       url: "https://pub.dartlang.org"
       url: "https://pub.dartlang.org"
     source: hosted
     source: hosted
-    version: "3.0.1"
+    version: "3.0.2"
   csslib:
   csslib:
     dependency: transitive
     dependency: transitive
     description:
     description:
@@ -196,14 +212,21 @@ packages:
       name: cupertino_icons
       name: cupertino_icons
       url: "https://pub.dartlang.org"
       url: "https://pub.dartlang.org"
     source: hosted
     source: hosted
-    version: "1.0.3"
+    version: "1.0.4"
+  dbus:
+    dependency: transitive
+    description:
+      name: dbus
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "0.7.3"
   device_info:
   device_info:
     dependency: "direct main"
     dependency: "direct main"
     description:
     description:
       name: device_info
       name: device_info
       url: "https://pub.dartlang.org"
       url: "https://pub.dartlang.org"
     source: hosted
     source: hosted
-    version: "2.0.2"
+    version: "2.0.3"
   device_info_platform_interface:
   device_info_platform_interface:
     dependency: transitive
     dependency: transitive
     description:
     description:
@@ -217,14 +240,14 @@ packages:
       name: dio
       name: dio
       url: "https://pub.dartlang.org"
       url: "https://pub.dartlang.org"
     source: hosted
     source: hosted
-    version: "4.0.0"
+    version: "4.0.6"
   dots_indicator:
   dots_indicator:
     dependency: "direct main"
     dependency: "direct main"
     description:
     description:
       name: dots_indicator
       name: dots_indicator
       url: "https://pub.dartlang.org"
       url: "https://pub.dartlang.org"
     source: hosted
     source: hosted
-    version: "2.0.0"
+    version: "2.1.0"
   email_validator:
   email_validator:
     dependency: "direct main"
     dependency: "direct main"
     description:
     description:
@@ -245,7 +268,7 @@ packages:
       name: exif
       name: exif
       url: "https://pub.dartlang.org"
       url: "https://pub.dartlang.org"
     source: hosted
     source: hosted
-    version: "3.0.0"
+    version: "3.1.1"
   expansion_tile_card:
   expansion_tile_card:
     dependency: "direct main"
     dependency: "direct main"
     description:
     description:
@@ -259,21 +282,21 @@ packages:
       name: extended_image
       name: extended_image
       url: "https://pub.dartlang.org"
       url: "https://pub.dartlang.org"
     source: hosted
     source: hosted
-    version: "6.0.1"
+    version: "6.2.1"
   extended_image_library:
   extended_image_library:
     dependency: transitive
     dependency: transitive
     description:
     description:
       name: extended_image_library
       name: extended_image_library
       url: "https://pub.dartlang.org"
       url: "https://pub.dartlang.org"
     source: hosted
     source: hosted
-    version: "3.1.0"
+    version: "3.3.0"
   fake_async:
   fake_async:
     dependency: transitive
     dependency: transitive
     description:
     description:
       name: fake_async
       name: fake_async
       url: "https://pub.dartlang.org"
       url: "https://pub.dartlang.org"
     source: hosted
     source: hosted
-    version: "1.2.0"
+    version: "1.3.0"
   fast_base58:
   fast_base58:
     dependency: "direct main"
     dependency: "direct main"
     description:
     description:
@@ -287,63 +310,63 @@ packages:
       name: ffi
       name: ffi
       url: "https://pub.dartlang.org"
       url: "https://pub.dartlang.org"
     source: hosted
     source: hosted
-    version: "1.1.1"
+    version: "1.2.1"
   file:
   file:
     dependency: transitive
     dependency: transitive
     description:
     description:
       name: file
       name: file
       url: "https://pub.dartlang.org"
       url: "https://pub.dartlang.org"
     source: hosted
     source: hosted
-    version: "6.1.1"
+    version: "6.1.2"
   firebase_core:
   firebase_core:
     dependency: "direct main"
     dependency: "direct main"
     description:
     description:
       name: firebase_core
       name: firebase_core
       url: "https://pub.dartlang.org"
       url: "https://pub.dartlang.org"
     source: hosted
     source: hosted
-    version: "1.10.0"
+    version: "1.17.0"
   firebase_core_platform_interface:
   firebase_core_platform_interface:
     dependency: transitive
     dependency: transitive
     description:
     description:
       name: firebase_core_platform_interface
       name: firebase_core_platform_interface
       url: "https://pub.dartlang.org"
       url: "https://pub.dartlang.org"
     source: hosted
     source: hosted
-    version: "4.1.0"
+    version: "4.4.0"
   firebase_core_web:
   firebase_core_web:
     dependency: transitive
     dependency: transitive
     description:
     description:
       name: firebase_core_web
       name: firebase_core_web
       url: "https://pub.dartlang.org"
       url: "https://pub.dartlang.org"
     source: hosted
     source: hosted
-    version: "1.2.0"
+    version: "1.6.4"
   firebase_messaging:
   firebase_messaging:
     dependency: "direct main"
     dependency: "direct main"
     description:
     description:
       name: firebase_messaging
       name: firebase_messaging
       url: "https://pub.dartlang.org"
       url: "https://pub.dartlang.org"
     source: hosted
     source: hosted
-    version: "11.1.0"
+    version: "11.4.0"
   firebase_messaging_platform_interface:
   firebase_messaging_platform_interface:
     dependency: transitive
     dependency: transitive
     description:
     description:
       name: firebase_messaging_platform_interface
       name: firebase_messaging_platform_interface
       url: "https://pub.dartlang.org"
       url: "https://pub.dartlang.org"
     source: hosted
     source: hosted
-    version: "3.0.9"
+    version: "3.5.0"
   firebase_messaging_web:
   firebase_messaging_web:
     dependency: transitive
     dependency: transitive
     description:
     description:
       name: firebase_messaging_web
       name: firebase_messaging_web
       url: "https://pub.dartlang.org"
       url: "https://pub.dartlang.org"
     source: hosted
     source: hosted
-    version: "2.1.0"
+    version: "2.4.0"
   fk_user_agent:
   fk_user_agent:
     dependency: "direct main"
     dependency: "direct main"
     description:
     description:
       name: fk_user_agent
       name: fk_user_agent
       url: "https://pub.dartlang.org"
       url: "https://pub.dartlang.org"
     source: hosted
     source: hosted
-    version: "2.0.1"
+    version: "2.1.0"
   flutter:
   flutter:
     dependency: "direct main"
     dependency: "direct main"
     description: flutter
     description: flutter
@@ -355,7 +378,7 @@ packages:
       name: flutter_blurhash
       name: flutter_blurhash
       url: "https://pub.dartlang.org"
       url: "https://pub.dartlang.org"
     source: hosted
     source: hosted
-    version: "0.6.0"
+    version: "0.7.0"
   flutter_cache_manager:
   flutter_cache_manager:
     dependency: "direct main"
     dependency: "direct main"
     description:
     description:
@@ -376,7 +399,7 @@ packages:
       name: flutter_easyloading
       name: flutter_easyloading
       url: "https://pub.dartlang.org"
       url: "https://pub.dartlang.org"
     source: hosted
     source: hosted
-    version: "3.0.0"
+    version: "3.0.3"
   flutter_email_sender:
   flutter_email_sender:
     dependency: "direct main"
     dependency: "direct main"
     description:
     description:
@@ -397,14 +420,14 @@ packages:
       name: flutter_inappwebview
       name: flutter_inappwebview
       url: "https://pub.dartlang.org"
       url: "https://pub.dartlang.org"
     source: hosted
     source: hosted
-    version: "5.3.2"
+    version: "5.4.3+7"
   flutter_keyboard_visibility:
   flutter_keyboard_visibility:
     dependency: transitive
     dependency: transitive
     description:
     description:
       name: flutter_keyboard_visibility
       name: flutter_keyboard_visibility
       url: "https://pub.dartlang.org"
       url: "https://pub.dartlang.org"
     source: hosted
     source: hosted
-    version: "5.0.3"
+    version: "5.2.0"
   flutter_keyboard_visibility_platform_interface:
   flutter_keyboard_visibility_platform_interface:
     dependency: transitive
     dependency: transitive
     description:
     description:
@@ -432,14 +455,21 @@ packages:
       name: flutter_local_notifications
       name: flutter_local_notifications
       url: "https://pub.dartlang.org"
       url: "https://pub.dartlang.org"
     source: hosted
     source: hosted
-    version: "8.2.0"
+    version: "9.5.3+1"
+  flutter_local_notifications_linux:
+    dependency: transitive
+    description:
+      name: flutter_local_notifications_linux
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "0.4.2"
   flutter_local_notifications_platform_interface:
   flutter_local_notifications_platform_interface:
     dependency: transitive
     dependency: transitive
     description:
     description:
       name: flutter_local_notifications_platform_interface
       name: flutter_local_notifications_platform_interface
       url: "https://pub.dartlang.org"
       url: "https://pub.dartlang.org"
     source: hosted
     source: hosted
-    version: "4.0.1"
+    version: "5.0.0"
   flutter_localizations:
   flutter_localizations:
     dependency: "direct main"
     dependency: "direct main"
     description: flutter
     description: flutter
@@ -465,14 +495,14 @@ packages:
       name: flutter_plugin_android_lifecycle
       name: flutter_plugin_android_lifecycle
       url: "https://pub.dartlang.org"
       url: "https://pub.dartlang.org"
     source: hosted
     source: hosted
-    version: "2.0.2"
+    version: "2.0.6"
   flutter_secure_storage:
   flutter_secure_storage:
     dependency: "direct main"
     dependency: "direct main"
     description:
     description:
       name: flutter_secure_storage
       name: flutter_secure_storage
       url: "https://pub.dartlang.org"
       url: "https://pub.dartlang.org"
     source: hosted
     source: hosted
-    version: "4.2.0"
+    version: "4.2.1"
   flutter_sodium:
   flutter_sodium:
     dependency: "direct main"
     dependency: "direct main"
     description:
     description:
@@ -486,7 +516,7 @@ packages:
       name: flutter_spinkit
       name: flutter_spinkit
       url: "https://pub.dartlang.org"
       url: "https://pub.dartlang.org"
     source: hosted
     source: hosted
-    version: "5.0.0"
+    version: "5.1.0"
   flutter_test:
   flutter_test:
     dependency: "direct dev"
     dependency: "direct dev"
     description: flutter
     description: flutter
@@ -498,7 +528,7 @@ packages:
       name: flutter_typeahead
       name: flutter_typeahead
       url: "https://pub.dartlang.org"
       url: "https://pub.dartlang.org"
     source: hosted
     source: hosted
-    version: "3.2.1"
+    version: "4.0.0"
   flutter_web_plugins:
   flutter_web_plugins:
     dependency: transitive
     dependency: transitive
     description: flutter
     description: flutter
@@ -510,7 +540,7 @@ packages:
       name: flutter_widget_from_html_core
       name: flutter_widget_from_html_core
       url: "https://pub.dartlang.org"
       url: "https://pub.dartlang.org"
     source: hosted
     source: hosted
-    version: "0.6.2"
+    version: "0.8.5+3"
   flutter_windowmanager:
   flutter_windowmanager:
     dependency: "direct main"
     dependency: "direct main"
     description:
     description:
@@ -524,21 +554,28 @@ packages:
       name: fluttercontactpicker
       name: fluttercontactpicker
       url: "https://pub.dartlang.org"
       url: "https://pub.dartlang.org"
     source: hosted
     source: hosted
-    version: "4.4.0"
+    version: "4.7.0"
   fluttertoast:
   fluttertoast:
     dependency: "direct main"
     dependency: "direct main"
     description:
     description:
       name: fluttertoast
       name: fluttertoast
       url: "https://pub.dartlang.org"
       url: "https://pub.dartlang.org"
     source: hosted
     source: hosted
-    version: "8.0.7"
+    version: "8.0.9"
+  fwfh_text_style:
+    dependency: transitive
+    description:
+      name: fwfh_text_style
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "2.7.3+2"
   google_nav_bar:
   google_nav_bar:
     dependency: "direct main"
     dependency: "direct main"
     description:
     description:
       name: google_nav_bar
       name: google_nav_bar
       url: "https://pub.dartlang.org"
       url: "https://pub.dartlang.org"
     source: hosted
     source: hosted
-    version: "5.0.5"
+    version: "5.0.6"
   hex:
   hex:
     dependency: transitive
     dependency: transitive
     description:
     description:
@@ -559,7 +596,7 @@ packages:
       name: http
       name: http
       url: "https://pub.dartlang.org"
       url: "https://pub.dartlang.org"
     source: hosted
     source: hosted
-    version: "0.13.3"
+    version: "0.13.4"
   http_client_helper:
   http_client_helper:
     dependency: transitive
     dependency: transitive
     description:
     description:
@@ -580,21 +617,21 @@ packages:
       name: image
       name: image
       url: "https://pub.dartlang.org"
       url: "https://pub.dartlang.org"
     source: hosted
     source: hosted
-    version: "3.0.2"
+    version: "3.1.3"
   image_editor:
   image_editor:
     dependency: "direct main"
     dependency: "direct main"
     description:
     description:
       name: image_editor
       name: image_editor
       url: "https://pub.dartlang.org"
       url: "https://pub.dartlang.org"
     source: hosted
     source: hosted
-    version: "1.0.1"
+    version: "1.0.2"
   implicitly_animated_reorderable_list:
   implicitly_animated_reorderable_list:
     dependency: "direct main"
     dependency: "direct main"
     description:
     description:
       name: implicitly_animated_reorderable_list
       name: implicitly_animated_reorderable_list
       url: "https://pub.dartlang.org"
       url: "https://pub.dartlang.org"
     source: hosted
     source: hosted
-    version: "0.4.0"
+    version: "0.4.2"
   in_app_purchase:
   in_app_purchase:
     dependency: "direct main"
     dependency: "direct main"
     description:
     description:
@@ -615,21 +652,21 @@ packages:
       name: js
       name: js
       url: "https://pub.dartlang.org"
       url: "https://pub.dartlang.org"
     source: hosted
     source: hosted
-    version: "0.6.3"
+    version: "0.6.4"
   json_annotation:
   json_annotation:
     dependency: transitive
     dependency: transitive
     description:
     description:
       name: json_annotation
       name: json_annotation
       url: "https://pub.dartlang.org"
       url: "https://pub.dartlang.org"
     source: hosted
     source: hosted
-    version: "4.1.0"
+    version: "4.5.0"
   like_button:
   like_button:
     dependency: "direct main"
     dependency: "direct main"
     description:
     description:
       name: like_button
       name: like_button
       url: "https://pub.dartlang.org"
       url: "https://pub.dartlang.org"
     source: hosted
     source: hosted
-    version: "2.0.2"
+    version: "2.0.4"
   lints:
   lints:
     dependency: "direct dev"
     dependency: "direct dev"
     description:
     description:
@@ -650,14 +687,21 @@ packages:
       name: local_auth
       name: local_auth
       url: "https://pub.dartlang.org"
       url: "https://pub.dartlang.org"
     source: hosted
     source: hosted
-    version: "1.1.6"
+    version: "1.1.11"
   logging:
   logging:
     dependency: "direct main"
     dependency: "direct main"
     description:
     description:
       name: logging
       name: logging
       url: "https://pub.dartlang.org"
       url: "https://pub.dartlang.org"
     source: hosted
     source: hosted
-    version: "1.0.1"
+    version: "1.0.2"
+  lottie:
+    dependency: "direct main"
+    description:
+      name: lottie
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "1.3.0"
   matcher:
   matcher:
     dependency: transitive
     dependency: transitive
     description:
     description:
@@ -665,6 +709,13 @@ packages:
       url: "https://pub.dartlang.org"
       url: "https://pub.dartlang.org"
     source: hosted
     source: hosted
     version: "0.12.11"
     version: "0.12.11"
+  material_color_utilities:
+    dependency: transitive
+    description:
+      name: material_color_utilities
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "0.1.4"
   meta:
   meta:
     dependency: transitive
     dependency: transitive
     description:
     description:
@@ -678,7 +729,7 @@ packages:
       name: mime
       name: mime
       url: "https://pub.dartlang.org"
       url: "https://pub.dartlang.org"
     source: hosted
     source: hosted
-    version: "1.0.0"
+    version: "1.0.2"
   motionphoto:
   motionphoto:
     dependency: "direct main"
     dependency: "direct main"
     description:
     description:
@@ -708,7 +759,7 @@ packages:
       name: octo_image
       name: octo_image
       url: "https://pub.dartlang.org"
       url: "https://pub.dartlang.org"
     source: hosted
     source: hosted
-    version: "1.0.0+1"
+    version: "1.0.2"
   open_file:
   open_file:
     dependency: "direct main"
     dependency: "direct main"
     description:
     description:
@@ -722,21 +773,21 @@ packages:
       name: package_info_plus
       name: package_info_plus
       url: "https://pub.dartlang.org"
       url: "https://pub.dartlang.org"
     source: hosted
     source: hosted
-    version: "1.3.0"
+    version: "1.4.2"
   package_info_plus_linux:
   package_info_plus_linux:
     dependency: transitive
     dependency: transitive
     description:
     description:
       name: package_info_plus_linux
       name: package_info_plus_linux
       url: "https://pub.dartlang.org"
       url: "https://pub.dartlang.org"
     source: hosted
     source: hosted
-    version: "1.0.3"
+    version: "1.0.5"
   package_info_plus_macos:
   package_info_plus_macos:
     dependency: transitive
     dependency: transitive
     description:
     description:
       name: package_info_plus_macos
       name: package_info_plus_macos
       url: "https://pub.dartlang.org"
       url: "https://pub.dartlang.org"
     source: hosted
     source: hosted
-    version: "1.2.0"
+    version: "1.3.0"
   package_info_plus_platform_interface:
   package_info_plus_platform_interface:
     dependency: transitive
     dependency: transitive
     description:
     description:
@@ -750,63 +801,77 @@ packages:
       name: package_info_plus_web
       name: package_info_plus_web
       url: "https://pub.dartlang.org"
       url: "https://pub.dartlang.org"
     source: hosted
     source: hosted
-    version: "1.0.4"
+    version: "1.0.5"
   package_info_plus_windows:
   package_info_plus_windows:
     dependency: transitive
     dependency: transitive
     description:
     description:
       name: package_info_plus_windows
       name: package_info_plus_windows
       url: "https://pub.dartlang.org"
       url: "https://pub.dartlang.org"
     source: hosted
     source: hosted
-    version: "1.0.4"
+    version: "1.0.5"
   page_transition:
   page_transition:
     dependency: "direct main"
     dependency: "direct main"
     description:
     description:
       name: page_transition
       name: page_transition
       url: "https://pub.dartlang.org"
       url: "https://pub.dartlang.org"
     source: hosted
     source: hosted
-    version: "2.0.2"
+    version: "2.0.5"
   path:
   path:
     dependency: transitive
     dependency: transitive
     description:
     description:
       name: path
       name: path
       url: "https://pub.dartlang.org"
       url: "https://pub.dartlang.org"
     source: hosted
     source: hosted
-    version: "1.8.0"
+    version: "1.8.1"
   path_provider:
   path_provider:
     dependency: "direct main"
     dependency: "direct main"
     description:
     description:
       name: path_provider
       name: path_provider
       url: "https://pub.dartlang.org"
       url: "https://pub.dartlang.org"
     source: hosted
     source: hosted
-    version: "2.0.2"
+    version: "2.0.10"
+  path_provider_android:
+    dependency: transitive
+    description:
+      name: path_provider_android
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "2.0.14"
+  path_provider_ios:
+    dependency: transitive
+    description:
+      name: path_provider_ios
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "2.0.9"
   path_provider_linux:
   path_provider_linux:
     dependency: transitive
     dependency: transitive
     description:
     description:
       name: path_provider_linux
       name: path_provider_linux
       url: "https://pub.dartlang.org"
       url: "https://pub.dartlang.org"
     source: hosted
     source: hosted
-    version: "2.0.0"
+    version: "2.1.6"
   path_provider_macos:
   path_provider_macos:
     dependency: transitive
     dependency: transitive
     description:
     description:
       name: path_provider_macos
       name: path_provider_macos
       url: "https://pub.dartlang.org"
       url: "https://pub.dartlang.org"
     source: hosted
     source: hosted
-    version: "2.0.0"
+    version: "2.0.6"
   path_provider_platform_interface:
   path_provider_platform_interface:
     dependency: transitive
     dependency: transitive
     description:
     description:
       name: path_provider_platform_interface
       name: path_provider_platform_interface
       url: "https://pub.dartlang.org"
       url: "https://pub.dartlang.org"
     source: hosted
     source: hosted
-    version: "2.0.1"
+    version: "2.0.4"
   path_provider_windows:
   path_provider_windows:
     dependency: transitive
     dependency: transitive
     description:
     description:
       name: path_provider_windows
       name: path_provider_windows
       url: "https://pub.dartlang.org"
       url: "https://pub.dartlang.org"
     source: hosted
     source: hosted
-    version: "2.0.1"
+    version: "2.0.6"
   pedantic:
   pedantic:
     dependency: "direct main"
     dependency: "direct main"
     description:
     description:
@@ -820,7 +885,7 @@ packages:
       name: permission_handler
       name: permission_handler
       url: "https://pub.dartlang.org"
       url: "https://pub.dartlang.org"
     source: hosted
     source: hosted
-    version: "8.2.2"
+    version: "8.3.0"
   permission_handler_platform_interface:
   permission_handler_platform_interface:
     dependency: transitive
     dependency: transitive
     description:
     description:
@@ -834,16 +899,14 @@ packages:
       name: petitparser
       name: petitparser
       url: "https://pub.dartlang.org"
       url: "https://pub.dartlang.org"
     source: hosted
     source: hosted
-    version: "4.3.0"
+    version: "5.0.0"
   photo_manager:
   photo_manager:
     dependency: "direct main"
     dependency: "direct main"
     description:
     description:
-      path: "."
-      ref: HEAD
-      resolved-ref: "474fe1df8504307f98a8390032693203f2f47997"
-      url: "https://github.com/ente-io/flutter_photo_manager.git"
-    source: git
-    version: "1.3.6"
+      name: photo_manager
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "2.1.1"
   photo_view:
   photo_view:
     dependency: "direct main"
     dependency: "direct main"
     description:
     description:
@@ -856,10 +919,10 @@ packages:
     description:
     description:
       path: "."
       path: "."
       ref: HEAD
       ref: HEAD
-      resolved-ref: b4711f50a9e6143f44274184e5a088274fb0e5ce
+      resolved-ref: "0c21c6098c201dca2e017f0d117f281adb0920c0"
       url: "https://github.com/apgapg/pie_chart.git"
       url: "https://github.com/apgapg/pie_chart.git"
     source: git
     source: git
-    version: "5.0.0"
+    version: "5.3.0"
   pinput:
   pinput:
     dependency: "direct main"
     dependency: "direct main"
     description:
     description:
@@ -873,42 +936,42 @@ packages:
       name: platform
       name: platform
       url: "https://pub.dartlang.org"
       url: "https://pub.dartlang.org"
     source: hosted
     source: hosted
-    version: "3.0.0"
+    version: "3.1.0"
   plugin_platform_interface:
   plugin_platform_interface:
     dependency: transitive
     dependency: transitive
     description:
     description:
       name: plugin_platform_interface
       name: plugin_platform_interface
       url: "https://pub.dartlang.org"
       url: "https://pub.dartlang.org"
     source: hosted
     source: hosted
-    version: "2.0.0"
+    version: "2.1.2"
   pointycastle:
   pointycastle:
     dependency: transitive
     dependency: transitive
     description:
     description:
       name: pointycastle
       name: pointycastle
       url: "https://pub.dartlang.org"
       url: "https://pub.dartlang.org"
     source: hosted
     source: hosted
-    version: "3.4.0"
+    version: "3.6.0"
   process:
   process:
     dependency: transitive
     dependency: transitive
     description:
     description:
       name: process
       name: process
       url: "https://pub.dartlang.org"
       url: "https://pub.dartlang.org"
     source: hosted
     source: hosted
-    version: "4.2.1"
+    version: "4.2.4"
   provider:
   provider:
     dependency: "direct main"
     dependency: "direct main"
     description:
     description:
       name: provider
       name: provider
       url: "https://pub.dartlang.org"
       url: "https://pub.dartlang.org"
     source: hosted
     source: hosted
-    version: "6.0.1"
+    version: "6.0.2"
   quiver:
   quiver:
     dependency: "direct main"
     dependency: "direct main"
     description:
     description:
       name: quiver
       name: quiver
       url: "https://pub.dartlang.org"
       url: "https://pub.dartlang.org"
     source: hosted
     source: hosted
-    version: "3.0.1"
+    version: "3.1.0"
   receive_sharing_intent:
   receive_sharing_intent:
     dependency: "direct main"
     dependency: "direct main"
     description:
     description:
@@ -922,14 +985,14 @@ packages:
       name: rxdart
       name: rxdart
       url: "https://pub.dartlang.org"
       url: "https://pub.dartlang.org"
     source: hosted
     source: hosted
-    version: "0.27.2"
+    version: "0.27.3"
   scrollable_positioned_list:
   scrollable_positioned_list:
     dependency: "direct main"
     dependency: "direct main"
     description:
     description:
       name: scrollable_positioned_list
       name: scrollable_positioned_list
       url: "https://pub.dartlang.org"
       url: "https://pub.dartlang.org"
     source: hosted
     source: hosted
-    version: "0.2.2"
+    version: "0.2.3"
   sensors:
   sensors:
     dependency: transitive
     dependency: transitive
     description:
     description:
@@ -943,14 +1006,14 @@ packages:
       name: sentry
       name: sentry
       url: "https://pub.dartlang.org"
       url: "https://pub.dartlang.org"
     source: hosted
     source: hosted
-    version: "5.1.0"
+    version: "6.5.1"
   sentry_flutter:
   sentry_flutter:
     dependency: transitive
     dependency: transitive
     description:
     description:
       name: sentry_flutter
       name: sentry_flutter
       url: "https://pub.dartlang.org"
       url: "https://pub.dartlang.org"
     source: hosted
     source: hosted
-    version: "5.1.0"
+    version: "6.5.1"
   share:
   share:
     dependency: transitive
     dependency: transitive
     description:
     description:
@@ -1006,21 +1069,35 @@ packages:
       name: shared_preferences
       name: shared_preferences
       url: "https://pub.dartlang.org"
       url: "https://pub.dartlang.org"
     source: hosted
     source: hosted
-    version: "2.0.6"
+    version: "2.0.15"
+  shared_preferences_android:
+    dependency: transitive
+    description:
+      name: shared_preferences_android
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "2.0.12"
+  shared_preferences_ios:
+    dependency: transitive
+    description:
+      name: shared_preferences_ios
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "2.1.1"
   shared_preferences_linux:
   shared_preferences_linux:
     dependency: transitive
     dependency: transitive
     description:
     description:
       name: shared_preferences_linux
       name: shared_preferences_linux
       url: "https://pub.dartlang.org"
       url: "https://pub.dartlang.org"
     source: hosted
     source: hosted
-    version: "2.0.0"
+    version: "2.1.1"
   shared_preferences_macos:
   shared_preferences_macos:
     dependency: transitive
     dependency: transitive
     description:
     description:
       name: shared_preferences_macos
       name: shared_preferences_macos
       url: "https://pub.dartlang.org"
       url: "https://pub.dartlang.org"
     source: hosted
     source: hosted
-    version: "2.0.0"
+    version: "2.0.4"
   shared_preferences_platform_interface:
   shared_preferences_platform_interface:
     dependency: transitive
     dependency: transitive
     description:
     description:
@@ -1034,14 +1111,14 @@ packages:
       name: shared_preferences_web
       name: shared_preferences_web
       url: "https://pub.dartlang.org"
       url: "https://pub.dartlang.org"
     source: hosted
     source: hosted
-    version: "2.0.0"
+    version: "2.0.4"
   shared_preferences_windows:
   shared_preferences_windows:
     dependency: transitive
     dependency: transitive
     description:
     description:
       name: shared_preferences_windows
       name: shared_preferences_windows
       url: "https://pub.dartlang.org"
       url: "https://pub.dartlang.org"
     source: hosted
     source: hosted
-    version: "2.0.0"
+    version: "2.1.1"
   sky_engine:
   sky_engine:
     dependency: transitive
     dependency: transitive
     description: flutter
     description: flutter
@@ -1053,7 +1130,7 @@ packages:
       name: source_span
       name: source_span
       url: "https://pub.dartlang.org"
       url: "https://pub.dartlang.org"
     source: hosted
     source: hosted
-    version: "1.8.1"
+    version: "1.8.2"
   sprintf:
   sprintf:
     dependency: transitive
     dependency: transitive
     description:
     description:
@@ -1067,14 +1144,14 @@ packages:
       name: sqflite
       name: sqflite
       url: "https://pub.dartlang.org"
       url: "https://pub.dartlang.org"
     source: hosted
     source: hosted
-    version: "2.0.0+3"
+    version: "2.0.2+1"
   sqflite_common:
   sqflite_common:
     dependency: transitive
     dependency: transitive
     description:
     description:
       name: sqflite_common
       name: sqflite_common
       url: "https://pub.dartlang.org"
       url: "https://pub.dartlang.org"
     source: hosted
     source: hosted
-    version: "2.0.0+2"
+    version: "2.2.1+1"
   sqflite_migration:
   sqflite_migration:
     dependency: "direct main"
     dependency: "direct main"
     description:
     description:
@@ -1089,6 +1166,13 @@ packages:
       url: "https://pub.dartlang.org"
       url: "https://pub.dartlang.org"
     source: hosted
     source: hosted
     version: "1.10.0"
     version: "1.10.0"
+  step_progress_indicator:
+    dependency: "direct main"
+    description:
+      name: step_progress_indicator
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "1.0.2"
   stream_channel:
   stream_channel:
     dependency: transitive
     dependency: transitive
     description:
     description:
@@ -1116,21 +1200,21 @@ packages:
       name: syncfusion_flutter_core
       name: syncfusion_flutter_core
       url: "https://pub.dartlang.org"
       url: "https://pub.dartlang.org"
     source: hosted
     source: hosted
-    version: "19.2.49"
+    version: "19.4.56"
   syncfusion_flutter_sliders:
   syncfusion_flutter_sliders:
     dependency: "direct main"
     dependency: "direct main"
     description:
     description:
       name: syncfusion_flutter_sliders
       name: syncfusion_flutter_sliders
       url: "https://pub.dartlang.org"
       url: "https://pub.dartlang.org"
     source: hosted
     source: hosted
-    version: "19.2.49"
+    version: "19.4.56"
   synchronized:
   synchronized:
     dependency: transitive
     dependency: transitive
     description:
     description:
       name: synchronized
       name: synchronized
       url: "https://pub.dartlang.org"
       url: "https://pub.dartlang.org"
     source: hosted
     source: hosted
-    version: "3.0.0"
+    version: "3.0.0+2"
   term_glyph:
   term_glyph:
     dependency: transitive
     dependency: transitive
     description:
     description:
@@ -1144,7 +1228,7 @@ packages:
       name: test_api
       name: test_api
       url: "https://pub.dartlang.org"
       url: "https://pub.dartlang.org"
     source: hosted
     source: hosted
-    version: "0.4.3"
+    version: "0.4.9"
   timezone:
   timezone:
     dependency: transitive
     dependency: transitive
     description:
     description:
@@ -1165,7 +1249,7 @@ packages:
       name: typed_data
       name: typed_data
       url: "https://pub.dartlang.org"
       url: "https://pub.dartlang.org"
     source: hosted
     source: hosted
-    version: "1.3.0"
+    version: "1.3.1"
   uni_links:
   uni_links:
     dependency: "direct main"
     dependency: "direct main"
     description:
     description:
@@ -1200,56 +1284,70 @@ packages:
       name: url_launcher
       name: url_launcher
       url: "https://pub.dartlang.org"
       url: "https://pub.dartlang.org"
     source: hosted
     source: hosted
-    version: "6.0.4"
+    version: "6.1.2"
+  url_launcher_android:
+    dependency: transitive
+    description:
+      name: url_launcher_android
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "6.0.17"
+  url_launcher_ios:
+    dependency: transitive
+    description:
+      name: url_launcher_ios
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "6.0.16"
   url_launcher_linux:
   url_launcher_linux:
     dependency: transitive
     dependency: transitive
     description:
     description:
       name: url_launcher_linux
       name: url_launcher_linux
       url: "https://pub.dartlang.org"
       url: "https://pub.dartlang.org"
     source: hosted
     source: hosted
-    version: "2.0.0"
+    version: "3.0.1"
   url_launcher_macos:
   url_launcher_macos:
     dependency: transitive
     dependency: transitive
     description:
     description:
       name: url_launcher_macos
       name: url_launcher_macos
       url: "https://pub.dartlang.org"
       url: "https://pub.dartlang.org"
     source: hosted
     source: hosted
-    version: "2.0.0"
+    version: "3.0.1"
   url_launcher_platform_interface:
   url_launcher_platform_interface:
     dependency: transitive
     dependency: transitive
     description:
     description:
       name: url_launcher_platform_interface
       name: url_launcher_platform_interface
       url: "https://pub.dartlang.org"
       url: "https://pub.dartlang.org"
     source: hosted
     source: hosted
-    version: "2.0.3"
+    version: "2.0.5"
   url_launcher_web:
   url_launcher_web:
     dependency: transitive
     dependency: transitive
     description:
     description:
       name: url_launcher_web
       name: url_launcher_web
       url: "https://pub.dartlang.org"
       url: "https://pub.dartlang.org"
     source: hosted
     source: hosted
-    version: "2.0.0"
+    version: "2.0.11"
   url_launcher_windows:
   url_launcher_windows:
     dependency: transitive
     dependency: transitive
     description:
     description:
       name: url_launcher_windows
       name: url_launcher_windows
       url: "https://pub.dartlang.org"
       url: "https://pub.dartlang.org"
     source: hosted
     source: hosted
-    version: "2.0.0"
+    version: "3.0.1"
   uuid:
   uuid:
     dependency: "direct main"
     dependency: "direct main"
     description:
     description:
       name: uuid
       name: uuid
       url: "https://pub.dartlang.org"
       url: "https://pub.dartlang.org"
     source: hosted
     source: hosted
-    version: "3.0.4"
+    version: "3.0.6"
   vector_math:
   vector_math:
     dependency: transitive
     dependency: transitive
     description:
     description:
       name: vector_math
       name: vector_math
       url: "https://pub.dartlang.org"
       url: "https://pub.dartlang.org"
     source: hosted
     source: hosted
-    version: "2.1.1"
+    version: "2.1.2"
   video_player:
   video_player:
     dependency: "direct main"
     dependency: "direct main"
     description:
     description:
@@ -1277,7 +1375,7 @@ packages:
       name: video_thumbnail
       name: video_thumbnail
       url: "https://pub.dartlang.org"
       url: "https://pub.dartlang.org"
     source: hosted
     source: hosted
-    version: "0.4.3"
+    version: "0.4.6"
   visibility_detector:
   visibility_detector:
     dependency: "direct main"
     dependency: "direct main"
     description:
     description:
@@ -1333,28 +1431,28 @@ packages:
       name: win32
       name: win32
       url: "https://pub.dartlang.org"
       url: "https://pub.dartlang.org"
     source: hosted
     source: hosted
-    version: "2.0.5"
+    version: "2.6.1"
   xdg_directories:
   xdg_directories:
     dependency: transitive
     dependency: transitive
     description:
     description:
       name: xdg_directories
       name: xdg_directories
       url: "https://pub.dartlang.org"
       url: "https://pub.dartlang.org"
     source: hosted
     source: hosted
-    version: "0.2.0"
+    version: "0.2.0+1"
   xml:
   xml:
     dependency: transitive
     dependency: transitive
     description:
     description:
       name: xml
       name: xml
       url: "https://pub.dartlang.org"
       url: "https://pub.dartlang.org"
     source: hosted
     source: hosted
-    version: "5.3.0"
+    version: "5.4.1"
   yaml:
   yaml:
     dependency: transitive
     dependency: transitive
     description:
     description:
       name: yaml
       name: yaml
       url: "https://pub.dartlang.org"
       url: "https://pub.dartlang.org"
     source: hosted
     source: hosted
-    version: "3.1.0"
+    version: "3.1.1"
 sdks:
 sdks:
-  dart: ">=2.14.0 <3.0.0"
-  flutter: ">=2.8.0"
+  dart: ">=2.17.0 <3.0.0"
+  flutter: ">=3.0.0"

+ 11 - 10
pubspec.yaml

@@ -11,13 +11,14 @@ description: ente photos application
 # In iOS, build-name is used as CFBundleShortVersionString while build-number used as CFBundleVersion.
 # In iOS, build-name is used as CFBundleShortVersionString while build-number used as CFBundleVersion.
 # Read more about iOS versioning at
 # Read more about iOS versioning at
 # https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html
 # https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html
-version: 0.5.21+301
+version: 0.5.24+304
 
 
 environment:
 environment:
   sdk: ">=2.10.0 <3.0.0"
   sdk: ">=2.10.0 <3.0.0"
 
 
 dependencies:
 dependencies:
-  alice: ^0.2.4
+  alice:
+    git: "https://github.com/jhomlala/alice.git"
   animate_do: ^2.0.0
   animate_do: ^2.0.0
   archive: ^3.1.2
   archive: ^3.1.2
   background_fetch: ^1.0.1
   background_fetch: ^1.0.1
@@ -36,7 +37,7 @@ dependencies:
   event_bus: ^2.0.0
   event_bus: ^2.0.0
   exif: ^3.0.0
   exif: ^3.0.0
   expansion_tile_card: ^2.0.0
   expansion_tile_card: ^2.0.0
-  extended_image: ^6.0.1
+  extended_image: ^6.2.1
   fast_base58: ^0.2.1
   fast_base58: ^0.2.1
   firebase_core: ^1.10.0
   firebase_core: ^1.10.0
   firebase_messaging: ^11.1.0
   firebase_messaging: ^11.1.0
@@ -50,14 +51,14 @@ dependencies:
   flutter_email_sender: 5.0.2
   flutter_email_sender: 5.0.2
   flutter_image_compress: ^1.1.0
   flutter_image_compress: ^1.1.0
   flutter_inappwebview: ^5.3.2
   flutter_inappwebview: ^5.3.2
-  flutter_local_notifications: ^5.0.0+4
+  flutter_local_notifications: ^9.5.3+1
   flutter_password_strength: ^0.1.6
   flutter_password_strength: ^0.1.6
   flutter_secure_storage: ^4.2.0
   flutter_secure_storage: ^4.2.0
   flutter_sodium: ^0.2.0
   flutter_sodium: ^0.2.0
-  flutter_typeahead: ^3.2.0
+  flutter_typeahead: ^4.0.0
   fk_user_agent: ^2.0.1
   fk_user_agent: ^2.0.1
   flutter_windowmanager: ^0.2.0
   flutter_windowmanager: ^0.2.0
-  fluttercontactpicker: ^4.4.0
+  fluttercontactpicker: ^4.7.0
   fluttertoast: ^8.0.6
   fluttertoast: ^8.0.6
   google_nav_bar: ^5.0.5
   google_nav_bar: ^5.0.5
   image: ^3.0.2
   image: ^3.0.2
@@ -69,6 +70,7 @@ dependencies:
   loading_animations: ^2.1.0
   loading_animations: ^2.1.0
   local_auth: ^1.1.5
   local_auth: ^1.1.5
   logging: ^1.0.1
   logging: ^1.0.1
+  lottie: ^1.2.2
   motionphoto:
   motionphoto:
     git: "https://github.com/ente-io/motionphoto.git"
     git: "https://github.com/ente-io/motionphoto.git"
   move_to_background: ^1.0.2
   move_to_background: ^1.0.2
@@ -77,8 +79,7 @@ dependencies:
   page_transition: ^2.0.2
   page_transition: ^2.0.2
   path_provider: ^2.0.1
   path_provider: ^2.0.1
   pedantic: ^1.9.2
   pedantic: ^1.9.2
-  photo_manager:
-    git: "https://github.com/ente-io/flutter_photo_manager.git"
+  photo_manager: ^2.0.8
   photo_view: ^0.13.0
   photo_view: ^0.13.0
   pie_chart:
   pie_chart:
     git: "https://github.com/apgapg/pie_chart.git"
     git: "https://github.com/apgapg/pie_chart.git"
@@ -87,11 +88,12 @@ dependencies:
   quiver: ^3.0.1
   quiver: ^3.0.1
   receive_sharing_intent: ^1.4.5
   receive_sharing_intent: ^1.4.5
   scrollable_positioned_list: ^0.2.2
   scrollable_positioned_list: ^0.2.2
-  sentry: ^5.0.0
+  sentry: ^6.5.1
   share_plus: ^4.0.4
   share_plus: ^4.0.4
   shared_preferences: ^2.0.5
   shared_preferences: ^2.0.5
   sqflite: ^2.0.0+3
   sqflite: ^2.0.0+3
   sqflite_migration: ^0.3.0
   sqflite_migration: ^0.3.0
+  step_progress_indicator: ^1.0.2
   super_logging:
   super_logging:
     path: thirdparty/super_logging
     path: thirdparty/super_logging
   syncfusion_flutter_core: ^19.2.49
   syncfusion_flutter_core: ^19.2.49
@@ -108,7 +110,6 @@ dependencies:
 
 
 dependency_overrides:
 dependency_overrides:
   provider: ^6.0.1 # for chewie 1.2.2 https://github.com/brianegan/chewie/issues/530
   provider: ^6.0.1 # for chewie 1.2.2 https://github.com/brianegan/chewie/issues/530
-  flutter_local_notifications: ^8.1.1
 
 
 dev_dependencies:
 dev_dependencies:
   flutter_launcher_icons: "0.9.0"
   flutter_launcher_icons: "0.9.0"

+ 1 - 1
thirdparty/super_logging/pubspec.yaml

@@ -17,7 +17,7 @@ dependencies:
   intl: ^0.17.0
   intl: ^0.17.0
   path: ^1.6.4
   path: ^1.6.4
   path_provider: ^2.0.1
   path_provider: ^2.0.1
-  sentry_flutter: ^5.1.0
+  sentry_flutter: ^6.5.1
 
 
 dev_dependencies:
 dev_dependencies:
   flutter_test:
   flutter_test: