diff --git a/.github/workflows/analyze-test.yaml b/.github/workflows/analyze-test.yaml
index 60427c9d44..199df6f10b 100644
--- a/.github/workflows/analyze-test.yaml
+++ b/.github/workflows/analyze-test.yaml
@@ -8,6 +8,9 @@ on:
 
 name: Analyze and test
 
+env:
+  FLUTTER_VERSION: 3.32.8
+
 jobs:
   analyze-test:
     runs-on: ubuntu-latest
@@ -32,7 +35,7 @@ jobs:
       - name: Setup flutter
         uses: subosito/flutter-action@v2
         with:
-          flutter-version: "3.27.4"
+          flutter-version: ${{ env.FLUTTER_VERSION }}
           channel: "stable"
           cache: true
           cache-key: "deps-${{ hashFiles('**/pubspec.lock') }}"
diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml
index 26a0d0876b..d32d939aba 100644
--- a/.github/workflows/build.yaml
+++ b/.github/workflows/build.yaml
@@ -6,7 +6,7 @@ on:
 name: Build dev binaries
 
 env:
-  FLUTTER_VERSION: 3.27.4
+  FLUTTER_VERSION: 3.32.8
   XCODE_VERSION: 16.0
 
 jobs:
diff --git a/.github/workflows/gh-pages.yaml b/.github/workflows/gh-pages.yaml
index 64bf3ea546..b00085d004 100644
--- a/.github/workflows/gh-pages.yaml
+++ b/.github/workflows/gh-pages.yaml
@@ -6,7 +6,7 @@ on:
 name: Deploy PR on Github Pages
 
 env:
-  FLUTTER_VERSION: 3.27.4
+  FLUTTER_VERSION: 3.32.8
 
 concurrency:
   group: ${{ github.workflow }}-${{ github.ref }}
diff --git a/.github/workflows/patrol-integration-test.yaml b/.github/workflows/patrol-integration-test.yaml
index b7d59dbccb..e9a89f7440 100644
--- a/.github/workflows/patrol-integration-test.yaml
+++ b/.github/workflows/patrol-integration-test.yaml
@@ -7,7 +7,7 @@ on:
 
 env:
   JAVA_VERSION: 17
-  FLUTTER_VERSION: 3.27.4
+  FLUTTER_VERSION: 3.32.8
 
 jobs:
   mobile_integration_test:
diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml
index 2007084457..65ec1bb0a2 100644
--- a/.github/workflows/release.yaml
+++ b/.github/workflows/release.yaml
@@ -6,7 +6,7 @@ on:
 name: Release
 
 env:
-  FLUTTER_VERSION: 3.27.4
+  FLUTTER_VERSION: 3.32.8
   XCODE_VERSION: 16.0
 
 jobs:
diff --git a/Dockerfile b/Dockerfile
index 52bf78623d..fa35979b02 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -1,9 +1,7 @@
-ARG FLUTTER_VERSION=3.27.4
+ARG FLUTTER_VERSION=3.32.8
 # Stage 1 - Install dependencies and build the app
 # This matches the flutter version on our CI/CD pipeline on Github
-# FROM --platform=amd64 ghcr.io/cirruslabs/flutter:${FLUTTER_VERSION} AS build-env
 FROM --platform=amd64 ghcr.io/instrumentisto/flutter:${FLUTTER_VERSION} AS build-env
-# TODO: Revert back to cirruslabs when upgrade Flutter pass 3.27.4, as this tag is missing for cirruslabs
 
 # Set directory to Copy App
 WORKDIR /app
diff --git a/android/app/build.gradle b/android/app/build.gradle
index 2fe2071a2b..d51c3d681a 100644
--- a/android/app/build.gradle
+++ b/android/app/build.gradle
@@ -35,6 +35,7 @@ if (keystorePropertiesFile.exists()) {
 
 android {
     compileSdk 35
+    ndkVersion "28.2.13676358"
 
     sourceSets {
         main.java.srcDirs += 'src/main/kotlin'
diff --git a/android/app/src/debug/AndroidManifest.xml b/android/app/src/debug/AndroidManifest.xml
index 7a68d1b864..f880684a6a 100644
--- a/android/app/src/debug/AndroidManifest.xml
+++ b/android/app/src/debug/AndroidManifest.xml
@@ -3,12 +3,4 @@
          to allow setting breakpoints, to provide hot reload, etc.
     -->
     
-
-    
-        
-        
-    
 
diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml
index 99702c146b..7b9ba35269 100644
--- a/android/app/src/main/AndroidManifest.xml
+++ b/android/app/src/main/AndroidManifest.xml
@@ -4,6 +4,9 @@
     
     
     
+    
 
     
     
diff --git a/android/gradle.properties b/android/gradle.properties
index c0d3f63be4..005accfb27 100644
--- a/android/gradle.properties
+++ b/android/gradle.properties
@@ -1,7 +1,8 @@
-org.gradle.jvmargs=-Xmx1536M
+org.gradle.jvmargs=-Xmx4096M
 android.useAndroidX=true
 android.enableJetifier=true
 android.jetifier.ignorelist=bcprov-jdk15on-1.68.jar
 android.defaults.buildfeatures.buildconfig=true
 android.nonTransitiveRClass=false
-android.nonFinalResIds=false
\ No newline at end of file
+android.nonFinalResIds=false
+kotlin.jvm.target.validation.mode = IGNORE
\ No newline at end of file
diff --git a/android/settings.gradle b/android/settings.gradle
index 9d973ea166..1ab6b86203 100644
--- a/android/settings.gradle
+++ b/android/settings.gradle
@@ -18,7 +18,7 @@ pluginManagement {
 
 plugins {
     id "dev.flutter.flutter-plugin-loader" version "1.0.0"
-    id "com.android.application" version '8.4.1' apply false
+    id "com.android.application" version '8.5.2' apply false
     id "org.jetbrains.kotlin.android" version "1.9.21" apply false
     id "com.google.gms.google-services" version "4.3.10" apply false
 }
diff --git a/contact/pubspec.lock b/contact/pubspec.lock
index 6a28553b56..6b769c2623 100644
--- a/contact/pubspec.lock
+++ b/contact/pubspec.lock
@@ -37,10 +37,10 @@ packages:
     dependency: transitive
     description:
       name: async
-      sha256: "947bfcf187f74dbc5e146c9eb9c0f10c9f8b30743e341481c1e2ed3ecc18c20c"
+      sha256: "758e6d74e971c3e5aceb4110bfd6698efc7f501675bcfe0c775459a8140750eb"
       url: "https://pub.dev"
     source: hosted
-    version: "2.11.0"
+    version: "2.13.0"
   barcode:
     dependency: transitive
     description:
@@ -61,10 +61,10 @@ packages:
     dependency: transitive
     description:
       name: boolean_selector
-      sha256: "6cfb5af12253eaf2b368f07bacc5a80d1301a071c73360d746b7f2e32d762c66"
+      sha256: "8aab1771e1243a5063b8b0ff68042d67334e3feab9e95b9490f9a6ebf73b42ea"
       url: "https://pub.dev"
     source: hosted
-    version: "2.1.1"
+    version: "2.1.2"
   build:
     dependency: transitive
     description:
@@ -133,10 +133,10 @@ packages:
     dependency: transitive
     description:
       name: characters
-      sha256: "04a925763edad70e8443c99234dc3328f442e811f1d8fd1a72f1c8ad0f69a605"
+      sha256: f71061c654a3380576a52b451dd5532377954cf9dbd272a78fc8479606670803
       url: "https://pub.dev"
     source: hosted
-    version: "1.3.0"
+    version: "1.4.0"
   charcode:
     dependency: transitive
     description:
@@ -157,10 +157,10 @@ packages:
     dependency: transitive
     description:
       name: clock
-      sha256: cb6d7f03e1de671e34607e909a7213e31d7752be4fb66a86d29fe1eb14bfb5cf
+      sha256: fddb70d9b5277016c77a80201021d40a2247104d9f4aa7bab7157b7e3f05b84b
       url: "https://pub.dev"
     source: hosted
-    version: "1.1.1"
+    version: "1.1.2"
   code_builder:
     dependency: transitive
     description:
@@ -173,10 +173,10 @@ packages:
     dependency: transitive
     description:
       name: collection
-      sha256: a1ace0a119f20aabc852d165077c036cd864315bd99b7eaa10a60100341941bf
+      sha256: "2f5709ae4d3d59dd8f7cd309b4e023046b57d8a6c82130785d2b0e5868084e76"
       url: "https://pub.dev"
     source: hosted
-    version: "1.19.0"
+    version: "1.19.1"
   convert:
     dependency: transitive
     description:
@@ -284,10 +284,10 @@ packages:
     dependency: transitive
     description:
       name: fake_async
-      sha256: "511392330127add0b769b75a987850d136345d9227c6b94c96a04cf4a391bf78"
+      sha256: "5368f224a74523e8d2e7399ea1638b37aecfca824a3cc4dfdf77bf1fa905ac44"
       url: "https://pub.dev"
     source: hosted
-    version: "1.3.1"
+    version: "1.3.3"
   ffi:
     dependency: transitive
     description:
@@ -659,10 +659,10 @@ packages:
     dependency: transitive
     description:
       name: intl
-      sha256: d6f56758b7d3014a48af9701c085700aac781a92a87a62b1333b46d8879661cf
+      sha256: "3df61194eb431efc39c4ceba583b95633a403f46c9fd341e550ce0bfa50e9aa5"
       url: "https://pub.dev"
     source: hosted
-    version: "0.19.0"
+    version: "0.20.2"
   io:
     dependency: transitive
     description:
@@ -708,18 +708,18 @@ packages:
     dependency: transitive
     description:
       name: leak_tracker
-      sha256: "7bb2830ebd849694d1ec25bf1f44582d6ac531a57a365a803a6034ff751d2d06"
+      sha256: "6bb818ecbdffe216e81182c2f0714a2e62b593f4a4f13098713ff1685dfb6ab0"
       url: "https://pub.dev"
     source: hosted
-    version: "10.0.7"
+    version: "10.0.9"
   leak_tracker_flutter_testing:
     dependency: transitive
     description:
       name: leak_tracker_flutter_testing
-      sha256: "9491a714cca3667b60b5c420da8217e6de0d1ba7a5ec322fab01758f6998f379"
+      sha256: f8b613e7e6a13ec79cfdc0e97638fddb3ab848452eff057653abd3edba760573
       url: "https://pub.dev"
     source: hosted
-    version: "3.0.8"
+    version: "3.0.9"
   leak_tracker_testing:
     dependency: transitive
     description:
@@ -756,10 +756,10 @@ packages:
     dependency: transitive
     description:
       name: matcher
-      sha256: d2323aa2060500f906aa31a895b4030b6da3ebdcc5619d14ce1aada65cd161cb
+      sha256: dc58c723c3c24bf8d3e2d3ad3f2f9d7bd9cf43ec6feaa64181775e60190153f2
       url: "https://pub.dev"
     source: hosted
-    version: "0.12.16+1"
+    version: "0.12.17"
   material_color_utilities:
     dependency: transitive
     description:
@@ -772,10 +772,10 @@ packages:
     dependency: transitive
     description:
       name: meta
-      sha256: bdb68674043280c3428e9ec998512fb681678676b3c54e773629ffe74419f8c7
+      sha256: e3641ec5d63ebf0d9b41bd43201a66e3fc79a65db5f61fc181f04cd27aab950c
       url: "https://pub.dev"
     source: hosted
-    version: "1.15.0"
+    version: "1.16.0"
   mime:
     dependency: transitive
     description:
@@ -827,10 +827,10 @@ packages:
     dependency: transitive
     description:
       name: path
-      sha256: "087ce49c3f0dc39180befefc60fdb4acd8f8620e5682fe2476afd0b3688bb4af"
+      sha256: "75cca69d1490965be98c73ceaea117e8a04dd21217b37b292c9ddbec0d955bc5"
       url: "https://pub.dev"
     source: hosted
-    version: "1.9.0"
+    version: "1.9.1"
   path_parsing:
     dependency: transitive
     description:
@@ -1073,26 +1073,26 @@ packages:
     dependency: transitive
     description:
       name: source_span
-      sha256: "53e943d4206a5e30df338fd4c6e7a077e02254531b138a15aec3bd143c1a8b3c"
+      sha256: "254ee5351d6cb365c859e20ee823c3bb479bf4a293c22d17a9f1bf144ce86f7c"
       url: "https://pub.dev"
     source: hosted
-    version: "1.10.0"
+    version: "1.10.1"
   stack_trace:
     dependency: transitive
     description:
       name: stack_trace
-      sha256: "9f47fd3630d76be3ab26f0ee06d213679aa425996925ff3feffdec504931c377"
+      sha256: "8b27215b45d22309b5cddda1aa2b19bdfec9df0e765f2de506401c071d38d1b1"
       url: "https://pub.dev"
     source: hosted
-    version: "1.12.0"
+    version: "1.12.1"
   stream_channel:
     dependency: transitive
     description:
       name: stream_channel
-      sha256: ba2aa5d8cc609d96bbb2899c28934f9e1af5cddbd60a827822ea467161eb54e7
+      sha256: "969e04c80b8bcdf826f8f16579c7b14d780458bd97f56d107d3950fdbeef059d"
       url: "https://pub.dev"
     source: hosted
-    version: "2.1.2"
+    version: "2.1.4"
   stream_transform:
     dependency: transitive
     description:
@@ -1105,26 +1105,26 @@ packages:
     dependency: transitive
     description:
       name: string_scanner
-      sha256: "688af5ed3402a4bde5b3a6c15fd768dbf2621a614950b17f04626c431ab3c4c3"
+      sha256: "921cd31725b72fe181906c6a94d987c78e3b98c2e205b397ea399d4054872b43"
       url: "https://pub.dev"
     source: hosted
-    version: "1.3.0"
+    version: "1.4.1"
   term_glyph:
     dependency: transitive
     description:
       name: term_glyph
-      sha256: a29248a84fbb7c79282b40b8c72a1209db169a2e0542bce341da992fe1bc7e84
+      sha256: "7f554798625ea768a7518313e58f83891c7f5024f88e46e7182a4558850a4b8e"
       url: "https://pub.dev"
     source: hosted
-    version: "1.2.1"
+    version: "1.2.2"
   test_api:
     dependency: transitive
     description:
       name: test_api
-      sha256: "664d3a9a64782fcdeb83ce9c6b39e78fd2971d4e37827b9b06c3aa1edc5e760c"
+      sha256: fb31f383e2ee25fbbfe06b40fe21e1e458d14080e3c67e7ba0acfde4df4e0bbd
       url: "https://pub.dev"
     source: hosted
-    version: "0.7.3"
+    version: "0.7.4"
   timing:
     dependency: transitive
     description:
@@ -1265,10 +1265,10 @@ packages:
     dependency: transitive
     description:
       name: vm_service
-      sha256: f6be3ed8bd01289b34d679c2b62226f63c0e69f9fd2e50a6b3c1c729a961041b
+      sha256: ddfa8d30d89985b96407efce8acbdd124701f96741f2d981ca860662f1c0dc02
       url: "https://pub.dev"
     source: hosted
-    version: "14.3.0"
+    version: "15.0.0"
   watcher:
     dependency: transitive
     description:
@@ -1334,5 +1334,5 @@ packages:
     source: hosted
     version: "3.1.2"
 sdks:
-  dart: ">=3.6.0 <4.0.0"
+  dart: ">=3.7.0-0 <4.0.0"
   flutter: ">=3.27.0"
diff --git a/core/lib/core.dart b/core/lib/core.dart
index 26e13b64f2..d9a84ed798 100644
--- a/core/lib/core.dart
+++ b/core/lib/core.dart
@@ -49,7 +49,6 @@ export 'utils/platform_info.dart';
 export 'utils/file_utils.dart';
 export 'utils/option_param_mixin.dart';
 export 'utils/print_utils.dart';
-export 'utils/broadcast_channel/broadcast_channel.dart';
 export 'utils/list_utils.dart';
 export 'utils/mail/domain.dart';
 export 'utils/mail/mail_address.dart';
diff --git a/core/lib/presentation/views/image/image_loader_mixin.dart b/core/lib/presentation/views/image/image_loader_mixin.dart
index 7c8656b618..3d8e760b32 100644
--- a/core/lib/presentation/views/image/image_loader_mixin.dart
+++ b/core/lib/presentation/views/image/image_loader_mixin.dart
@@ -1,5 +1,6 @@
 
 import 'package:core/utils/app_logger.dart';
+import 'package:core/utils/platform_info.dart';
 import 'package:flutter/cupertino.dart';
 import 'package:flutter/material.dart';
 import 'package:flutter_svg/flutter_svg.dart';
@@ -10,6 +11,10 @@ mixin ImageLoaderMixin {
     required String imagePath,
     double? imageSize
   }) {
+    log('$runtimeType::buildImage: imagePath = $imagePath');
+    if (PlatformInfo.isIntegrationTesting) {
+      return buildNoImage(imageSize ?? 150);
+    }
     if (isImageNetworkLink(imagePath) && isImageSVG(imagePath)) {
       return SvgPicture.network(
         imagePath,
@@ -19,6 +24,9 @@ mixin ImageLoaderMixin {
         placeholderBuilder: (_) {
           return const CupertinoActivityIndicator();
         },
+        errorBuilder: (_, __, ___) {
+          return buildNoImage(imageSize ?? 150);
+        },
       );
     } else if (isImageNetworkLink(imagePath)) {
       return Image.network(
@@ -27,16 +35,10 @@ mixin ImageLoaderMixin {
         width: imageSize ?? 150,
         height: imageSize ?? 150,
         loadingBuilder: (_, child, loadingProgress) {
-          if (loadingProgress != null &&
-              loadingProgress.cumulativeBytesLoaded != loadingProgress.expectedTotalBytes) {
-            return const Center(
-              child: CupertinoActivityIndicator(),
-            );
-          }
-          return child;
+          if (loadingProgress == null) return child;
+          return const Center(child: CupertinoActivityIndicator());
         },
-        errorBuilder: (context, error, stackTrace) {
-          logError('ImageLoaderMixin::buildImage:Exception = $error');
+        errorBuilder: (_, __, ___) {
           return buildNoImage(imageSize ?? 150);
         },
       );
diff --git a/core/lib/utils/broadcast_channel/broadcast_channel.dart b/core/lib/utils/broadcast_channel/broadcast_channel.dart
deleted file mode 100644
index 6ab539e562..0000000000
--- a/core/lib/utils/broadcast_channel/broadcast_channel.dart
+++ /dev/null
@@ -1 +0,0 @@
-export 'broadcast_channel_stub.dart' if (dart.library.html) 'broadcast_channel_web.dart';
\ No newline at end of file
diff --git a/core/lib/utils/broadcast_channel/broadcast_channel_stub.dart b/core/lib/utils/broadcast_channel/broadcast_channel_stub.dart
deleted file mode 100644
index 0bea5d5124..0000000000
--- a/core/lib/utils/broadcast_channel/broadcast_channel_stub.dart
+++ /dev/null
@@ -1,7 +0,0 @@
-class BroadcastChannel {
-  final String name;
-
-  BroadcastChannel(this.name);
-
-  Stream get onMessage => const Stream.empty();
-}
\ No newline at end of file
diff --git a/core/lib/utils/broadcast_channel/broadcast_channel_web.dart b/core/lib/utils/broadcast_channel/broadcast_channel_web.dart
deleted file mode 100644
index 4235926e27..0000000000
--- a/core/lib/utils/broadcast_channel/broadcast_channel_web.dart
+++ /dev/null
@@ -1 +0,0 @@
-export 'dart:html' show BroadcastChannel;
\ No newline at end of file
diff --git a/core/pubspec.lock b/core/pubspec.lock
index 27dc731528..ff2c31c8a7 100644
--- a/core/pubspec.lock
+++ b/core/pubspec.lock
@@ -37,10 +37,10 @@ packages:
     dependency: transitive
     description:
       name: async
-      sha256: "947bfcf187f74dbc5e146c9eb9c0f10c9f8b30743e341481c1e2ed3ecc18c20c"
+      sha256: "758e6d74e971c3e5aceb4110bfd6698efc7f501675bcfe0c775459a8140750eb"
       url: "https://pub.dev"
     source: hosted
-    version: "2.11.0"
+    version: "2.13.0"
   barcode:
     dependency: transitive
     description:
@@ -61,10 +61,10 @@ packages:
     dependency: transitive
     description:
       name: boolean_selector
-      sha256: "6cfb5af12253eaf2b368f07bacc5a80d1301a071c73360d746b7f2e32d762c66"
+      sha256: "8aab1771e1243a5063b8b0ff68042d67334e3feab9e95b9490f9a6ebf73b42ea"
       url: "https://pub.dev"
     source: hosted
-    version: "2.1.1"
+    version: "2.1.2"
   build:
     dependency: transitive
     description:
@@ -133,10 +133,10 @@ packages:
     dependency: transitive
     description:
       name: characters
-      sha256: "04a925763edad70e8443c99234dc3328f442e811f1d8fd1a72f1c8ad0f69a605"
+      sha256: f71061c654a3380576a52b451dd5532377954cf9dbd272a78fc8479606670803
       url: "https://pub.dev"
     source: hosted
-    version: "1.3.0"
+    version: "1.4.0"
   charcode:
     dependency: transitive
     description:
@@ -157,10 +157,10 @@ packages:
     dependency: transitive
     description:
       name: clock
-      sha256: cb6d7f03e1de671e34607e909a7213e31d7752be4fb66a86d29fe1eb14bfb5cf
+      sha256: fddb70d9b5277016c77a80201021d40a2247104d9f4aa7bab7157b7e3f05b84b
       url: "https://pub.dev"
     source: hosted
-    version: "1.1.1"
+    version: "1.1.2"
   code_builder:
     dependency: transitive
     description:
@@ -173,10 +173,10 @@ packages:
     dependency: "direct main"
     description:
       name: collection
-      sha256: a1ace0a119f20aabc852d165077c036cd864315bd99b7eaa10a60100341941bf
+      sha256: "2f5709ae4d3d59dd8f7cd309b4e023046b57d8a6c82130785d2b0e5868084e76"
       url: "https://pub.dev"
     source: hosted
-    version: "1.19.0"
+    version: "1.19.1"
   convert:
     dependency: transitive
     description:
@@ -277,10 +277,10 @@ packages:
     dependency: transitive
     description:
       name: fake_async
-      sha256: "511392330127add0b769b75a987850d136345d9227c6b94c96a04cf4a391bf78"
+      sha256: "5368f224a74523e8d2e7399ea1638b37aecfca824a3cc4dfdf77bf1fa905ac44"
       url: "https://pub.dev"
     source: hosted
-    version: "1.3.1"
+    version: "1.3.3"
   ffi:
     dependency: transitive
     description:
@@ -644,10 +644,10 @@ packages:
     dependency: "direct main"
     description:
       name: intl
-      sha256: d6f56758b7d3014a48af9701c085700aac781a92a87a62b1333b46d8879661cf
+      sha256: "3df61194eb431efc39c4ceba583b95633a403f46c9fd341e550ce0bfa50e9aa5"
       url: "https://pub.dev"
     source: hosted
-    version: "0.19.0"
+    version: "0.20.2"
   io:
     dependency: transitive
     description:
@@ -676,18 +676,18 @@ packages:
     dependency: transitive
     description:
       name: leak_tracker
-      sha256: "7bb2830ebd849694d1ec25bf1f44582d6ac531a57a365a803a6034ff751d2d06"
+      sha256: "6bb818ecbdffe216e81182c2f0714a2e62b593f4a4f13098713ff1685dfb6ab0"
       url: "https://pub.dev"
     source: hosted
-    version: "10.0.7"
+    version: "10.0.9"
   leak_tracker_flutter_testing:
     dependency: transitive
     description:
       name: leak_tracker_flutter_testing
-      sha256: "9491a714cca3667b60b5c420da8217e6de0d1ba7a5ec322fab01758f6998f379"
+      sha256: f8b613e7e6a13ec79cfdc0e97638fddb3ab848452eff057653abd3edba760573
       url: "https://pub.dev"
     source: hosted
-    version: "3.0.8"
+    version: "3.0.9"
   leak_tracker_testing:
     dependency: transitive
     description:
@@ -724,10 +724,10 @@ packages:
     dependency: transitive
     description:
       name: matcher
-      sha256: d2323aa2060500f906aa31a895b4030b6da3ebdcc5619d14ce1aada65cd161cb
+      sha256: dc58c723c3c24bf8d3e2d3ad3f2f9d7bd9cf43ec6feaa64181775e60190153f2
       url: "https://pub.dev"
     source: hosted
-    version: "0.12.16+1"
+    version: "0.12.17"
   material_color_utilities:
     dependency: transitive
     description:
@@ -740,10 +740,10 @@ packages:
     dependency: transitive
     description:
       name: meta
-      sha256: bdb68674043280c3428e9ec998512fb681678676b3c54e773629ffe74419f8c7
+      sha256: e3641ec5d63ebf0d9b41bd43201a66e3fc79a65db5f61fc181f04cd27aab950c
       url: "https://pub.dev"
     source: hosted
-    version: "1.15.0"
+    version: "1.16.0"
   mime:
     dependency: transitive
     description:
@@ -788,10 +788,10 @@ packages:
     dependency: transitive
     description:
       name: path
-      sha256: "087ce49c3f0dc39180befefc60fdb4acd8f8620e5682fe2476afd0b3688bb4af"
+      sha256: "75cca69d1490965be98c73ceaea117e8a04dd21217b37b292c9ddbec0d955bc5"
       url: "https://pub.dev"
     source: hosted
-    version: "1.9.0"
+    version: "1.9.1"
   path_parsing:
     dependency: transitive
     description:
@@ -1018,26 +1018,26 @@ packages:
     dependency: transitive
     description:
       name: source_span
-      sha256: "53e943d4206a5e30df338fd4c6e7a077e02254531b138a15aec3bd143c1a8b3c"
+      sha256: "254ee5351d6cb365c859e20ee823c3bb479bf4a293c22d17a9f1bf144ce86f7c"
       url: "https://pub.dev"
     source: hosted
-    version: "1.10.0"
+    version: "1.10.1"
   stack_trace:
     dependency: transitive
     description:
       name: stack_trace
-      sha256: "9f47fd3630d76be3ab26f0ee06d213679aa425996925ff3feffdec504931c377"
+      sha256: "8b27215b45d22309b5cddda1aa2b19bdfec9df0e765f2de506401c071d38d1b1"
       url: "https://pub.dev"
     source: hosted
-    version: "1.12.0"
+    version: "1.12.1"
   stream_channel:
     dependency: transitive
     description:
       name: stream_channel
-      sha256: ba2aa5d8cc609d96bbb2899c28934f9e1af5cddbd60a827822ea467161eb54e7
+      sha256: "969e04c80b8bcdf826f8f16579c7b14d780458bd97f56d107d3950fdbeef059d"
       url: "https://pub.dev"
     source: hosted
-    version: "2.1.2"
+    version: "2.1.4"
   stream_transform:
     dependency: transitive
     description:
@@ -1050,26 +1050,26 @@ packages:
     dependency: transitive
     description:
       name: string_scanner
-      sha256: "688af5ed3402a4bde5b3a6c15fd768dbf2621a614950b17f04626c431ab3c4c3"
+      sha256: "921cd31725b72fe181906c6a94d987c78e3b98c2e205b397ea399d4054872b43"
       url: "https://pub.dev"
     source: hosted
-    version: "1.3.0"
+    version: "1.4.1"
   term_glyph:
     dependency: transitive
     description:
       name: term_glyph
-      sha256: a29248a84fbb7c79282b40b8c72a1209db169a2e0542bce341da992fe1bc7e84
+      sha256: "7f554798625ea768a7518313e58f83891c7f5024f88e46e7182a4558850a4b8e"
       url: "https://pub.dev"
     source: hosted
-    version: "1.2.1"
+    version: "1.2.2"
   test_api:
     dependency: transitive
     description:
       name: test_api
-      sha256: "664d3a9a64782fcdeb83ce9c6b39e78fd2971d4e37827b9b06c3aa1edc5e760c"
+      sha256: fb31f383e2ee25fbbfe06b40fe21e1e458d14080e3c67e7ba0acfde4df4e0bbd
       url: "https://pub.dev"
     source: hosted
-    version: "0.7.3"
+    version: "0.7.4"
   timing:
     dependency: transitive
     description:
@@ -1202,10 +1202,10 @@ packages:
     dependency: transitive
     description:
       name: vm_service
-      sha256: f6be3ed8bd01289b34d679c2b62226f63c0e69f9fd2e50a6b3c1c729a961041b
+      sha256: ddfa8d30d89985b96407efce8acbdd124701f96741f2d981ca860662f1c0dc02
       url: "https://pub.dev"
     source: hosted
-    version: "14.3.0"
+    version: "15.0.0"
   watcher:
     dependency: transitive
     description:
@@ -1215,7 +1215,7 @@ packages:
     source: hosted
     version: "1.1.0"
   web:
-    dependency: transitive
+    dependency: "direct main"
     description:
       name: web
       sha256: "868d88a33d8a87b18ffc05f9f030ba328ffefba92d6c127917a2ba740f9cfe4a"
@@ -1271,5 +1271,5 @@ packages:
     source: hosted
     version: "3.1.2"
 sdks:
-  dart: ">=3.6.0 <4.0.0"
+  dart: ">=3.7.0-0 <4.0.0"
   flutter: ">=3.27.0"
diff --git a/core/pubspec.yaml b/core/pubspec.yaml
index beec847b06..4c10217ea5 100644
--- a/core/pubspec.yaml
+++ b/core/pubspec.yaml
@@ -75,9 +75,9 @@ dependencies:
 
   path_provider: 2.1.5
 
-  collection: 1.19.0
+  collection: 1.19.1
 
-  intl: 0.19.0
+  intl: 0.20.2
 
   flutter_typeahead: 5.0.2
 
@@ -99,6 +99,8 @@ dependencies:
 
   html_unescape: 2.0.0
 
+  web: 1.1.1
+
 dev_dependencies:
   flutter_test:
     sdk: flutter
diff --git a/cozy/pubspec.lock b/cozy/pubspec.lock
index 2c6aedd312..3fd5249570 100644
--- a/cozy/pubspec.lock
+++ b/cozy/pubspec.lock
@@ -13,10 +13,10 @@ packages:
     dependency: transitive
     description:
       name: async
-      sha256: "947bfcf187f74dbc5e146c9eb9c0f10c9f8b30743e341481c1e2ed3ecc18c20c"
+      sha256: "758e6d74e971c3e5aceb4110bfd6698efc7f501675bcfe0c775459a8140750eb"
       url: "https://pub.dev"
     source: hosted
-    version: "2.11.0"
+    version: "2.13.0"
   auto_size_text:
     dependency: transitive
     description:
@@ -29,34 +29,34 @@ packages:
     dependency: transitive
     description:
       name: boolean_selector
-      sha256: "6cfb5af12253eaf2b368f07bacc5a80d1301a071c73360d746b7f2e32d762c66"
+      sha256: "8aab1771e1243a5063b8b0ff68042d67334e3feab9e95b9490f9a6ebf73b42ea"
       url: "https://pub.dev"
     source: hosted
-    version: "2.1.1"
+    version: "2.1.2"
   characters:
     dependency: transitive
     description:
       name: characters
-      sha256: "04a925763edad70e8443c99234dc3328f442e811f1d8fd1a72f1c8ad0f69a605"
+      sha256: f71061c654a3380576a52b451dd5532377954cf9dbd272a78fc8479606670803
       url: "https://pub.dev"
     source: hosted
-    version: "1.3.0"
+    version: "1.4.0"
   clock:
     dependency: transitive
     description:
       name: clock
-      sha256: cb6d7f03e1de671e34607e909a7213e31d7752be4fb66a86d29fe1eb14bfb5cf
+      sha256: fddb70d9b5277016c77a80201021d40a2247104d9f4aa7bab7157b7e3f05b84b
       url: "https://pub.dev"
     source: hosted
-    version: "1.1.1"
+    version: "1.1.2"
   collection:
     dependency: transitive
     description:
       name: collection
-      sha256: a1ace0a119f20aabc852d165077c036cd864315bd99b7eaa10a60100341941bf
+      sha256: "2f5709ae4d3d59dd8f7cd309b4e023046b57d8a6c82130785d2b0e5868084e76"
       url: "https://pub.dev"
     source: hosted
-    version: "1.19.0"
+    version: "1.19.1"
   equatable:
     dependency: transitive
     description:
@@ -69,10 +69,10 @@ packages:
     dependency: transitive
     description:
       name: fake_async
-      sha256: "511392330127add0b769b75a987850d136345d9227c6b94c96a04cf4a391bf78"
+      sha256: "5368f224a74523e8d2e7399ea1638b37aecfca824a3cc4dfdf77bf1fa905ac44"
       url: "https://pub.dev"
     source: hosted
-    version: "1.3.1"
+    version: "1.3.3"
   flutter:
     dependency: "direct main"
     description: flutter
@@ -172,18 +172,18 @@ packages:
     dependency: transitive
     description:
       name: leak_tracker
-      sha256: "7bb2830ebd849694d1ec25bf1f44582d6ac531a57a365a803a6034ff751d2d06"
+      sha256: "6bb818ecbdffe216e81182c2f0714a2e62b593f4a4f13098713ff1685dfb6ab0"
       url: "https://pub.dev"
     source: hosted
-    version: "10.0.7"
+    version: "10.0.9"
   leak_tracker_flutter_testing:
     dependency: transitive
     description:
       name: leak_tracker_flutter_testing
-      sha256: "9491a714cca3667b60b5c420da8217e6de0d1ba7a5ec322fab01758f6998f379"
+      sha256: f8b613e7e6a13ec79cfdc0e97638fddb3ab848452eff057653abd3edba760573
       url: "https://pub.dev"
     source: hosted
-    version: "3.0.8"
+    version: "3.0.9"
   leak_tracker_testing:
     dependency: transitive
     description:
@@ -197,7 +197,7 @@ packages:
     description:
       path: "."
       ref: master
-      resolved-ref: "17879a3de917152eb5473058ef2c3302d2c01f3e"
+      resolved-ref: "66d09a271f20243badd92352a8bb5866b430020d"
       url: "https://github.com/linagora/linagora-design-flutter.git"
     source: git
     version: "0.0.1"
@@ -213,10 +213,10 @@ packages:
     dependency: transitive
     description:
       name: matcher
-      sha256: d2323aa2060500f906aa31a895b4030b6da3ebdcc5619d14ce1aada65cd161cb
+      sha256: dc58c723c3c24bf8d3e2d3ad3f2f9d7bd9cf43ec6feaa64181775e60190153f2
       url: "https://pub.dev"
     source: hosted
-    version: "0.12.16+1"
+    version: "0.12.17"
   material_color_utilities:
     dependency: transitive
     description:
@@ -229,18 +229,18 @@ packages:
     dependency: transitive
     description:
       name: meta
-      sha256: bdb68674043280c3428e9ec998512fb681678676b3c54e773629ffe74419f8c7
+      sha256: e3641ec5d63ebf0d9b41bd43201a66e3fc79a65db5f61fc181f04cd27aab950c
       url: "https://pub.dev"
     source: hosted
-    version: "1.15.0"
+    version: "1.16.0"
   path:
     dependency: transitive
     description:
       name: path
-      sha256: "087ce49c3f0dc39180befefc60fdb4acd8f8620e5682fe2476afd0b3688bb4af"
+      sha256: "75cca69d1490965be98c73ceaea117e8a04dd21217b37b292c9ddbec0d955bc5"
       url: "https://pub.dev"
     source: hosted
-    version: "1.9.0"
+    version: "1.9.1"
   path_parsing:
     dependency: transitive
     description:
@@ -249,14 +249,54 @@ packages:
       url: "https://pub.dev"
     source: hosted
     version: "1.1.0"
+  permission_handler:
+    dependency: transitive
+    description:
+      name: permission_handler
+      sha256: bc917da36261b00137bbc8896bf1482169cd76f866282368948f032c8c1caae1
+      url: "https://pub.dev"
+    source: hosted
+    version: "12.0.1"
+  permission_handler_android:
+    dependency: transitive
+    description:
+      name: permission_handler_android
+      sha256: "1e3bc410ca1bf84662104b100eb126e066cb55791b7451307f9708d4007350e6"
+      url: "https://pub.dev"
+    source: hosted
+    version: "13.0.1"
+  permission_handler_apple:
+    dependency: transitive
+    description:
+      name: permission_handler_apple
+      sha256: f000131e755c54cf4d84a5d8bd6e4149e262cc31c5a8b1d698de1ac85fa41023
+      url: "https://pub.dev"
+    source: hosted
+    version: "9.4.7"
+  permission_handler_html:
+    dependency: transitive
+    description:
+      name: permission_handler_html
+      sha256: "38f000e83355abb3392140f6bc3030660cfaef189e1f87824facb76300b4ff24"
+      url: "https://pub.dev"
+    source: hosted
+    version: "0.1.3+5"
   permission_handler_platform_interface:
     dependency: transitive
     description:
       name: permission_handler_platform_interface
-      sha256: "6760eb5ef34589224771010805bea6054ad28453906936f843a8cc4d3a55c4a4"
+      sha256: eb99b295153abce5d683cac8c02e22faab63e50679b937fa1bf67d58bb282878
       url: "https://pub.dev"
     source: hosted
-    version: "3.12.0"
+    version: "4.3.0"
+  permission_handler_windows:
+    dependency: transitive
+    description:
+      name: permission_handler_windows
+      sha256: "1a790728016f79a41216d88672dbc5df30e686e811ad4e698bfc51f76ad91f1e"
+      url: "https://pub.dev"
+    source: hosted
+    version: "0.2.1"
   petitparser:
     dependency: transitive
     description:
@@ -298,50 +338,50 @@ packages:
     dependency: transitive
     description:
       name: source_span
-      sha256: "53e943d4206a5e30df338fd4c6e7a077e02254531b138a15aec3bd143c1a8b3c"
+      sha256: "254ee5351d6cb365c859e20ee823c3bb479bf4a293c22d17a9f1bf144ce86f7c"
       url: "https://pub.dev"
     source: hosted
-    version: "1.10.0"
+    version: "1.10.1"
   stack_trace:
     dependency: transitive
     description:
       name: stack_trace
-      sha256: "9f47fd3630d76be3ab26f0ee06d213679aa425996925ff3feffdec504931c377"
+      sha256: "8b27215b45d22309b5cddda1aa2b19bdfec9df0e765f2de506401c071d38d1b1"
       url: "https://pub.dev"
     source: hosted
-    version: "1.12.0"
+    version: "1.12.1"
   stream_channel:
     dependency: transitive
     description:
       name: stream_channel
-      sha256: ba2aa5d8cc609d96bbb2899c28934f9e1af5cddbd60a827822ea467161eb54e7
+      sha256: "969e04c80b8bcdf826f8f16579c7b14d780458bd97f56d107d3950fdbeef059d"
       url: "https://pub.dev"
     source: hosted
-    version: "2.1.2"
+    version: "2.1.4"
   string_scanner:
     dependency: transitive
     description:
       name: string_scanner
-      sha256: "688af5ed3402a4bde5b3a6c15fd768dbf2621a614950b17f04626c431ab3c4c3"
+      sha256: "921cd31725b72fe181906c6a94d987c78e3b98c2e205b397ea399d4054872b43"
       url: "https://pub.dev"
     source: hosted
-    version: "1.3.0"
+    version: "1.4.1"
   term_glyph:
     dependency: transitive
     description:
       name: term_glyph
-      sha256: a29248a84fbb7c79282b40b8c72a1209db169a2e0542bce341da992fe1bc7e84
+      sha256: "7f554798625ea768a7518313e58f83891c7f5024f88e46e7182a4558850a4b8e"
       url: "https://pub.dev"
     source: hosted
-    version: "1.2.1"
+    version: "1.2.2"
   test_api:
     dependency: transitive
     description:
       name: test_api
-      sha256: "664d3a9a64782fcdeb83ce9c6b39e78fd2971d4e37827b9b06c3aa1edc5e760c"
+      sha256: fb31f383e2ee25fbbfe06b40fe21e1e458d14080e3c67e7ba0acfde4df4e0bbd
       url: "https://pub.dev"
     source: hosted
-    version: "0.7.3"
+    version: "0.7.4"
   typed_data:
     dependency: transitive
     description:
@@ -386,10 +426,10 @@ packages:
     dependency: transitive
     description:
       name: vm_service
-      sha256: f6be3ed8bd01289b34d679c2b62226f63c0e69f9fd2e50a6b3c1c729a961041b
+      sha256: ddfa8d30d89985b96407efce8acbdd124701f96741f2d981ca860662f1c0dc02
       url: "https://pub.dev"
     source: hosted
-    version: "14.3.0"
+    version: "15.0.0"
   web:
     dependency: transitive
     description:
@@ -407,5 +447,5 @@ packages:
     source: hosted
     version: "6.5.0"
 sdks:
-  dart: ">=3.6.0 <4.0.0"
+  dart: ">=3.7.0-0 <4.0.0"
   flutter: ">=3.27.0"
diff --git a/email_recovery/pubspec.lock b/email_recovery/pubspec.lock
index 0d1128f4af..5337408e8b 100644
--- a/email_recovery/pubspec.lock
+++ b/email_recovery/pubspec.lock
@@ -29,18 +29,18 @@ packages:
     dependency: transitive
     description:
       name: async
-      sha256: "947bfcf187f74dbc5e146c9eb9c0f10c9f8b30743e341481c1e2ed3ecc18c20c"
+      sha256: "758e6d74e971c3e5aceb4110bfd6698efc7f501675bcfe0c775459a8140750eb"
       url: "https://pub.dev"
     source: hosted
-    version: "2.11.0"
+    version: "2.13.0"
   boolean_selector:
     dependency: transitive
     description:
       name: boolean_selector
-      sha256: "6cfb5af12253eaf2b368f07bacc5a80d1301a071c73360d746b7f2e32d762c66"
+      sha256: "8aab1771e1243a5063b8b0ff68042d67334e3feab9e95b9490f9a6ebf73b42ea"
       url: "https://pub.dev"
     source: hosted
-    version: "2.1.1"
+    version: "2.1.2"
   build:
     dependency: transitive
     description:
@@ -109,10 +109,10 @@ packages:
     dependency: transitive
     description:
       name: characters
-      sha256: "04a925763edad70e8443c99234dc3328f442e811f1d8fd1a72f1c8ad0f69a605"
+      sha256: f71061c654a3380576a52b451dd5532377954cf9dbd272a78fc8479606670803
       url: "https://pub.dev"
     source: hosted
-    version: "1.3.0"
+    version: "1.4.0"
   checked_yaml:
     dependency: transitive
     description:
@@ -125,10 +125,10 @@ packages:
     dependency: transitive
     description:
       name: clock
-      sha256: cb6d7f03e1de671e34607e909a7213e31d7752be4fb66a86d29fe1eb14bfb5cf
+      sha256: fddb70d9b5277016c77a80201021d40a2247104d9f4aa7bab7157b7e3f05b84b
       url: "https://pub.dev"
     source: hosted
-    version: "1.1.1"
+    version: "1.1.2"
   code_builder:
     dependency: transitive
     description:
@@ -141,10 +141,10 @@ packages:
     dependency: transitive
     description:
       name: collection
-      sha256: a1ace0a119f20aabc852d165077c036cd864315bd99b7eaa10a60100341941bf
+      sha256: "2f5709ae4d3d59dd8f7cd309b4e023046b57d8a6c82130785d2b0e5868084e76"
       url: "https://pub.dev"
     source: hosted
-    version: "1.19.0"
+    version: "1.19.1"
   convert:
     dependency: transitive
     description:
@@ -197,10 +197,10 @@ packages:
     dependency: transitive
     description:
       name: fake_async
-      sha256: "511392330127add0b769b75a987850d136345d9227c6b94c96a04cf4a391bf78"
+      sha256: "5368f224a74523e8d2e7399ea1638b37aecfca824a3cc4dfdf77bf1fa905ac44"
       url: "https://pub.dev"
     source: hosted
-    version: "1.3.1"
+    version: "1.3.3"
   file:
     dependency: transitive
     description:
@@ -328,18 +328,18 @@ packages:
     dependency: transitive
     description:
       name: leak_tracker
-      sha256: "7bb2830ebd849694d1ec25bf1f44582d6ac531a57a365a803a6034ff751d2d06"
+      sha256: "6bb818ecbdffe216e81182c2f0714a2e62b593f4a4f13098713ff1685dfb6ab0"
       url: "https://pub.dev"
     source: hosted
-    version: "10.0.7"
+    version: "10.0.9"
   leak_tracker_flutter_testing:
     dependency: transitive
     description:
       name: leak_tracker_flutter_testing
-      sha256: "9491a714cca3667b60b5c420da8217e6de0d1ba7a5ec322fab01758f6998f379"
+      sha256: f8b613e7e6a13ec79cfdc0e97638fddb3ab848452eff057653abd3edba760573
       url: "https://pub.dev"
     source: hosted
-    version: "3.0.8"
+    version: "3.0.9"
   leak_tracker_testing:
     dependency: transitive
     description:
@@ -368,10 +368,10 @@ packages:
     dependency: transitive
     description:
       name: matcher
-      sha256: d2323aa2060500f906aa31a895b4030b6da3ebdcc5619d14ce1aada65cd161cb
+      sha256: dc58c723c3c24bf8d3e2d3ad3f2f9d7bd9cf43ec6feaa64181775e60190153f2
       url: "https://pub.dev"
     source: hosted
-    version: "0.12.16+1"
+    version: "0.12.17"
   material_color_utilities:
     dependency: transitive
     description:
@@ -384,10 +384,10 @@ packages:
     dependency: transitive
     description:
       name: meta
-      sha256: bdb68674043280c3428e9ec998512fb681678676b3c54e773629ffe74419f8c7
+      sha256: e3641ec5d63ebf0d9b41bd43201a66e3fc79a65db5f61fc181f04cd27aab950c
       url: "https://pub.dev"
     source: hosted
-    version: "1.15.0"
+    version: "1.16.0"
   mime:
     dependency: transitive
     description:
@@ -416,10 +416,10 @@ packages:
     dependency: transitive
     description:
       name: path
-      sha256: "087ce49c3f0dc39180befefc60fdb4acd8f8620e5682fe2476afd0b3688bb4af"
+      sha256: "75cca69d1490965be98c73ceaea117e8a04dd21217b37b292c9ddbec0d955bc5"
       url: "https://pub.dev"
     source: hosted
-    version: "1.9.0"
+    version: "1.9.1"
   pool:
     dependency: transitive
     description:
@@ -493,26 +493,26 @@ packages:
     dependency: transitive
     description:
       name: source_span
-      sha256: "53e943d4206a5e30df338fd4c6e7a077e02254531b138a15aec3bd143c1a8b3c"
+      sha256: "254ee5351d6cb365c859e20ee823c3bb479bf4a293c22d17a9f1bf144ce86f7c"
       url: "https://pub.dev"
     source: hosted
-    version: "1.10.0"
+    version: "1.10.1"
   stack_trace:
     dependency: transitive
     description:
       name: stack_trace
-      sha256: "9f47fd3630d76be3ab26f0ee06d213679aa425996925ff3feffdec504931c377"
+      sha256: "8b27215b45d22309b5cddda1aa2b19bdfec9df0e765f2de506401c071d38d1b1"
       url: "https://pub.dev"
     source: hosted
-    version: "1.12.0"
+    version: "1.12.1"
   stream_channel:
     dependency: transitive
     description:
       name: stream_channel
-      sha256: ba2aa5d8cc609d96bbb2899c28934f9e1af5cddbd60a827822ea467161eb54e7
+      sha256: "969e04c80b8bcdf826f8f16579c7b14d780458bd97f56d107d3950fdbeef059d"
       url: "https://pub.dev"
     source: hosted
-    version: "2.1.2"
+    version: "2.1.4"
   stream_transform:
     dependency: transitive
     description:
@@ -525,26 +525,26 @@ packages:
     dependency: transitive
     description:
       name: string_scanner
-      sha256: "688af5ed3402a4bde5b3a6c15fd768dbf2621a614950b17f04626c431ab3c4c3"
+      sha256: "921cd31725b72fe181906c6a94d987c78e3b98c2e205b397ea399d4054872b43"
       url: "https://pub.dev"
     source: hosted
-    version: "1.3.0"
+    version: "1.4.1"
   term_glyph:
     dependency: transitive
     description:
       name: term_glyph
-      sha256: a29248a84fbb7c79282b40b8c72a1209db169a2e0542bce341da992fe1bc7e84
+      sha256: "7f554798625ea768a7518313e58f83891c7f5024f88e46e7182a4558850a4b8e"
       url: "https://pub.dev"
     source: hosted
-    version: "1.2.1"
+    version: "1.2.2"
   test_api:
     dependency: transitive
     description:
       name: test_api
-      sha256: "664d3a9a64782fcdeb83ce9c6b39e78fd2971d4e37827b9b06c3aa1edc5e760c"
+      sha256: fb31f383e2ee25fbbfe06b40fe21e1e458d14080e3c67e7ba0acfde4df4e0bbd
       url: "https://pub.dev"
     source: hosted
-    version: "0.7.3"
+    version: "0.7.4"
   timing:
     dependency: transitive
     description:
@@ -573,10 +573,10 @@ packages:
     dependency: transitive
     description:
       name: vm_service
-      sha256: f6be3ed8bd01289b34d679c2b62226f63c0e69f9fd2e50a6b3c1c729a961041b
+      sha256: ddfa8d30d89985b96407efce8acbdd124701f96741f2d981ca860662f1c0dc02
       url: "https://pub.dev"
     source: hosted
-    version: "14.3.0"
+    version: "15.0.0"
   watcher:
     dependency: transitive
     description:
@@ -602,5 +602,5 @@ packages:
     source: hosted
     version: "3.1.2"
 sdks:
-  dart: ">=3.4.0 <4.0.0"
+  dart: ">=3.7.0-0 <4.0.0"
   flutter: ">=3.18.0-18.0.pre.54"
diff --git a/fcm/pubspec.lock b/fcm/pubspec.lock
index 33c3885a02..073e3e1394 100644
--- a/fcm/pubspec.lock
+++ b/fcm/pubspec.lock
@@ -29,18 +29,18 @@ packages:
     dependency: transitive
     description:
       name: async
-      sha256: "947bfcf187f74dbc5e146c9eb9c0f10c9f8b30743e341481c1e2ed3ecc18c20c"
+      sha256: "758e6d74e971c3e5aceb4110bfd6698efc7f501675bcfe0c775459a8140750eb"
       url: "https://pub.dev"
     source: hosted
-    version: "2.11.0"
+    version: "2.13.0"
   boolean_selector:
     dependency: transitive
     description:
       name: boolean_selector
-      sha256: "6cfb5af12253eaf2b368f07bacc5a80d1301a071c73360d746b7f2e32d762c66"
+      sha256: "8aab1771e1243a5063b8b0ff68042d67334e3feab9e95b9490f9a6ebf73b42ea"
       url: "https://pub.dev"
     source: hosted
-    version: "2.1.1"
+    version: "2.1.2"
   build:
     dependency: transitive
     description:
@@ -109,10 +109,10 @@ packages:
     dependency: transitive
     description:
       name: characters
-      sha256: "04a925763edad70e8443c99234dc3328f442e811f1d8fd1a72f1c8ad0f69a605"
+      sha256: f71061c654a3380576a52b451dd5532377954cf9dbd272a78fc8479606670803
       url: "https://pub.dev"
     source: hosted
-    version: "1.3.0"
+    version: "1.4.0"
   checked_yaml:
     dependency: transitive
     description:
@@ -125,10 +125,10 @@ packages:
     dependency: transitive
     description:
       name: clock
-      sha256: cb6d7f03e1de671e34607e909a7213e31d7752be4fb66a86d29fe1eb14bfb5cf
+      sha256: fddb70d9b5277016c77a80201021d40a2247104d9f4aa7bab7157b7e3f05b84b
       url: "https://pub.dev"
     source: hosted
-    version: "1.1.1"
+    version: "1.1.2"
   code_builder:
     dependency: transitive
     description:
@@ -141,10 +141,10 @@ packages:
     dependency: transitive
     description:
       name: collection
-      sha256: a1ace0a119f20aabc852d165077c036cd864315bd99b7eaa10a60100341941bf
+      sha256: "2f5709ae4d3d59dd8f7cd309b4e023046b57d8a6c82130785d2b0e5868084e76"
       url: "https://pub.dev"
     source: hosted
-    version: "1.19.0"
+    version: "1.19.1"
   convert:
     dependency: transitive
     description:
@@ -197,10 +197,10 @@ packages:
     dependency: transitive
     description:
       name: fake_async
-      sha256: "511392330127add0b769b75a987850d136345d9227c6b94c96a04cf4a391bf78"
+      sha256: "5368f224a74523e8d2e7399ea1638b37aecfca824a3cc4dfdf77bf1fa905ac44"
       url: "https://pub.dev"
     source: hosted
-    version: "1.3.1"
+    version: "1.3.3"
   file:
     dependency: transitive
     description:
@@ -328,18 +328,18 @@ packages:
     dependency: transitive
     description:
       name: leak_tracker
-      sha256: "7bb2830ebd849694d1ec25bf1f44582d6ac531a57a365a803a6034ff751d2d06"
+      sha256: "6bb818ecbdffe216e81182c2f0714a2e62b593f4a4f13098713ff1685dfb6ab0"
       url: "https://pub.dev"
     source: hosted
-    version: "10.0.7"
+    version: "10.0.9"
   leak_tracker_flutter_testing:
     dependency: transitive
     description:
       name: leak_tracker_flutter_testing
-      sha256: "9491a714cca3667b60b5c420da8217e6de0d1ba7a5ec322fab01758f6998f379"
+      sha256: f8b613e7e6a13ec79cfdc0e97638fddb3ab848452eff057653abd3edba760573
       url: "https://pub.dev"
     source: hosted
-    version: "3.0.8"
+    version: "3.0.9"
   leak_tracker_testing:
     dependency: transitive
     description:
@@ -368,10 +368,10 @@ packages:
     dependency: transitive
     description:
       name: matcher
-      sha256: d2323aa2060500f906aa31a895b4030b6da3ebdcc5619d14ce1aada65cd161cb
+      sha256: dc58c723c3c24bf8d3e2d3ad3f2f9d7bd9cf43ec6feaa64181775e60190153f2
       url: "https://pub.dev"
     source: hosted
-    version: "0.12.16+1"
+    version: "0.12.17"
   material_color_utilities:
     dependency: transitive
     description:
@@ -384,10 +384,10 @@ packages:
     dependency: transitive
     description:
       name: meta
-      sha256: bdb68674043280c3428e9ec998512fb681678676b3c54e773629ffe74419f8c7
+      sha256: e3641ec5d63ebf0d9b41bd43201a66e3fc79a65db5f61fc181f04cd27aab950c
       url: "https://pub.dev"
     source: hosted
-    version: "1.15.0"
+    version: "1.16.0"
   mime:
     dependency: transitive
     description:
@@ -416,10 +416,10 @@ packages:
     dependency: transitive
     description:
       name: path
-      sha256: "087ce49c3f0dc39180befefc60fdb4acd8f8620e5682fe2476afd0b3688bb4af"
+      sha256: "75cca69d1490965be98c73ceaea117e8a04dd21217b37b292c9ddbec0d955bc5"
       url: "https://pub.dev"
     source: hosted
-    version: "1.9.0"
+    version: "1.9.1"
   pool:
     dependency: transitive
     description:
@@ -493,26 +493,26 @@ packages:
     dependency: transitive
     description:
       name: source_span
-      sha256: "53e943d4206a5e30df338fd4c6e7a077e02254531b138a15aec3bd143c1a8b3c"
+      sha256: "254ee5351d6cb365c859e20ee823c3bb479bf4a293c22d17a9f1bf144ce86f7c"
       url: "https://pub.dev"
     source: hosted
-    version: "1.10.0"
+    version: "1.10.1"
   stack_trace:
     dependency: transitive
     description:
       name: stack_trace
-      sha256: "9f47fd3630d76be3ab26f0ee06d213679aa425996925ff3feffdec504931c377"
+      sha256: "8b27215b45d22309b5cddda1aa2b19bdfec9df0e765f2de506401c071d38d1b1"
       url: "https://pub.dev"
     source: hosted
-    version: "1.12.0"
+    version: "1.12.1"
   stream_channel:
     dependency: transitive
     description:
       name: stream_channel
-      sha256: ba2aa5d8cc609d96bbb2899c28934f9e1af5cddbd60a827822ea467161eb54e7
+      sha256: "969e04c80b8bcdf826f8f16579c7b14d780458bd97f56d107d3950fdbeef059d"
       url: "https://pub.dev"
     source: hosted
-    version: "2.1.2"
+    version: "2.1.4"
   stream_transform:
     dependency: transitive
     description:
@@ -525,26 +525,26 @@ packages:
     dependency: transitive
     description:
       name: string_scanner
-      sha256: "688af5ed3402a4bde5b3a6c15fd768dbf2621a614950b17f04626c431ab3c4c3"
+      sha256: "921cd31725b72fe181906c6a94d987c78e3b98c2e205b397ea399d4054872b43"
       url: "https://pub.dev"
     source: hosted
-    version: "1.3.0"
+    version: "1.4.1"
   term_glyph:
     dependency: transitive
     description:
       name: term_glyph
-      sha256: a29248a84fbb7c79282b40b8c72a1209db169a2e0542bce341da992fe1bc7e84
+      sha256: "7f554798625ea768a7518313e58f83891c7f5024f88e46e7182a4558850a4b8e"
       url: "https://pub.dev"
     source: hosted
-    version: "1.2.1"
+    version: "1.2.2"
   test_api:
     dependency: transitive
     description:
       name: test_api
-      sha256: "664d3a9a64782fcdeb83ce9c6b39e78fd2971d4e37827b9b06c3aa1edc5e760c"
+      sha256: fb31f383e2ee25fbbfe06b40fe21e1e458d14080e3c67e7ba0acfde4df4e0bbd
       url: "https://pub.dev"
     source: hosted
-    version: "0.7.3"
+    version: "0.7.4"
   timing:
     dependency: transitive
     description:
@@ -573,10 +573,10 @@ packages:
     dependency: transitive
     description:
       name: vm_service
-      sha256: f6be3ed8bd01289b34d679c2b62226f63c0e69f9fd2e50a6b3c1c729a961041b
+      sha256: ddfa8d30d89985b96407efce8acbdd124701f96741f2d981ca860662f1c0dc02
       url: "https://pub.dev"
     source: hosted
-    version: "14.3.0"
+    version: "15.0.0"
   watcher:
     dependency: transitive
     description:
@@ -602,5 +602,5 @@ packages:
     source: hosted
     version: "3.1.2"
 sdks:
-  dart: ">=3.4.0 <4.0.0"
+  dart: ">=3.7.0-0 <4.0.0"
   flutter: ">=3.18.0-18.0.pre.54"
diff --git a/forward/pubspec.lock b/forward/pubspec.lock
index 33c3885a02..073e3e1394 100644
--- a/forward/pubspec.lock
+++ b/forward/pubspec.lock
@@ -29,18 +29,18 @@ packages:
     dependency: transitive
     description:
       name: async
-      sha256: "947bfcf187f74dbc5e146c9eb9c0f10c9f8b30743e341481c1e2ed3ecc18c20c"
+      sha256: "758e6d74e971c3e5aceb4110bfd6698efc7f501675bcfe0c775459a8140750eb"
       url: "https://pub.dev"
     source: hosted
-    version: "2.11.0"
+    version: "2.13.0"
   boolean_selector:
     dependency: transitive
     description:
       name: boolean_selector
-      sha256: "6cfb5af12253eaf2b368f07bacc5a80d1301a071c73360d746b7f2e32d762c66"
+      sha256: "8aab1771e1243a5063b8b0ff68042d67334e3feab9e95b9490f9a6ebf73b42ea"
       url: "https://pub.dev"
     source: hosted
-    version: "2.1.1"
+    version: "2.1.2"
   build:
     dependency: transitive
     description:
@@ -109,10 +109,10 @@ packages:
     dependency: transitive
     description:
       name: characters
-      sha256: "04a925763edad70e8443c99234dc3328f442e811f1d8fd1a72f1c8ad0f69a605"
+      sha256: f71061c654a3380576a52b451dd5532377954cf9dbd272a78fc8479606670803
       url: "https://pub.dev"
     source: hosted
-    version: "1.3.0"
+    version: "1.4.0"
   checked_yaml:
     dependency: transitive
     description:
@@ -125,10 +125,10 @@ packages:
     dependency: transitive
     description:
       name: clock
-      sha256: cb6d7f03e1de671e34607e909a7213e31d7752be4fb66a86d29fe1eb14bfb5cf
+      sha256: fddb70d9b5277016c77a80201021d40a2247104d9f4aa7bab7157b7e3f05b84b
       url: "https://pub.dev"
     source: hosted
-    version: "1.1.1"
+    version: "1.1.2"
   code_builder:
     dependency: transitive
     description:
@@ -141,10 +141,10 @@ packages:
     dependency: transitive
     description:
       name: collection
-      sha256: a1ace0a119f20aabc852d165077c036cd864315bd99b7eaa10a60100341941bf
+      sha256: "2f5709ae4d3d59dd8f7cd309b4e023046b57d8a6c82130785d2b0e5868084e76"
       url: "https://pub.dev"
     source: hosted
-    version: "1.19.0"
+    version: "1.19.1"
   convert:
     dependency: transitive
     description:
@@ -197,10 +197,10 @@ packages:
     dependency: transitive
     description:
       name: fake_async
-      sha256: "511392330127add0b769b75a987850d136345d9227c6b94c96a04cf4a391bf78"
+      sha256: "5368f224a74523e8d2e7399ea1638b37aecfca824a3cc4dfdf77bf1fa905ac44"
       url: "https://pub.dev"
     source: hosted
-    version: "1.3.1"
+    version: "1.3.3"
   file:
     dependency: transitive
     description:
@@ -328,18 +328,18 @@ packages:
     dependency: transitive
     description:
       name: leak_tracker
-      sha256: "7bb2830ebd849694d1ec25bf1f44582d6ac531a57a365a803a6034ff751d2d06"
+      sha256: "6bb818ecbdffe216e81182c2f0714a2e62b593f4a4f13098713ff1685dfb6ab0"
       url: "https://pub.dev"
     source: hosted
-    version: "10.0.7"
+    version: "10.0.9"
   leak_tracker_flutter_testing:
     dependency: transitive
     description:
       name: leak_tracker_flutter_testing
-      sha256: "9491a714cca3667b60b5c420da8217e6de0d1ba7a5ec322fab01758f6998f379"
+      sha256: f8b613e7e6a13ec79cfdc0e97638fddb3ab848452eff057653abd3edba760573
       url: "https://pub.dev"
     source: hosted
-    version: "3.0.8"
+    version: "3.0.9"
   leak_tracker_testing:
     dependency: transitive
     description:
@@ -368,10 +368,10 @@ packages:
     dependency: transitive
     description:
       name: matcher
-      sha256: d2323aa2060500f906aa31a895b4030b6da3ebdcc5619d14ce1aada65cd161cb
+      sha256: dc58c723c3c24bf8d3e2d3ad3f2f9d7bd9cf43ec6feaa64181775e60190153f2
       url: "https://pub.dev"
     source: hosted
-    version: "0.12.16+1"
+    version: "0.12.17"
   material_color_utilities:
     dependency: transitive
     description:
@@ -384,10 +384,10 @@ packages:
     dependency: transitive
     description:
       name: meta
-      sha256: bdb68674043280c3428e9ec998512fb681678676b3c54e773629ffe74419f8c7
+      sha256: e3641ec5d63ebf0d9b41bd43201a66e3fc79a65db5f61fc181f04cd27aab950c
       url: "https://pub.dev"
     source: hosted
-    version: "1.15.0"
+    version: "1.16.0"
   mime:
     dependency: transitive
     description:
@@ -416,10 +416,10 @@ packages:
     dependency: transitive
     description:
       name: path
-      sha256: "087ce49c3f0dc39180befefc60fdb4acd8f8620e5682fe2476afd0b3688bb4af"
+      sha256: "75cca69d1490965be98c73ceaea117e8a04dd21217b37b292c9ddbec0d955bc5"
       url: "https://pub.dev"
     source: hosted
-    version: "1.9.0"
+    version: "1.9.1"
   pool:
     dependency: transitive
     description:
@@ -493,26 +493,26 @@ packages:
     dependency: transitive
     description:
       name: source_span
-      sha256: "53e943d4206a5e30df338fd4c6e7a077e02254531b138a15aec3bd143c1a8b3c"
+      sha256: "254ee5351d6cb365c859e20ee823c3bb479bf4a293c22d17a9f1bf144ce86f7c"
       url: "https://pub.dev"
     source: hosted
-    version: "1.10.0"
+    version: "1.10.1"
   stack_trace:
     dependency: transitive
     description:
       name: stack_trace
-      sha256: "9f47fd3630d76be3ab26f0ee06d213679aa425996925ff3feffdec504931c377"
+      sha256: "8b27215b45d22309b5cddda1aa2b19bdfec9df0e765f2de506401c071d38d1b1"
       url: "https://pub.dev"
     source: hosted
-    version: "1.12.0"
+    version: "1.12.1"
   stream_channel:
     dependency: transitive
     description:
       name: stream_channel
-      sha256: ba2aa5d8cc609d96bbb2899c28934f9e1af5cddbd60a827822ea467161eb54e7
+      sha256: "969e04c80b8bcdf826f8f16579c7b14d780458bd97f56d107d3950fdbeef059d"
       url: "https://pub.dev"
     source: hosted
-    version: "2.1.2"
+    version: "2.1.4"
   stream_transform:
     dependency: transitive
     description:
@@ -525,26 +525,26 @@ packages:
     dependency: transitive
     description:
       name: string_scanner
-      sha256: "688af5ed3402a4bde5b3a6c15fd768dbf2621a614950b17f04626c431ab3c4c3"
+      sha256: "921cd31725b72fe181906c6a94d987c78e3b98c2e205b397ea399d4054872b43"
       url: "https://pub.dev"
     source: hosted
-    version: "1.3.0"
+    version: "1.4.1"
   term_glyph:
     dependency: transitive
     description:
       name: term_glyph
-      sha256: a29248a84fbb7c79282b40b8c72a1209db169a2e0542bce341da992fe1bc7e84
+      sha256: "7f554798625ea768a7518313e58f83891c7f5024f88e46e7182a4558850a4b8e"
       url: "https://pub.dev"
     source: hosted
-    version: "1.2.1"
+    version: "1.2.2"
   test_api:
     dependency: transitive
     description:
       name: test_api
-      sha256: "664d3a9a64782fcdeb83ce9c6b39e78fd2971d4e37827b9b06c3aa1edc5e760c"
+      sha256: fb31f383e2ee25fbbfe06b40fe21e1e458d14080e3c67e7ba0acfde4df4e0bbd
       url: "https://pub.dev"
     source: hosted
-    version: "0.7.3"
+    version: "0.7.4"
   timing:
     dependency: transitive
     description:
@@ -573,10 +573,10 @@ packages:
     dependency: transitive
     description:
       name: vm_service
-      sha256: f6be3ed8bd01289b34d679c2b62226f63c0e69f9fd2e50a6b3c1c729a961041b
+      sha256: ddfa8d30d89985b96407efce8acbdd124701f96741f2d981ca860662f1c0dc02
       url: "https://pub.dev"
     source: hosted
-    version: "14.3.0"
+    version: "15.0.0"
   watcher:
     dependency: transitive
     description:
@@ -602,5 +602,5 @@ packages:
     source: hosted
     version: "3.1.2"
 sdks:
-  dart: ">=3.4.0 <4.0.0"
+  dart: ">=3.7.0-0 <4.0.0"
   flutter: ">=3.18.0-18.0.pre.54"
diff --git a/integration_test/mixin/scenario_utils_mixin.dart b/integration_test/mixin/scenario_utils_mixin.dart
index 06c2b69b6f..bc1c4ea2b6 100644
--- a/integration_test/mixin/scenario_utils_mixin.dart
+++ b/integration_test/mixin/scenario_utils_mixin.dart
@@ -4,7 +4,7 @@ import 'dart:io' hide HttpClient;
 
 import 'package:collection/collection.dart';
 import 'package:core/utils/app_logger.dart';
-import 'package:flutter/services.dart';
+import 'package:flutter/widgets.dart';
 import 'package:get/get.dart';
 import 'package:jmap_dart_client/http/http_client.dart';
 import 'package:jmap_dart_client/jmap/core/capability/capability_identifier.dart';
@@ -282,7 +282,7 @@ mixin ScenarioUtilsMixin {
     IdentityInteractorsBindings().dispose();
   }
 
-  Future hideKeyboard() async {
-    await SystemChannels.textInput.invokeMethod('TextInput.hide');
+  void hideKeyboard() {
+    FocusManager.instance.primaryFocus?.unfocus();
   }
 }
diff --git a/integration_test/robots/composer_robot.dart b/integration_test/robots/composer_robot.dart
index db02d3a228..7e72a3c60f 100644
--- a/integration_test/robots/composer_robot.dart
+++ b/integration_test/robots/composer_robot.dart
@@ -14,6 +14,7 @@ import 'package:tmail_ui_user/features/composer/domain/state/download_image_as_b
 import 'package:tmail_ui_user/features/composer/presentation/composer_controller.dart';
 import 'package:tmail_ui_user/features/composer/presentation/composer_view.dart';
 import 'package:tmail_ui_user/features/composer/presentation/view/mobile/mobile_editor_view.dart';
+import 'package:tmail_ui_user/features/composer/presentation/widgets/list_recipients_collapsed_widget.dart';
 import 'package:tmail_ui_user/features/composer/presentation/widgets/mobile/app_bar_composer_widget.dart';
 import 'package:tmail_ui_user/features/composer/presentation/widgets/mobile/from_composer_mobile_widget.dart';
 import 'package:tmail_ui_user/features/composer/presentation/widgets/recipient_composer_widget.dart';
@@ -29,6 +30,10 @@ import '../extensions/patrol_finder_extension.dart';
 class ComposerRobot extends CoreRobot {
   ComposerRobot(super.$);
 
+  Future expandRecipientsFields() async {
+    await $(RecipientsCollapsedComposerWidget).$(GestureDetector).tap();
+  }
+
   Future addRecipientIntoField({
     required PrefixEmailAddress prefixEmailAddress,
     required String email,
diff --git a/integration_test/robots/email_robot.dart b/integration_test/robots/email_robot.dart
index 92f8702353..63811fdfb0 100644
--- a/integration_test/robots/email_robot.dart
+++ b/integration_test/robots/email_robot.dart
@@ -16,7 +16,7 @@ class EmailRobot extends CoreRobot {
   }
 
   Future tapDownloadAllButton() async {
-    await $(AppLocalizations().archiveAndDownload).tap();
+    await $(#download_all_attachments_button).tap();
     await $.pumpAndSettle();
   }
 
diff --git a/integration_test/scenarios/app_grid_scenario.dart b/integration_test/scenarios/app_grid_scenario.dart
index 9f975649e9..cfa72886f6 100644
--- a/integration_test/scenarios/app_grid_scenario.dart
+++ b/integration_test/scenarios/app_grid_scenario.dart
@@ -16,6 +16,7 @@ class AppGridScenario extends BaseTestScenario {
 
   @override
   Future runTestLogic() async {
+    PlatformInfo.isIntegrationTesting = true;
     final threadRobot = ThreadRobot($);
     final mailboxMenuRobot = MailboxMenuRobot($);
     final appGridRobot = AppGridRobot($);
@@ -52,6 +53,7 @@ class AppGridScenario extends BaseTestScenario {
     } else if (PlatformInfo.isIOS) {
       await _expectMailboxViewInVisible();
     }
+    PlatformInfo.isIntegrationTesting = false;
   }
 
   Future _expectMailboxViewVisible() => expectViewVisible($(MailboxView));
diff --git a/integration_test/scenarios/composer/upload_attachment_and_inline_image_scenario.dart b/integration_test/scenarios/composer/upload_attachment_and_inline_image_scenario.dart
index a3be373498..fd10387adc 100644
--- a/integration_test/scenarios/composer/upload_attachment_and_inline_image_scenario.dart
+++ b/integration_test/scenarios/composer/upload_attachment_and_inline_image_scenario.dart
@@ -31,7 +31,7 @@ class ComposerUploadAttachmentAndInlineImageScenario extends BaseTestScenario {
     await _expectAttachment(pngName);
 
     await composerRobot.addInline(png);
-    await $.pumpAndSettle();
+    await $.pumpAndSettle(duration: const Duration(seconds: 1));
     await _expectInline();
 
     await composerRobot.addAttachment(png);
diff --git a/integration_test/scenarios/email/reply_to_own_sent_email_scenario.dart b/integration_test/scenarios/email/reply_to_own_sent_email_scenario.dart
index fcae1e0a53..dbb87917f7 100644
--- a/integration_test/scenarios/email/reply_to_own_sent_email_scenario.dart
+++ b/integration_test/scenarios/email/reply_to_own_sent_email_scenario.dart
@@ -1,9 +1,11 @@
 import 'package:flutter_test/flutter_test.dart';
 import 'package:model/email/prefix_email_address.dart';
+import 'package:tmail_ui_user/features/composer/presentation/composer_view.dart';
 import 'package:tmail_ui_user/features/composer/presentation/widgets/recipient_composer_widget.dart';
 import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
 
 import '../../base/base_test_scenario.dart';
+import '../../robots/composer_robot.dart';
 import '../../robots/email_robot.dart';
 import '../../robots/mailbox_menu_robot.dart';
 import '../../robots/thread_robot.dart';
@@ -19,6 +21,7 @@ class ReplyToOwnSentEmailScenario extends BaseTestScenario {
     final threadRobot = ThreadRobot($);
     final mailboxMenuRobot = MailboxMenuRobot($);
     final emailRobot = EmailRobot($);
+    final composerRobot = ComposerRobot($);
     final sendEmailScenario = SendEmailScenario($, customSubject: subject);
     final appLocalizations = AppLocalizations();
 
@@ -29,9 +32,20 @@ class ReplyToOwnSentEmailScenario extends BaseTestScenario {
     );
     await threadRobot.openEmailWithSubject(subject);
     await emailRobot.onTapReplyEmail();
+    await _expectComposerViewVisible();
+
+    await composerRobot.grantContactPermission();
+
+    await composerRobot.expandRecipientsFields();
+    await $.pumpAndSettle();
+
     _expectToFieldContainListEmailAddressCorrectly();
   }
 
+  Future _expectComposerViewVisible() async {
+    await expectViewVisible($(ComposerView));
+  }
+
   void _expectToFieldContainListEmailAddressCorrectly()  {
     expect(
       $(RecipientComposerWidget).which((widget) =>
diff --git a/integration_test/scenarios/email_detailed/compose_email_from_email_address_scenario.dart b/integration_test/scenarios/email_detailed/compose_email_from_email_address_scenario.dart
index 055950732e..76fd93bfb2 100644
--- a/integration_test/scenarios/email_detailed/compose_email_from_email_address_scenario.dart
+++ b/integration_test/scenarios/email_detailed/compose_email_from_email_address_scenario.dart
@@ -49,6 +49,9 @@ class ComposeEmailFromEmailAddressScenario extends BaseTestScenario {
 
     await composerRobot.grantContactPermission();
 
+    await composerRobot.expandRecipientsFields();
+    await $.pumpAndSettle();
+
     await _expectToFieldContainListEmailAddressCorrectly(emailUser);
   }
 
diff --git a/integration_test/scenarios/email_detailed/deformed_inlined_image_scenario.dart b/integration_test/scenarios/email_detailed/deformed_inlined_image_scenario.dart
index 2e25e74008..d5e3761ecd 100644
--- a/integration_test/scenarios/email_detailed/deformed_inlined_image_scenario.dart
+++ b/integration_test/scenarios/email_detailed/deformed_inlined_image_scenario.dart
@@ -1,9 +1,8 @@
 import 'package:core/presentation/views/html_viewer/html_content_viewer_widget.dart';
 import 'package:core/utils/app_logger.dart';
 import 'package:core/utils/platform_info.dart';
+import 'package:flutter/widgets.dart';
 import 'package:flutter_test/flutter_test.dart';
-import 'package:tmail_ui_user/features/email/presentation/controller/single_email_controller.dart';
-import 'package:tmail_ui_user/features/email/presentation/email_view.dart';
 import 'package:tmail_ui_user/features/thread/presentation/widgets/email_tile_builder.dart';
 
 import '../../base/base_test_scenario.dart';
@@ -121,10 +120,12 @@ class DeformedInlinedImageScenario extends BaseTestScenario {
   }
 
   Future _expectEmailViewDisplaysNormalizedInlineImages() async {
+    GlobalKey? htmlContentViewKey;
     HtmlContentViewer? htmlContentViewer;
     await $(HtmlContentViewer)
       .which((view) {
         htmlContentViewer = view;
+        htmlContentViewKey = view.key as GlobalKey;
         return true;
       })
       .first
@@ -133,17 +134,6 @@ class DeformedInlinedImageScenario extends BaseTestScenario {
     log('DeformedInlinedImageScenario::_expectEmailViewDisplaysNormalizedInlineImages:initialWidth = ${htmlContentViewer?.initialWidth}');
     expect(htmlContentViewer?.contentHtml.isNotEmpty, isTrue);
 
-    SingleEmailController? emailController;
-    await $(EmailView)
-      .which((view) {
-        emailController = view.controller;
-        return true;
-      })
-      .first
-      .tap();
-    expect(emailController, isNotNull);
-
-    final htmlContentViewKey = emailController?.htmlContentViewKey;
     expect(htmlContentViewKey, isNotNull);
 
     final result = await htmlContentViewKey!.currentState!.webViewController.evaluateJavascript(
diff --git a/integration_test/scenarios/email_detailed/forwarding_email_lost_attachments_scenario.dart b/integration_test/scenarios/email_detailed/forwarding_email_lost_attachments_scenario.dart
index 2b107f58ab..01b5003984 100644
--- a/integration_test/scenarios/email_detailed/forwarding_email_lost_attachments_scenario.dart
+++ b/integration_test/scenarios/email_detailed/forwarding_email_lost_attachments_scenario.dart
@@ -55,6 +55,10 @@ class ForwardingEmailLostAttachmentsScenario extends BaseTestScenario {
     await _expectComposerViewVisible();
 
     await composerRobot.grantContactPermission();
+
+    await composerRobot.expandRecipientsFields();
+    await $.pumpAndSettle();
+
     await composerRobot.addRecipientIntoField(
       prefixEmailAddress: PrefixEmailAddress.to,
       email: emailUser,
diff --git a/integration_test/scenarios/email_detailed/reply_all_email_scenario.dart b/integration_test/scenarios/email_detailed/reply_all_email_scenario.dart
index 109481ac9c..e2372a203b 100644
--- a/integration_test/scenarios/email_detailed/reply_all_email_scenario.dart
+++ b/integration_test/scenarios/email_detailed/reply_all_email_scenario.dart
@@ -44,6 +44,9 @@ class ReplyAllEmailScenario extends BaseTestScenario {
 
     await composerRobot.grantContactPermission();
 
+    await composerRobot.expandRecipientsFields();
+    await $.pumpAndTrySettle();
+
     await _expectComposerSubjectDisplayedCorrectly(appLocalizations);
     await _expectToFieldContainListEmailAddressCorrectly();
     await _expectCcFieldContainListEmailAddressCorrectly();
diff --git a/integration_test/scenarios/email_detailed/reply_email_with_reply_to_scenario.dart b/integration_test/scenarios/email_detailed/reply_email_with_reply_to_scenario.dart
index a434b093ff..feaf60b8cc 100644
--- a/integration_test/scenarios/email_detailed/reply_email_with_reply_to_scenario.dart
+++ b/integration_test/scenarios/email_detailed/reply_email_with_reply_to_scenario.dart
@@ -44,6 +44,9 @@ class ReplyEmailWithReplyToScenario extends BaseTestScenario {
 
     await composerRobot.grantContactPermission();
 
+    await composerRobot.expandRecipientsFields();
+    await $.pumpAndTrySettle();
+
     await _expectComposerSubjectDisplayedCorrectly(appLocalizations);
     await _expectToFieldContainReplyToEmailAddress();
   }
diff --git a/integration_test/scenarios/email_detailed/reply_email_without_reply_to_scenario.dart b/integration_test/scenarios/email_detailed/reply_email_without_reply_to_scenario.dart
index e2cf591741..ec504c191a 100644
--- a/integration_test/scenarios/email_detailed/reply_email_without_reply_to_scenario.dart
+++ b/integration_test/scenarios/email_detailed/reply_email_without_reply_to_scenario.dart
@@ -44,6 +44,9 @@ class ReplyEmailWithoutReplyToScenario extends BaseTestScenario {
 
     await composerRobot.grantContactPermission();
 
+    await composerRobot.expandRecipientsFields();
+    await $.pumpAndTrySettle();
+
     await _expectComposerSubjectDisplayedCorrectly(appLocalizations);
     await _expectToFieldContainFromEmailAddress();
   }
diff --git a/integration_test/scenarios/email_detailed/reply_to_list_email_scenario.dart b/integration_test/scenarios/email_detailed/reply_to_list_email_scenario.dart
index 98ea2c8e10..6a705a27c4 100644
--- a/integration_test/scenarios/email_detailed/reply_to_list_email_scenario.dart
+++ b/integration_test/scenarios/email_detailed/reply_to_list_email_scenario.dart
@@ -44,6 +44,9 @@ class ReplyToListEmailScenario extends BaseTestScenario {
 
     await composerRobot.grantContactPermission();
 
+    await composerRobot.expandRecipientsFields();
+    await $.pumpAndTrySettle();
+
     await _expectComposerSubjectDisplayedCorrectly(appLocalizations);
     await _expectToFieldContainListPostEmailAddress();
   }
diff --git a/integration_test/scenarios/mailbox/long_press_empty_and_recover_spam_scenario.dart b/integration_test/scenarios/mailbox/long_press_empty_and_recover_spam_scenario.dart
index 24c5e731f4..c807adc3a7 100644
--- a/integration_test/scenarios/mailbox/long_press_empty_and_recover_spam_scenario.dart
+++ b/integration_test/scenarios/mailbox/long_press_empty_and_recover_spam_scenario.dart
@@ -70,6 +70,7 @@ class LongPressEmptyAndRecoverSpamScenario extends BaseTestScenario {
   }
 
   Future _expectEmailWithSubjectVisible(String subject) async {
+    await $.scrollUntilVisible(finder: $(subject));
     await expectViewVisible($(subject));
   }
 
diff --git a/integration_test/scenarios/mailbox/long_press_empty_and_recover_trash_scenario.dart b/integration_test/scenarios/mailbox/long_press_empty_and_recover_trash_scenario.dart
index 86f786c0ea..41d2b82dbc 100644
--- a/integration_test/scenarios/mailbox/long_press_empty_and_recover_trash_scenario.dart
+++ b/integration_test/scenarios/mailbox/long_press_empty_and_recover_trash_scenario.dart
@@ -68,6 +68,7 @@ class LongPressEmptyAndRecoverTrashScenario extends BaseTestScenario {
   }
 
   Future _expectEmailWithSubjectVisible(String subject) async {
+    await $.scrollUntilVisible(finder: $(subject));
     await expectViewVisible($(subject));
   }
 
diff --git a/integration_test/scenarios/mailbox/pull_to_refresh_scenario.dart b/integration_test/scenarios/mailbox/pull_to_refresh_scenario.dart
index 0a9fd8a556..ed7c8d5199 100644
--- a/integration_test/scenarios/mailbox/pull_to_refresh_scenario.dart
+++ b/integration_test/scenarios/mailbox/pull_to_refresh_scenario.dart
@@ -37,11 +37,11 @@ class PullToRefreshScenario extends BaseTestScenario {
     _expectEmailWithSubjectInvisible(visibleAfterPullToRefresh);
 
     await threadRobot.pullToRefreshByEmailSubject(visibleBeforePullToRefresh);
-    _expectEmailWithSubjectVisible(visibleAfterPullToRefresh);
+    await _expectEmailWithSubjectVisible(visibleAfterPullToRefresh);
   }
 
-  _expectEmailWithSubjectVisible(String subject) {
-    expect($(subject), findsOneWidget);
+  Future _expectEmailWithSubjectVisible(String subject) async {
+    await expectViewVisible($(subject));
   }
 
   _expectEmailWithSubjectInvisible(String subject) {
diff --git a/integration_test/scenarios/reply_email_with_content_contain_image_base64_data_scenario.dart b/integration_test/scenarios/reply_email_with_content_contain_image_base64_data_scenario.dart
index b0fc701a22..74a488e47c 100644
--- a/integration_test/scenarios/reply_email_with_content_contain_image_base64_data_scenario.dart
+++ b/integration_test/scenarios/reply_email_with_content_contain_image_base64_data_scenario.dart
@@ -46,6 +46,9 @@ class ReplyEmailWithContentContainImageBase64DataScenario extends BaseTestScenar
 
     await composerRobot.grantContactPermission();
 
+    await composerRobot.expandRecipientsFields();
+    await $.pumpAndSettle();
+
     await composerRobot.addRecipientIntoField(
       prefixEmailAddress: PrefixEmailAddress.to,
       email: emailUser,
diff --git a/integration_test/scenarios/save_as_template_scenario.dart b/integration_test/scenarios/save_as_template_scenario.dart
index 95586bd817..368573f8b4 100644
--- a/integration_test/scenarios/save_as_template_scenario.dart
+++ b/integration_test/scenarios/save_as_template_scenario.dart
@@ -17,11 +17,12 @@ class SaveAsTemplateScenario extends BaseTestScenario {
     await composerRobot.grantContactPermission();
     
     await composerRobot.saveAsTemplate();
-    
+    await $.pumpAndTrySettle();
     await _expectSaveToastSuccessVisible();
 
     await composerRobot.addSubject('test subject');
-    await hideKeyboard();
+    hideKeyboard();
+    await $.pumpAndTrySettle(duration: const Duration(seconds: 1));
     await composerRobot.saveAsTemplate();
 
     await _expectUpdateToastSuccessVisible();
diff --git a/integration_test/scenarios/search/persist_filter_when_change_search_input_text_scenario.dart b/integration_test/scenarios/search/persist_filter_when_change_search_input_text_scenario.dart
index 59baed91fe..6282ed54f5 100644
--- a/integration_test/scenarios/search/persist_filter_when_change_search_input_text_scenario.dart
+++ b/integration_test/scenarios/search/persist_filter_when_change_search_input_text_scenario.dart
@@ -14,7 +14,7 @@ class PersistFilterWhenChangeSearchInputTextScenario
   Future runTestLogic() async {
     const email = String.fromEnvironment('BASIC_AUTH_EMAIL');
     const subject = 'Persist search filter';
-    const queryStringFirst = 'Persist';
+    const queryStringFirst = 'Persist search filter';
     const queryStringSecond = 'Persist search';
 
     final threadRobot = ThreadRobot($);
diff --git a/ios/.gitignore b/ios/.gitignore
index e96ef602b8..da38b0877b 100644
--- a/ios/.gitignore
+++ b/ios/.gitignore
@@ -24,6 +24,7 @@ Flutter/flutter_assets/
 Flutter/flutter_export_environment.sh
 ServiceDefinitions.json
 Runner/GeneratedPluginRegistrant.*
+Flutter/ephemeral/
 
 # Exceptions to above rules.
 !default.mode1v3
diff --git a/ios/Podfile b/ios/Podfile
index 8148d12783..b38c1ac3b0 100644
--- a/ios/Podfile
+++ b/ios/Podfile
@@ -1,5 +1,5 @@
 # Uncomment this line to define a global platform for your project
-platform :ios, '12.0'
+platform :ios, '14.0'
 
 # CocoaPods analytics sends network stats synchronously affecting flutter build latency.
 ENV['COCOAPODS_DISABLE_STATS'] = 'true'
diff --git a/ios/Podfile.lock b/ios/Podfile.lock
index 07e29a3c0e..e4b97aa4dc 100644
--- a/ios/Podfile.lock
+++ b/ios/Podfile.lock
@@ -9,8 +9,6 @@ PODS:
   - AppAuth/Core (2.0.0)
   - AppAuth/ExternalUserAgent (2.0.0):
     - AppAuth/Core
-  - better_open_file (0.0.1):
-    - Flutter
   - CocoaAsyncSocket (7.6.5)
   - connectivity_plus (0.0.1):
     - Flutter
@@ -52,6 +50,8 @@ PODS:
     - SwiftyGif
   - external_app_launcher (0.0.1):
     - Flutter
+  - external_path (2.0.1):
+    - Flutter
   - file_picker (0.0.1):
     - DKImagePickerController/PhotoGallery
     - Flutter
@@ -176,6 +176,8 @@ PODS:
     - nanopb/encode (= 2.30909.1)
   - nanopb/decode (2.30909.1)
   - nanopb/encode (2.30909.1)
+  - open_file_ios (0.0.1):
+    - Flutter
   - OrderedSet (6.0.3)
   - package_info_plus (0.4.5):
     - Flutter
@@ -186,10 +188,10 @@ PODS:
     - CocoaAsyncSocket (~> 7.6)
     - Flutter
     - FlutterMacOS
-  - pdfrx (0.0.3):
+  - pdfrx (0.0.6):
     - Flutter
     - FlutterMacOS
-  - permission_handler_apple (9.1.1):
+  - permission_handler_apple (9.3.0):
     - Flutter
   - photo_manager (2.0.0):
     - Flutter
@@ -217,17 +219,17 @@ PODS:
   - UniversalDetector2 (2.0.1)
   - url_launcher_ios (0.0.1):
     - Flutter
-  - workmanager (0.0.1):
+  - workmanager_apple (0.0.1):
     - Flutter
 
 DEPENDENCIES:
   - app_links (from `.symlinks/plugins/app_links/ios`)
   - app_settings (from `.symlinks/plugins/app_settings/ios`)
-  - better_open_file (from `.symlinks/plugins/better_open_file/ios`)
   - connectivity_plus (from `.symlinks/plugins/connectivity_plus/ios`)
   - contacts_service (from `.symlinks/plugins/contacts_service/ios`)
   - device_info_plus (from `.symlinks/plugins/device_info_plus/ios`)
   - external_app_launcher (from `.symlinks/plugins/external_app_launcher/ios`)
+  - external_path (from `.symlinks/plugins/external_path/ios`)
   - file_picker (from `.symlinks/plugins/file_picker/ios`)
   - firebase_core (from `.symlinks/plugins/firebase_core/ios`)
   - firebase_messaging (from `.symlinks/plugins/firebase_messaging/ios`)
@@ -245,6 +247,7 @@ DEPENDENCIES:
   - flutter_secure_storage (from `.symlinks/plugins/flutter_secure_storage/ios`)
   - flutter_web_auth_2 (from `.symlinks/plugins/flutter_web_auth_2/ios`)
   - lottie_native (from `.symlinks/plugins/lottie_native/ios`)
+  - open_file_ios (from `.symlinks/plugins/open_file_ios/ios`)
   - package_info_plus (from `.symlinks/plugins/package_info_plus/ios`)
   - path_provider_foundation (from `.symlinks/plugins/path_provider_foundation/darwin`)
   - patrol (from `.symlinks/plugins/patrol/darwin`)
@@ -257,7 +260,7 @@ DEPENDENCIES:
   - 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`)
-  - workmanager (from `.symlinks/plugins/workmanager/ios`)
+  - workmanager_apple (from `.symlinks/plugins/workmanager_apple/ios`)
 
 SPEC REPOS:
   trunk:
@@ -289,8 +292,6 @@ EXTERNAL SOURCES:
     :path: ".symlinks/plugins/app_links/ios"
   app_settings:
     :path: ".symlinks/plugins/app_settings/ios"
-  better_open_file:
-    :path: ".symlinks/plugins/better_open_file/ios"
   connectivity_plus:
     :path: ".symlinks/plugins/connectivity_plus/ios"
   contacts_service:
@@ -299,6 +300,8 @@ EXTERNAL SOURCES:
     :path: ".symlinks/plugins/device_info_plus/ios"
   external_app_launcher:
     :path: ".symlinks/plugins/external_app_launcher/ios"
+  external_path:
+    :path: ".symlinks/plugins/external_path/ios"
   file_picker:
     :path: ".symlinks/plugins/file_picker/ios"
   firebase_core:
@@ -333,6 +336,8 @@ EXTERNAL SOURCES:
     :path: ".symlinks/plugins/flutter_web_auth_2/ios"
   lottie_native:
     :path: ".symlinks/plugins/lottie_native/ios"
+  open_file_ios:
+    :path: ".symlinks/plugins/open_file_ios/ios"
   package_info_plus:
     :path: ".symlinks/plugins/package_info_plus/ios"
   path_provider_foundation:
@@ -357,70 +362,71 @@ EXTERNAL SOURCES:
     :path: ".symlinks/plugins/shared_preferences_foundation/darwin"
   url_launcher_ios:
     :path: ".symlinks/plugins/url_launcher_ios/ios"
-  workmanager:
-    :path: ".symlinks/plugins/workmanager/ios"
+  workmanager_apple:
+    :path: ".symlinks/plugins/workmanager_apple/ios"
 
 SPEC CHECKSUMS:
-  app_links: e7a6750a915a9e161c58d91bc610e8cd1d4d0ad0
-  app_settings: 017320c6a680cdc94c799949d95b84cb69389ebc
+  app_links: 3da4c36b46cac3bf24eb897f1a6ce80bda109874
+  app_settings: 3507c575c2b18a462c99948f61d5de21d4420999
   AppAuth: 1c1a8afa7e12f2ec3a294d9882dfa5ab7d3cb063
-  better_open_file: 03cf320415d4d3f46b6e00adc4a567d76c1a399d
   CocoaAsyncSocket: 065fd1e645c7abab64f7a6a2007a48038fdc6a99
-  connectivity_plus: 07c49e96d7fc92bc9920617b83238c4d178b446a
-  contacts_service: 849e1f84281804c8bfbec1b4c3eedcb23c5d3eca
-  device_info_plus: 7545d84d8d1b896cb16a4ff98c19f07ec4b298ea
+  connectivity_plus: 4d5101c5877bedcda6cd1ccb825307911667d6b0
+  contacts_service: 7c2ed10147f55891576c6a582f431e385d8de92d
+  device_info_plus: 8b1a7b1cce194cd48521ee7159feb70453ed4854
   DKImagePickerController: 946cec48c7873164274ecc4624d19e3da4c1ef3c
   DKPhotoGallery: b3834fecb755ee09a593d7c9e389d8b5d6deed60
-  external_app_launcher: ad55ac844aa21f2d2197d7cec58ff0d0dc40bbc0
-  file_picker: b159e0c068aef54932bb15dc9fd1571818edaf49
+  external_app_launcher: 3411245965270a74040a3de17e27bd02b8abb905
+  external_path: fd37c654b69a1336e33a2403f48383ae6100e443
+  file_picker: a0560bc09d61de87f12d246fc47d2119e6ef37be
   Firebase: 0219acf760880eeec8ce479895bd7767466d9f81
-  firebase_core: dee76ded6c693fdb38b8ea39aef7129e32e587a3
-  firebase_messaging: 67fbcdaf6a7c81849590e542eff2409dc49d9fa5
+  firebase_core: 08a35f8b03042881dffe36b86a3bb287e76d52f8
+  firebase_messaging: 4840ee73783211d456bd6b0f73c878ac5592dd00
   FirebaseCore: e317665b9d744727a97e623edbbed009320afdd7
   FirebaseCoreInternal: df84dd300b561c27d5571684f389bf60b0a5c934
   FirebaseInstallations: 913cf60d0400ebd5d6b63a28b290372ab44590dd
   FirebaseMessaging: ac9062bcc35ed56e15a0241d8fd317022499baf8
-  fk_user_agent: 1f47ec39291e8372b1d692b50084b0d54103c545
+  fk_user_agent: 137145b086229251761678fe034da53753f4ce59
   Flutter: e0871f40cf51350855a761d2e70bf5af5b9b5de7
-  flutter_appauth: 88fcbc27871cbedac400db9d39b1363e4850179d
-  flutter_charset_detector_darwin: fb3692d6d72cb6afcce7b0dd1a9516be6e78556e
-  flutter_downloader: b7301ae057deadd4b1650dc7c05375f10ff12c39
-  flutter_file_dialog: 4c014a45b105709a27391e266c277d7e588e9299
-  flutter_image_compress_common: ec1d45c362c9d30a3f6a0426c297f47c52007e3e
-  flutter_inappwebview_ios: 6f63631e2c62a7c350263b13fa5427aedefe81d4
-  flutter_keyboard_visibility: 0339d06371254c3eb25eeb90ba8d17dca8f9c069
-  flutter_local_notifications: 4cde75091f6327eb8517fa068a0a5950212d2086
-  flutter_native_splash: 52501b97d1c0a5f898d687f1646226c1f93c56ef
-  flutter_secure_storage: 23fc622d89d073675f2eaa109381aefbcf5a49be
-  flutter_web_auth_2: 051cf9f5dc366f31b5dcc4e2952c2b954767be8a
+  flutter_appauth: d4abcf54856e5d8ba82ed7646ffc83245d4aa448
+  flutter_charset_detector_darwin: 14f055ebeed6896144cc96b046749df51127a0a3
+  flutter_downloader: 78da0da1084e709cbfd3b723c7ea349c71681f09
+  flutter_file_dialog: ca8d7fbd1772d4f0c2777b4ab20a7787ef4e7dd8
+  flutter_image_compress_common: 1697a328fd72bfb335507c6bca1a65fa5ad87df1
+  flutter_inappwebview_ios: b89ba3482b96fb25e00c967aae065701b66e9b99
+  flutter_keyboard_visibility: 4625131e43015dbbe759d9b20daaf77e0e3f6619
+  flutter_local_notifications: ad39620c743ea4c15127860f4b5641649a988100
+  flutter_native_splash: 9e672d3818957718ee006a491730c09deeecace9
+  flutter_secure_storage: 2c2ff13db9e0a5647389bff88b0ecac56e3f3418
+  flutter_web_auth_2: 5c8d9dcd7848b5a9efb086d24e7a9adcae979c80
   GoogleDataTransport: 6c09b596d841063d76d4288cc2d2f42cc36e1e2a
   GoogleUtilities: ea963c370a38a8069cc5f7ba4ca849a60b6d7d15
   libwebp: 02b23773aedb6ff1fd38cec7a77b81414c6842a8
   lottie-ios: e047b1d2e6239b787cc5e9755b988869cf190494
-  lottie_native: 96739b7fc232c7f440cbf5c2649100c51f117213
+  lottie_native: c2e590a297861fc32a0188cf8dab39aa97f86d81
   Mantle: c5aa8794a29a022dfbbfc9799af95f477a69b62d
   nanopb: d4d75c12cd1316f4a64e3c6963f879ecd4b5e0d5
+  open_file_ios: 5ff7526df64e4394b4fe207636b67a95e83078bb
   OrderedSet: e539b66b644ff081c73a262d24ad552a69be3a94
-  package_info_plus: 58f0028419748fad15bf008b270aaa8e54380b1c
-  path_provider_foundation: 2b6b4c569c0fb62ec74538f866245ac84301af46
-  patrol: 0564cee315ff6c86fb802b3647db05cc2d3d0624
-  pdfrx: 07fc287c47ea8d027c4ed56457f8a1aa74d73594
-  permission_handler_apple: e76247795d700c14ea09e3a2d8855d41ee80a2e6
-  photo_manager: ff695c7a1dd5bc379974953a2b5c0a293f7c4c8a
-  pointer_interceptor_ios: 9280618c0b2eeb80081a343924aa8ad756c21375
-  printing: 233e1b73bd1f4a05615548e9b5a324c98588640b
+  package_info_plus: 580e9a5f1b6ca5594e7c9ed5f92d1dfb2a66b5e1
+  path_provider_foundation: 080d55be775b7414fd5a5ef3ac137b97b097e564
+  patrol: 5df5d241d7f95f0df12a6906bbf45acb43a1e537
+  pdfrx: 310e84d01e06fd2af26e16507a0e48c27e99195c
+  permission_handler_apple: 4ed2196e43d0651e8ff7ca3483a069d469701f2d
+  photo_manager: d2fbcc0f2d82458700ee6256a15018210a81d413
+  pointer_interceptor_ios: 6c19a55ea369c3f64424c9a95441e2b0e8beb8f3
+  printing: 54ff03f28fe9ba3aa93358afb80a8595a071dd07
   PromisesObjC: f5707f49cb48b9636751c5b2e7d227e43fba9f47
   ReachabilitySwift: 32793e867593cfc1177f5d16491e3a197d2fccda
-  receive_sharing_intent: 79c848f5b045674ad60b9fea3bafea59962ad2c1
+  receive_sharing_intent: 222384f00ffe7e952bbfabaa9e3967cb87e5fe00
   SDWebImage: f29024626962457f3470184232766516dee8dfea
   SDWebImageWebPCoder: e38c0a70396191361d60c092933e22c20d5b1380
-  share_plus: c3fef564749587fc939ef86ffb283ceac0baf9f5
-  shared_preferences_foundation: 5b919d13b803cadd15ed2dc053125c68730e5126
+  share_plus: de6030e33b4e106470e09322d87cf2a4258d2d1d
+  shared_preferences_foundation: 9e1978ff2562383bd5676f64ec4e9aa8fa06a6f7
   SwiftyGif: 706c60cf65fa2bc5ee0313beece843c8eb8194d4
   UniversalDetector2: 7c9ffd935cf050eeb19edf7e90f6febe3743a1af
-  url_launcher_ios: 5334b05cef931de560670eeae103fd3e431ac3fe
-  workmanager: 0afdcf5628bbde6924c21af7836fed07b42e30e6
+  url_launcher_ios: 694010445543906933d732453a59da0a173ae33d
+  workmanager_apple: 904529ae31e97fc5be632cf628507652294a0778
 
-PODFILE CHECKSUM: f2eb8f5a17c320a935d112236893d073c572e17e
+PODFILE CHECKSUM: 40b12ce0bc437886ee4f4050970375d7d253708d
 
-COCOAPODS: 1.15.2
+COCOAPODS: 1.16.2
diff --git a/ios/Runner.xcodeproj/project.pbxproj b/ios/Runner.xcodeproj/project.pbxproj
index 03e25a3a0c..86df3a02fc 100644
--- a/ios/Runner.xcodeproj/project.pbxproj
+++ b/ios/Runner.xcodeproj/project.pbxproj
@@ -511,6 +511,7 @@
 				97C146EB1CF9000F007C117D /* Frameworks */,
 				97C146EC1CF9000F007C117D /* Resources */,
 				3B06AD1E1E4923F5004D2608 /* Thin Binary */,
+				C0BEA1D661C28FBC88584C44 /* [CP] Copy Pods Resources */,
 			);
 			buildRules = (
 			);
@@ -743,6 +744,23 @@
 			shellPath = /bin/sh;
 			shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build\n";
 		};
+		C0BEA1D661C28FBC88584C44 /* [CP] Copy Pods Resources */ = {
+			isa = PBXShellScriptBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+			);
+			inputFileListPaths = (
+				"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-input-files.xcfilelist",
+			);
+			name = "[CP] Copy Pods Resources";
+			outputFileListPaths = (
+				"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-output-files.xcfilelist",
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+			shellPath = /bin/sh;
+			shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources.sh\"\n";
+			showEnvVarsInLog = 0;
+		};
 		E791D44F3C4EDE784D610B9E /* [CP] Check Pods Manifest.lock */ = {
 			isa = PBXShellScriptBuildPhase;
 			buildActionMask = 2147483647;
diff --git a/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme
index 7bdae17d13..67880a9dec 100644
--- a/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme
+++ b/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme
@@ -26,6 +26,7 @@
       buildConfiguration = "Debug"
       selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
       selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
+      customLLDBInitFile = "$(SRCROOT)/Flutter/ephemeral/flutter_lldbinit"
       shouldUseLaunchSchemeArgsEnv = "YES">
       
          
       
diff --git a/lib/features/email/data/network/email_api.dart b/lib/features/email/data/network/email_api.dart
index 17ef3544f9..62ab655898 100644
--- a/lib/features/email/data/network/email_api.dart
+++ b/lib/features/email/data/network/email_api.dart
@@ -312,7 +312,7 @@ class EmailAPI with HandleSetErrorMixin {
 
     String externalStorageDirPath;
     if (Platform.isAndroid) {
-      externalStorageDirPath = await ExternalPath.getExternalStoragePublicDirectory(ExternalPath.DIRECTORY_DOWNLOADS);
+      externalStorageDirPath = await ExternalPath.getExternalStoragePublicDirectory(ExternalPath.DIRECTORY_DOWNLOAD);
     } else if (Platform.isIOS) {
       externalStorageDirPath = (await getApplicationDocumentsDirectory()).absolute.path;
     } else {
diff --git a/lib/features/email/presentation/controller/single_email_controller.dart b/lib/features/email/presentation/controller/single_email_controller.dart
index f3069f9c3e..484785f131 100644
--- a/lib/features/email/presentation/controller/single_email_controller.dart
+++ b/lib/features/email/presentation/controller/single_email_controller.dart
@@ -1,7 +1,7 @@
 import 'dart:async';
 import 'dart:io';
 
-import 'package:better_open_file/better_open_file.dart' as open_file;
+import 'package:open_file/open_file.dart' as open_file;
 import 'package:core/core.dart';
 import 'package:core/presentation/utils/html_transformer/text/sanitize_autolink_unescape_html_transformer.dart';
 import 'package:core/presentation/utils/html_transformer/text/new_line_transformer.dart';
@@ -36,7 +36,6 @@ import 'package:model/error_type_handler/unknown_uri_exception.dart';
 import 'package:model/model.dart';
 import 'package:permission_handler/permission_handler.dart';
 import 'package:pointer_interceptor/pointer_interceptor.dart';
-import 'package:share_plus/share_plus.dart';
 import 'package:tmail_ui_user/features/base/base_controller.dart';
 import 'package:tmail_ui_user/features/base/mixin/app_loader_mixin.dart';
 import 'package:tmail_ui_user/features/base/mixin/message_dialog_action_manager.dart';
@@ -968,6 +967,8 @@ class SingleEmailController extends BaseController with AppLoaderMixin {
         logError('SingleEmailController::_exportAttachmentAction(): $e');
         consumeState(Stream.value(Left(ExportAttachmentFailure(e))));
       }
+    } else {
+      consumeState(Stream.value(Left(ExportAttachmentFailure(NotFoundAccountIdException()))));
     }
   }
 
@@ -1034,31 +1035,35 @@ class SingleEmailController extends BaseController with AppLoaderMixin {
 
   void _exportAllAttachmentsSuccessAction(ExportAllAttachmentsSuccess success) {
     popBack();
-    _saveDownloadedZipAttachments(success.downloadedResponse.filePath);
+    _saveFileToStorage(success.downloadedResponse.filePath);
   }
 
   void _openDownloadedPreviewWorkGroupDocument(DownloadedResponse downloadedResponse) async {
     log('SingleEmailController::_openDownloadedPreviewWorkGroupDocument(): $downloadedResponse');
-    if (downloadedResponse.mediaType == null) {
-      await Share.shareXFiles([XFile(downloadedResponse.filePath)]);
+    final filePath = downloadedResponse.filePath;
+    final mediaType = downloadedResponse.mediaType;
+
+    if (mediaType == null) {
+      _saveFileToStorage(filePath);
+      return;
     }
 
     final openResult = await open_file.OpenFile.open(
-        downloadedResponse.filePath,
-        type: Platform.isAndroid ? downloadedResponse.mediaType!.mimeType : null,
-        uti: Platform.isIOS ? downloadedResponse.mediaType!.getDocumentUti().value : null);
+      filePath,
+      type: Platform.isAndroid ? mediaType.mimeType : null,
+      // "xdg" is default value
+      linuxDesktopName: Platform.isIOS
+          ? mediaType.getDocumentUti().value ?? 'xdg'
+          : 'xdg',
+    );
 
     if (openResult.type != open_file.ResultType.done) {
       logError('SingleEmailController::_openDownloadedPreviewWorkGroupDocument(): no preview available');
-      if (currentOverlayContext != null && currentContext != null) {
-        appToast.showToastErrorMessage(
-          currentOverlayContext!,
-          AppLocalizations.of(currentContext!).noPreviewAvailable);
-      }
+      _saveFileToStorage(filePath);
     }
   }
 
-  Future _saveDownloadedZipAttachments(String filePath) async {
+  Future _saveFileToStorage(String filePath) async {
     final params = SaveFileDialogParams(sourceFilePath: filePath);
     await FlutterFileDialog.saveFile(params: params);
   }
diff --git a/lib/features/email/presentation/widgets/attachments_info.dart b/lib/features/email/presentation/widgets/attachments_info.dart
index b200a03346..dcfbf92f5f 100644
--- a/lib/features/email/presentation/widgets/attachments_info.dart
+++ b/lib/features/email/presentation/widgets/attachments_info.dart
@@ -68,6 +68,7 @@ class AttachmentsInfo extends StatelessWidget {
         ),
         if (onTapDownloadAllButton != null)
           TMailButtonWidget(
+            key: const Key('download_all_attachments_button'),
             text: AppLocalizations.of(context).downloadAll,
             icon: !responsiveUtils.isMobile(context)
                 ? imagePaths.icDownloadAttachment
diff --git a/lib/features/home/presentation/home_controller.dart b/lib/features/home/presentation/home_controller.dart
index d97cff328d..c1a8decb54 100644
--- a/lib/features/home/presentation/home_controller.dart
+++ b/lib/features/home/presentation/home_controller.dart
@@ -102,7 +102,7 @@ class HomeController extends ReloadableController {
       .then((_) => FlutterDownloader.registerCallback(downloadCallback));
   }
 
-  static void downloadCallback(String id, DownloadTaskStatus status, int progress) {}
+  static void downloadCallback(String id, int status, int progress) {}
 
   Future _handleNavigateToScreen() async {
     await Future.delayed(2.seconds);
diff --git a/lib/features/offline_mode/bindings/sending_email_interactor_bindings.dart b/lib/features/offline_mode/bindings/sending_email_interactor_bindings.dart
deleted file mode 100644
index d3a1376815..0000000000
--- a/lib/features/offline_mode/bindings/sending_email_interactor_bindings.dart
+++ /dev/null
@@ -1,145 +0,0 @@
-import 'package:core/data/model/source_type/data_source_type.dart';
-import 'package:core/presentation/resources/image_paths.dart';
-import 'package:core/utils/file_utils.dart';
-import 'package:core/utils/preview_eml_file_utils.dart';
-import 'package:core/utils/print_utils.dart';
-import 'package:get/get.dart';
-import 'package:tmail_ui_user/features/base/interactors_bindings.dart';
-import 'package:tmail_ui_user/features/caching/utils/local_storage_manager.dart';
-import 'package:tmail_ui_user/features/caching/utils/session_storage_manager.dart';
-import 'package:tmail_ui_user/features/composer/domain/usecases/send_email_interactor.dart';
-import 'package:tmail_ui_user/features/email/data/datasource/email_datasource.dart';
-import 'package:tmail_ui_user/features/email/data/datasource/html_datasource.dart';
-import 'package:tmail_ui_user/features/email/data/datasource/print_file_datasource.dart';
-import 'package:tmail_ui_user/features/email/data/datasource_impl/email_datasource_impl.dart';
-import 'package:tmail_ui_user/features/email/data/datasource_impl/email_hive_cache_datasource_impl.dart';
-import 'package:tmail_ui_user/features/email/data/datasource_impl/email_local_storage_datasource_impl.dart';
-import 'package:tmail_ui_user/features/email/data/datasource_impl/email_session_storage_datasource_impl.dart';
-import 'package:tmail_ui_user/features/email/data/datasource_impl/html_datasource_impl.dart';
-import 'package:tmail_ui_user/features/email/data/datasource_impl/print_file_datasource_impl.dart';
-import 'package:tmail_ui_user/features/email/data/local/html_analyzer.dart';
-import 'package:tmail_ui_user/features/email/data/network/email_api.dart';
-import 'package:tmail_ui_user/features/email/data/repository/email_repository_impl.dart';
-import 'package:tmail_ui_user/features/email/domain/repository/email_repository.dart';
-import 'package:tmail_ui_user/features/mailbox/data/datasource/mailbox_datasource.dart';
-import 'package:tmail_ui_user/features/mailbox/data/datasource/state_datasource.dart';
-import 'package:tmail_ui_user/features/mailbox/data/datasource_impl/mailbox_cache_datasource_impl.dart';
-import 'package:tmail_ui_user/features/mailbox/data/datasource_impl/mailbox_datasource_impl.dart';
-import 'package:tmail_ui_user/features/mailbox/data/datasource_impl/state_datasource_impl.dart';
-import 'package:tmail_ui_user/features/mailbox/data/local/mailbox_cache_manager.dart';
-import 'package:tmail_ui_user/features/mailbox/data/local/state_cache_manager.dart';
-import 'package:tmail_ui_user/features/mailbox/data/network/mailbox_api.dart';
-import 'package:tmail_ui_user/features/mailbox/data/network/mailbox_isolate_worker.dart';
-import 'package:tmail_ui_user/features/mailbox/data/repository/mailbox_repository_impl.dart';
-import 'package:tmail_ui_user/features/mailbox/domain/repository/mailbox_repository.dart';
-import 'package:tmail_ui_user/features/offline_mode/manager/new_email_cache_manager.dart';
-import 'package:tmail_ui_user/features/offline_mode/manager/new_email_cache_worker_queue.dart';
-import 'package:tmail_ui_user/features/offline_mode/manager/opened_email_cache_manager.dart';
-import 'package:tmail_ui_user/features/offline_mode/manager/opened_email_cache_worker_queue.dart';
-import 'package:tmail_ui_user/features/offline_mode/manager/sending_email_cache_manager.dart';
-import 'package:tmail_ui_user/features/server_settings/data/datasource/server_settings_data_source.dart';
-import 'package:tmail_ui_user/features/server_settings/data/datasource_impl/remote_server_settings_data_source_impl.dart';
-import 'package:tmail_ui_user/features/server_settings/data/network/server_settings_api.dart';
-import 'package:tmail_ui_user/features/server_settings/data/repository/server_settings_repository_impl.dart';
-import 'package:tmail_ui_user/features/server_settings/domain/repository/server_settings_repository.dart';
-import 'package:tmail_ui_user/features/thread/data/local/email_cache_manager.dart';
-import 'package:tmail_ui_user/main/exceptions/cache_exception_thrower.dart';
-import 'package:tmail_ui_user/main/exceptions/remote_exception_thrower.dart';
-import 'package:tmail_ui_user/main/utils/ios_sharing_manager.dart';
-
-class SendEmailInteractorBindings extends InteractorsBindings {
-
-  @override
-  void bindingsDataSource() {
-    Get.lazyPut(() => Get.find());
-    Get.lazyPut(() => Get.find());
-    Get.lazyPut(() => Get.find());
-    Get.lazyPut(() => Get.find());
-    Get.lazyPut(() => Get.find());
-    Get.lazyPut(() => Get.find());
-  }
-
-  @override
-  void bindingsDataSourceImpl() {
-    Get.lazyPut(() => EmailDataSourceImpl(
-      Get.find(),
-      Get.find()));
-    Get.lazyPut(() => MailboxDataSourceImpl(
-      Get.find(),
-      Get.find(),
-      Get.find()));
-    Get.lazyPut(() => MailboxCacheDataSourceImpl(
-      Get.find(),
-      Get.find()));
-    Get.lazyPut(() => HtmlDataSourceImpl(
-      Get.find(),
-      Get.find()));
-    Get.lazyPut(() => StateDataSourceImpl(
-      Get.find(),
-      Get.find(),
-      Get.find()));
-    Get.lazyPut(() => PrintFileDataSourceImpl(
-      Get.find(),
-      Get.find(),
-      Get.find(),
-      Get.find(),
-      Get.find(),
-    ));
-    Get.lazyPut(() => EmailHiveCacheDataSourceImpl(
-      Get.find(),
-      Get.find(),
-      Get.find(),
-      Get.find(),
-      Get.find(),
-      Get.find(),
-      Get.find(),
-      Get.find()));
-    Get.lazyPut(() => EmailLocalStorageDataSourceImpl(
-      Get.find(),
-      Get.find(),
-      Get.find()));
-    Get.lazyPut(() => EmailSessionStorageDatasourceImpl(
-      Get.find(),
-      Get.find()));
-    Get.lazyPut(() => RemoteServerSettingsDataSourceImpl(
-      Get.find(),
-      Get.find()));
-  }
-
-  @override
-  void bindingsInteractor() {
-    Get.lazyPut(() => SendEmailInteractor(Get.find()));
-  }
-
-  @override
-  void bindingsRepository() {
-    Get.lazyPut(() => Get.find());
-    Get.lazyPut(() => Get.find());
-    Get.lazyPut(() => Get.find());
-  }
-
-  @override
-  void bindingsRepositoryImpl() {
-    Get.lazyPut(() => EmailRepositoryImpl(
-      {
-        DataSourceType.network: Get.find(),
-        DataSourceType.hiveCache: Get.find(),
-        DataSourceType.local: Get.find(),
-        DataSourceType.session: Get.find(),
-      },
-      Get.find(),
-      Get.find(),
-      Get.find(),
-    ));
-    Get.lazyPut(() => MailboxRepositoryImpl(
-      {
-        DataSourceType.network: Get.find(),
-        DataSourceType.local: Get.find()
-      },
-      Get.find(),
-    ));
-    Get.lazyPut(() => ServerSettingsRepositoryImpl(
-      Get.find()));
-  }
-
-}
\ No newline at end of file
diff --git a/lib/features/offline_mode/config/work_manager_config.dart b/lib/features/offline_mode/config/work_manager_config.dart
deleted file mode 100644
index 77ec26f9d3..0000000000
--- a/lib/features/offline_mode/config/work_manager_config.dart
+++ /dev/null
@@ -1,19 +0,0 @@
-
-import 'package:core/core.dart';
-import 'package:tmail_ui_user/features/offline_mode/work_manager/work_dispatcher.dart';
-import 'package:workmanager/workmanager.dart';
-
-class WorkManagerConfig {
-  static WorkManagerConfig? _instance;
-
-  WorkManagerConfig._();
-
-  factory WorkManagerConfig() => _instance ??= WorkManagerConfig._();
-
-  Future initialize() {
-    return Workmanager().initialize(
-      callbackDispatcher,
-      isInDebugMode: BuildUtils.isDebugMode
-    );
-  }
-}
\ No newline at end of file
diff --git a/lib/features/offline_mode/config/work_manager_constants.dart b/lib/features/offline_mode/config/work_manager_constants.dart
deleted file mode 100644
index d53ab15318..0000000000
--- a/lib/features/offline_mode/config/work_manager_constants.dart
+++ /dev/null
@@ -1,5 +0,0 @@
-
-class WorkManagerConstants {
-  static const String workerTypeKey = 'worker_type';
-  static const int delayTime = 2000;
-}
\ No newline at end of file
diff --git a/lib/features/offline_mode/controller/work_manager_controller.dart b/lib/features/offline_mode/controller/work_manager_controller.dart
deleted file mode 100644
index 1b8865693f..0000000000
--- a/lib/features/offline_mode/controller/work_manager_controller.dart
+++ /dev/null
@@ -1,92 +0,0 @@
-import 'dart:async';
-import 'package:collection/collection.dart';
-import 'package:core/utils/app_logger.dart';
-import 'package:tmail_ui_user/features/offline_mode/config/work_manager_constants.dart';
-import 'package:tmail_ui_user/features/offline_mode/exceptions/workmanager_exception.dart';
-import 'package:tmail_ui_user/features/offline_mode/work_manager/one_time_work_request.dart';
-import 'package:tmail_ui_user/features/offline_mode/work_manager/periodic_work_request.dart';
-import 'package:tmail_ui_user/features/offline_mode/work_manager/work_request.dart';
-import 'package:tmail_ui_user/features/offline_mode/work_manager/worker_type.dart';
-import 'package:workmanager/workmanager.dart';
-
-class WorkManagerController {
-
-  static WorkManagerController? _instance;
-
-  WorkManagerController._();
-
-  factory WorkManagerController() => _instance ??= WorkManagerController._();
-
-  Future enqueue(WorkRequest workRequest) async {
-    try {
-      log('WorkSchedulerController::enqueue():workRequest: $workRequest');
-      if (workRequest is OneTimeWorkRequest) {
-        await Workmanager().registerOneOffTask(
-          workRequest.uniqueId,
-          workRequest.taskId,
-          tag: workRequest.tag,
-          initialDelay: workRequest.initialDelay,
-          constraints: workRequest.constraints,
-          backoffPolicy: workRequest.backoffPolicy,
-          backoffPolicyDelay: workRequest.backoffPolicyDelay,
-          outOfQuotaPolicy: workRequest.outOfQuotaPolicy,
-          inputData: workRequest.inputData
-        );
-      } if (workRequest is PeriodicWorkRequest) {
-        await Workmanager().registerPeriodicTask(
-          workRequest.uniqueId,
-          workRequest.taskId,
-          tag: workRequest.tag,
-          frequency: workRequest.frequency,
-          initialDelay: workRequest.initialDelay,
-          constraints: workRequest.constraints,
-          backoffPolicy: workRequest.backoffPolicy,
-          backoffPolicyDelay: workRequest.backoffPolicyDelay,
-          outOfQuotaPolicy: workRequest.outOfQuotaPolicy,
-          inputData: workRequest.inputData
-        );
-      }
-    } catch (e) {
-      logError('WorkSchedulerController::enqueue(): EXCEPTION: $e');
-    }
-  }
-
-  Future handleBackgroundTask(String taskName, Map? inputData) async {
-    log('WorkSchedulerController::handleBackgroundTask():taskName: $taskName | inputData: $inputData');
-    try {
-      if (inputData != null && inputData.isNotEmpty) {
-        final workerType = inputData.remove(WorkManagerConstants.workerTypeKey);
-        final dataObject = inputData;
-        log('WorkSchedulerController::handleBackgroundTask():workerType: $workerType | dataObject: $dataObject');
-        final matchedType = WorkerType.values.firstWhereOrNull((type) => type.name == workerType);
-
-        if (matchedType != null) {
-          final worker = matchedType.getWorker();
-          await worker.bindDI();
-          final result = await worker.doWork(taskName, dataObject);
-          return result;
-        } else {
-          return Future.error(CanNotFoundWorkerType());
-        }
-      } else {
-        return Future.error(CanNotFoundInputData());
-      }
-    } catch (e) {
-      logError('WorkSchedulerController::handleBackgroundTask():EXCEPTION: $e');
-      return Future.error(e);
-    }
-  }
-
-  Future cancelByWorkType(WorkerType type) => Workmanager().cancelByTag(type.name);
-
-  Future cancelByUniqueId(String uniqueId) {
-    try {
-      return Workmanager().cancelByUniqueName(uniqueId);
-    } catch (e) {
-      logError('WorkSchedulerController::cancelByUniqueId():EXCEPTION: $e');
-      return Future.value();
-    }
-  }
-
-  Future cancelAll() => Workmanager().cancelAll();
-}
\ No newline at end of file
diff --git a/lib/features/offline_mode/exceptions/workmanager_exception.dart b/lib/features/offline_mode/exceptions/workmanager_exception.dart
deleted file mode 100644
index a1204f0915..0000000000
--- a/lib/features/offline_mode/exceptions/workmanager_exception.dart
+++ /dev/null
@@ -1,3 +0,0 @@
-class CanNotFoundInputData implements Exception {}
-
-class CanNotFoundWorkerType implements Exception {}
\ No newline at end of file
diff --git a/lib/features/offline_mode/work_manager/one_time_work_request.dart b/lib/features/offline_mode/work_manager/one_time_work_request.dart
deleted file mode 100644
index f5aaf9c92b..0000000000
--- a/lib/features/offline_mode/work_manager/one_time_work_request.dart
+++ /dev/null
@@ -1,30 +0,0 @@
-
-import 'package:tmail_ui_user/features/offline_mode/work_manager/work_request.dart';
-import 'package:workmanager/workmanager.dart';
-
-/// A WorkRequest for non-repeating work.
-class OneTimeWorkRequest extends WorkRequest {
-  OneTimeWorkRequest({
-    required String uniqueId,
-    required String taskId,
-    String? tag,
-    Map? inputData,
-    Duration initialDelay = Duration.zero,
-    Duration backoffPolicyDelay = Duration.zero,
-    ExistingWorkPolicy? existingWorkPolicy,
-    BackoffPolicy? backoffPolicy,
-    OutOfQuotaPolicy? outOfQuotaPolicy,
-    Constraints? constraints
-  }) : super(
-    uniqueId: uniqueId,
-    taskId: taskId,
-    tag: tag,
-    inputData: inputData,
-    initialDelay: initialDelay,
-    backoffPolicyDelay: backoffPolicyDelay,
-    existingWorkPolicy: existingWorkPolicy,
-    backoffPolicy: backoffPolicy,
-    outOfQuotaPolicy: outOfQuotaPolicy,
-    constraints: constraints
-  );
-}
\ No newline at end of file
diff --git a/lib/features/offline_mode/work_manager/periodic_work_request.dart b/lib/features/offline_mode/work_manager/periodic_work_request.dart
deleted file mode 100644
index a051a600e6..0000000000
--- a/lib/features/offline_mode/work_manager/periodic_work_request.dart
+++ /dev/null
@@ -1,36 +0,0 @@
-
-import 'package:tmail_ui_user/features/offline_mode/work_manager/work_request.dart';
-import 'package:workmanager/workmanager.dart';
-
-/// A WorkRequest for repeating work.
-class PeriodicWorkRequest extends WorkRequest {
-  final Duration? frequency;
-
-  PeriodicWorkRequest({
-    required String uniqueId,
-    required String taskId,
-    String? tag,
-    Map? inputData,
-    Duration initialDelay = Duration.zero,
-    Duration backoffPolicyDelay = Duration.zero,
-    ExistingWorkPolicy? existingWorkPolicy,
-    BackoffPolicy? backoffPolicy,
-    OutOfQuotaPolicy? outOfQuotaPolicy,
-    Constraints? constraints,
-    this.frequency
-  }) : super(
-    uniqueId: uniqueId,
-    taskId: taskId,
-    tag: tag,
-    inputData: inputData,
-    initialDelay: initialDelay,
-    backoffPolicyDelay: backoffPolicyDelay,
-    existingWorkPolicy: existingWorkPolicy,
-    backoffPolicy: backoffPolicy,
-    outOfQuotaPolicy: outOfQuotaPolicy,
-    constraints: constraints
-  );
-
-  @override
-  List