From b59687c5ca591ff5472a38dee82aa41ab561bf32 Mon Sep 17 00:00:00 2001 From: otsmr Date: Thu, 12 Feb 2026 23:04:17 +0100 Subject: [PATCH] fix retransmission of media files + update dependencies --- android/settings.gradle | 2 +- dependencies | 2 +- ios/Podfile.lock | 209 +++++----- lib/app.dart | 10 +- lib/globals.dart | 5 +- lib/main.dart | 9 + lib/src/database/daos/mediafiles.dao.dart | 8 + lib/src/database/daos/signal.dao.dart | 12 +- lib/src/providers/routing.provider.dart | 4 +- lib/src/services/api.service.dart | 5 +- .../services/api/client2client/media.c2c.dart | 22 +- .../api/mediafiles/download.service.dart | 18 + .../api/mediafiles/upload.service.dart | 8 +- lib/src/services/api/server_messages.dart | 5 + .../share_image_contact_selection.view.dart | 10 +- .../best_friends_selector.dart | 5 +- .../select_show_time.dart | 2 +- .../views/camera/share_image_editor.view.dart | 9 +- .../chat_reaction_row.dart | 2 +- .../message_context_menu.dart | 6 +- .../reaction_buttons.component.dart | 2 +- lib/src/views/chats/message_info.view.dart | 2 +- lib/src/views/chats/start_new_chat.view.dart | 2 +- lib/src/views/components/alert_dialog.dart | 2 +- .../components/context_menu.component.dart | 2 +- .../select_chat_deletion_time.comp.dart | 6 +- lib/src/views/contact/contact.view.dart | 4 +- lib/src/views/groups/group.view.dart | 2 +- .../group_create_select_group_name.view.dart | 2 +- .../group_create_select_members.view.dart | 4 +- lib/src/views/home.view.dart | 6 +- .../memories/memories_photo_slider.view.dart | 5 +- lib/src/views/settings/appearance.view.dart | 8 +- .../views/settings/backup/backup.view.dart | 2 +- .../views/settings/data_and_storage.view.dart | 6 +- .../developer/automated_testing.view.dart | 2 +- .../views/settings/help/contact_us.view.dart | 8 +- .../settings/privacy_view_block.view.dart | 4 +- .../settings/profile/modify_avatar.view.dart | 4 +- .../views/settings/profile/profile.view.dart | 2 +- .../select_additional_users.view.dart | 4 +- .../select_payment.view.dart | 2 +- .../subscription_custom/voucher.view.dart | 8 +- .../user_study_questionnaire.view.dart | 4 +- pubspec.lock | 370 ++++++++++-------- test/widget_test.dart | 2 +- 46 files changed, 455 insertions(+), 363 deletions(-) diff --git a/android/settings.gradle b/android/settings.gradle index cc0a7b6..c79517d 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.9.0' apply false + id "com.android.application" version '8.9.1' apply false // START: FlutterFire Configuration id "com.google.gms.google-services" version "4.3.15" apply false // END: FlutterFire Configuration diff --git a/dependencies b/dependencies index 3a3a7e5..33111ed 160000 --- a/dependencies +++ b/dependencies @@ -1 +1 @@ -Subproject commit 3a3a7e5a6323da5413e3dd8c21abfa7cbe1c3a6f +Subproject commit 33111edeb285db34edeb9fd21762825babe71ab0 diff --git a/ios/Podfile.lock b/ios/Podfile.lock index b0cfa92..3b9e45f 100644 --- a/ios/Podfile.lock +++ b/ios/Podfile.lock @@ -54,55 +54,55 @@ PODS: - file_picker (0.0.1): - DKImagePickerController/PhotoGallery - Flutter - - Firebase (12.6.0): - - Firebase/Core (= 12.6.0) - - Firebase/Core (12.6.0): + - Firebase (12.8.0): + - Firebase/Core (= 12.8.0) + - Firebase/Core (12.8.0): - Firebase/CoreOnly - - FirebaseAnalytics (~> 12.6.0) - - Firebase/CoreOnly (12.6.0): - - FirebaseCore (~> 12.6.0) - - Firebase/Messaging (12.6.0): + - FirebaseAnalytics (~> 12.8.0) + - Firebase/CoreOnly (12.8.0): + - FirebaseCore (~> 12.8.0) + - Firebase/Messaging (12.8.0): - Firebase/CoreOnly - - FirebaseMessaging (~> 12.6.0) - - firebase_core (4.3.0): - - Firebase/CoreOnly (= 12.6.0) + - FirebaseMessaging (~> 12.8.0) + - firebase_core (4.4.0): + - Firebase/CoreOnly (= 12.8.0) - Flutter - - firebase_messaging (16.1.0): - - Firebase/Messaging (= 12.6.0) + - firebase_messaging (16.1.1): + - Firebase/Messaging (= 12.8.0) - firebase_core - Flutter - - FirebaseAnalytics (12.6.0): - - FirebaseAnalytics/Default (= 12.6.0) - - FirebaseCore (~> 12.6.0) - - FirebaseInstallations (~> 12.6.0) + - FirebaseAnalytics (12.8.0): + - FirebaseAnalytics/Default (= 12.8.0) + - FirebaseCore (~> 12.8.0) + - FirebaseInstallations (~> 12.8.0) - GoogleUtilities/AppDelegateSwizzler (~> 8.1) - GoogleUtilities/MethodSwizzler (~> 8.1) - GoogleUtilities/Network (~> 8.1) - "GoogleUtilities/NSData+zlib (~> 8.1)" - nanopb (~> 3.30910.0) - - FirebaseAnalytics/Default (12.6.0): - - FirebaseCore (~> 12.6.0) - - FirebaseInstallations (~> 12.6.0) - - GoogleAppMeasurement/Default (= 12.6.0) + - FirebaseAnalytics/Default (12.8.0): + - FirebaseCore (~> 12.8.0) + - FirebaseInstallations (~> 12.8.0) + - GoogleAppMeasurement/Default (= 12.8.0) - GoogleUtilities/AppDelegateSwizzler (~> 8.1) - GoogleUtilities/MethodSwizzler (~> 8.1) - GoogleUtilities/Network (~> 8.1) - "GoogleUtilities/NSData+zlib (~> 8.1)" - nanopb (~> 3.30910.0) - - FirebaseCore (12.6.0): - - FirebaseCoreInternal (~> 12.6.0) + - FirebaseCore (12.8.0): + - FirebaseCoreInternal (~> 12.8.0) - GoogleUtilities/Environment (~> 8.1) - GoogleUtilities/Logger (~> 8.1) - - FirebaseCoreInternal (12.6.0): + - FirebaseCoreInternal (12.8.0): - "GoogleUtilities/NSData+zlib (~> 8.1)" - - FirebaseInstallations (12.6.0): - - FirebaseCore (~> 12.6.0) + - FirebaseInstallations (12.8.0): + - FirebaseCore (~> 12.8.0) - GoogleUtilities/Environment (~> 8.1) - GoogleUtilities/UserDefaults (~> 8.1) - PromisesObjC (~> 2.4) - - FirebaseMessaging (12.6.0): - - FirebaseCore (~> 12.6.0) - - FirebaseInstallations (~> 12.6.0) + - FirebaseMessaging (12.8.0): + - FirebaseCore (~> 12.8.0) + - FirebaseInstallations (~> 12.8.0) - GoogleDataTransport (~> 10.1) - GoogleUtilities/AppDelegateSwizzler (~> 8.1) - GoogleUtilities/Environment (~> 8.1) @@ -129,39 +129,39 @@ PODS: - gal (1.0.0): - Flutter - FlutterMacOS - - google_mlkit_barcode_scanning (0.14.1): + - google_mlkit_barcode_scanning (0.14.2): - Flutter - google_mlkit_commons - - GoogleMLKit/BarcodeScanning (~> 7.0.0) - - google_mlkit_commons (0.11.0): + - GoogleMLKit/BarcodeScanning (~> 9.0.0) + - google_mlkit_commons (0.11.1): - Flutter - - MLKitVision - - google_mlkit_face_detection (0.13.1): + - MLKitVision (~> 10.0.0) + - google_mlkit_face_detection (0.13.2): - Flutter - google_mlkit_commons - - GoogleMLKit/FaceDetection (~> 7.0.0) + - GoogleMLKit/FaceDetection (~> 9.0.0) - GoogleAdsOnDeviceConversion (3.2.0): - GoogleUtilities/Environment (~> 8.1) - GoogleUtilities/Logger (~> 8.1) - GoogleUtilities/Network (~> 8.1) - nanopb (~> 3.30910.0) - - GoogleAppMeasurement/Core (12.6.0): + - GoogleAppMeasurement/Core (12.8.0): - GoogleUtilities/AppDelegateSwizzler (~> 8.1) - GoogleUtilities/MethodSwizzler (~> 8.1) - GoogleUtilities/Network (~> 8.1) - "GoogleUtilities/NSData+zlib (~> 8.1)" - nanopb (~> 3.30910.0) - - GoogleAppMeasurement/Default (12.6.0): + - GoogleAppMeasurement/Default (12.8.0): - GoogleAdsOnDeviceConversion (~> 3.2.0) - - GoogleAppMeasurement/Core (= 12.6.0) - - GoogleAppMeasurement/IdentitySupport (= 12.6.0) + - GoogleAppMeasurement/Core (= 12.8.0) + - GoogleAppMeasurement/IdentitySupport (= 12.8.0) - GoogleUtilities/AppDelegateSwizzler (~> 8.1) - GoogleUtilities/MethodSwizzler (~> 8.1) - GoogleUtilities/Network (~> 8.1) - "GoogleUtilities/NSData+zlib (~> 8.1)" - nanopb (~> 3.30910.0) - - GoogleAppMeasurement/IdentitySupport (12.6.0): - - GoogleAppMeasurement/Core (= 12.6.0) + - GoogleAppMeasurement/IdentitySupport (12.8.0): + - GoogleAppMeasurement/Core (= 12.8.0) - GoogleUtilities/AppDelegateSwizzler (~> 8.1) - GoogleUtilities/MethodSwizzler (~> 8.1) - GoogleUtilities/Network (~> 8.1) @@ -170,14 +170,14 @@ PODS: - GoogleDataTransport (10.1.0): - nanopb (~> 3.30910.0) - PromisesObjC (~> 2.4) - - GoogleMLKit/BarcodeScanning (7.0.0): + - GoogleMLKit/BarcodeScanning (9.0.0): - GoogleMLKit/MLKitCore - - MLKitBarcodeScanning (~> 6.0.0) - - GoogleMLKit/FaceDetection (7.0.0): + - MLKitBarcodeScanning (~> 8.0.0) + - GoogleMLKit/FaceDetection (9.0.0): - GoogleMLKit/MLKitCore - - MLKitFaceDetection (~> 6.0.0) - - GoogleMLKit/MLKitCore (7.0.0): - - MLKitCommon (~> 12.0.0) + - MLKitFaceDetection (~> 8.0.0) + - GoogleMLKit/MLKitCore (9.0.0): + - MLKitCommon (~> 14.0.0) - GoogleToolboxForMac/Defines (4.2.1) - GoogleToolboxForMac/Logger (4.2.1): - GoogleToolboxForMac/Defines (= 4.2.1) @@ -247,26 +247,26 @@ PODS: - Mantle (2.2.0): - Mantle/extobjc (= 2.2.0) - Mantle/extobjc (2.2.0) - - MLImage (1.0.0-beta6) - - MLKitBarcodeScanning (6.0.0): - - MLKitCommon (~> 12.0) - - MLKitVision (~> 8.0) - - MLKitCommon (12.0.0): + - MLImage (1.0.0-beta8) + - MLKitBarcodeScanning (8.0.0): + - MLKitCommon (~> 14.0) + - MLKitVision (~> 10.0) + - MLKitCommon (14.0.0): - GoogleDataTransport (~> 10.0) - GoogleToolboxForMac/Logger (< 5.0, >= 4.2.1) - "GoogleToolboxForMac/NSData+zlib (< 5.0, >= 4.2.1)" - GoogleUtilities/Logger (~> 8.0) - GoogleUtilities/UserDefaults (~> 8.0) - GTMSessionFetcher/Core (< 4.0, >= 3.3.2) - - MLKitFaceDetection (6.0.0): - - MLKitCommon (~> 12.0) - - MLKitVision (~> 8.0) - - MLKitVision (8.0.0): + - MLKitFaceDetection (8.0.0): + - MLKitCommon (~> 14.0) + - MLKitVision (~> 10.0) + - MLKitVision (10.0.0): - GoogleToolboxForMac/Logger (< 5.0, >= 4.2.1) - "GoogleToolboxForMac/NSData+zlib (< 5.0, >= 4.2.1)" - GTMSessionFetcher/Core (< 4.0, >= 3.3.2) - - MLImage (= 1.0.0-beta6) - - MLKitCommon (~> 12.0) + - MLImage (= 1.0.0-beta8) + - MLKitCommon (~> 14.0) - nanopb (3.30910.0): - nanopb/decode (= 3.30910.0) - nanopb/encode (= 3.30910.0) @@ -274,28 +274,21 @@ PODS: - nanopb/encode (3.30910.0) - no_screenshot (0.3.2-beta.3): - Flutter - - ScreenProtectorKit (~> 1.3.1) - - objective_c (0.0.1): - - Flutter - package_info_plus (0.4.5): - Flutter - - path_provider_foundation (0.0.1): - - Flutter - - FlutterMacOS - permission_handler_apple (9.3.0): - Flutter - PromisesObjC (2.4.0) - restart_app (0.0.1): - Flutter - - ScreenProtectorKit (1.3.1) - - SDWebImage (5.21.5): - - SDWebImage/Core (= 5.21.5) - - SDWebImage/Core (5.21.5) + - SDWebImage (5.21.6): + - SDWebImage/Core (= 5.21.6) + - SDWebImage/Core (5.21.6) - SDWebImageWebPCoder (0.15.0): - libwebp (~> 1.0) - SDWebImage/Core (~> 5.17) - Sentry/HybridSDK (8.56.2) - - sentry_flutter (9.8.0): + - sentry_flutter (9.13.0): - Flutter - FlutterMacOS - Sentry/HybridSDK (= 8.56.2) @@ -307,32 +300,32 @@ PODS: - sqflite_darwin (0.0.4): - Flutter - FlutterMacOS - - sqlite3 (3.50.4): - - sqlite3/common (= 3.50.4) - - sqlite3/common (3.50.4) - - sqlite3/dbstatvtab (3.50.4): + - sqlite3 (3.51.1): + - sqlite3/common (= 3.51.1) + - sqlite3/common (3.51.1) + - sqlite3/dbstatvtab (3.51.1): - sqlite3/common - - sqlite3/fts5 (3.50.4): + - sqlite3/fts5 (3.51.1): - sqlite3/common - - sqlite3/math (3.50.4): + - sqlite3/math (3.51.1): - sqlite3/common - - sqlite3/perf-threadsafe (3.50.4): + - sqlite3/perf-threadsafe (3.51.1): - sqlite3/common - - sqlite3/rtree (3.50.4): + - sqlite3/rtree (3.51.1): - sqlite3/common - - sqlite3/session (3.50.4): + - sqlite3/session (3.51.1): - sqlite3/common - sqlite3_flutter_libs (0.0.1): - Flutter - FlutterMacOS - - sqlite3 (~> 3.50.4) + - sqlite3 (~> 3.51.1) - sqlite3/dbstatvtab - sqlite3/fts5 - sqlite3/math - sqlite3/perf-threadsafe - sqlite3/rtree - sqlite3/session - - SwiftProtobuf (1.33.3) + - SwiftProtobuf (1.34.1) - SwiftyGif (5.4.5) - url_launcher_ios (0.0.1): - Flutter @@ -373,9 +366,7 @@ DEPENDENCIES: - in_app_purchase_storekit (from `.symlinks/plugins/in_app_purchase_storekit/darwin`) - local_auth_darwin (from `.symlinks/plugins/local_auth_darwin/darwin`) - no_screenshot (from `.symlinks/plugins/no_screenshot/ios`) - - objective_c (from `.symlinks/plugins/objective_c/ios`) - package_info_plus (from `.symlinks/plugins/package_info_plus/ios`) - - path_provider_foundation (from `.symlinks/plugins/path_provider_foundation/darwin`) - permission_handler_apple (from `.symlinks/plugins/permission_handler_apple/ios`) - restart_app (from `.symlinks/plugins/restart_app/ios`) - sentry_flutter (from `.symlinks/plugins/sentry_flutter/ios`) @@ -413,7 +404,6 @@ SPEC REPOS: - MLKitVision - nanopb - PromisesObjC - - ScreenProtectorKit - SDWebImage - SDWebImageWebPCoder - Sentry @@ -476,12 +466,8 @@ EXTERNAL SOURCES: :path: ".symlinks/plugins/local_auth_darwin/darwin" no_screenshot: :path: ".symlinks/plugins/no_screenshot/ios" - objective_c: - :path: ".symlinks/plugins/objective_c/ios" package_info_plus: :path: ".symlinks/plugins/package_info_plus/ios" - path_provider_foundation: - :path: ".symlinks/plugins/path_provider_foundation/darwin" permission_handler_apple: :path: ".symlinks/plugins/permission_handler_apple/ios" restart_app: @@ -514,14 +500,14 @@ SPEC CHECKSUMS: emoji_picker_flutter: ece213fc274bdddefb77d502d33080dc54e616cc ffmpeg_kit_flutter_new: 12426a19f10ac81186c67c6ebc4717f8f4364b7f file_picker: a0560bc09d61de87f12d246fc47d2119e6ef37be - Firebase: a451a7b61536298fd5cbfe3a746fd40443a50679 - firebase_core: ba00a168e719694f38960502ceb560285603d073 - firebase_messaging: bf0e29321927edc02a563c984dbfa5b063864b15 - FirebaseAnalytics: d0a97a0db6425e5a5d966340b87f92ca7b13a557 - FirebaseCore: 0e38ad5d62d980a47a64b8e9301ffa311457be04 - FirebaseCoreInternal: 69bf1306a05b8ac43004f6cc1f804bb7b05b229e - FirebaseInstallations: 631b38da2e11a83daa4bfb482f79d286a5dfa7ad - FirebaseMessaging: a61bc42dcab3f7a346d94bbb54dab2c9435b18b2 + Firebase: 9a58fdbc9d8655ed7b79a19cf9690bb007d3d46d + firebase_core: ee30637e6744af8e0c12a6a1e8a9718506ec2398 + firebase_messaging: 343de01a8d3e18b60df0c6d37f7174c44ae38e02 + FirebaseAnalytics: f20bbad8cb7f65d8a5eaefeb424ae8800a31bdfc + FirebaseCore: 0dbad74bda10b8fb9ca34ad8f375fb9dd3ebef7c + FirebaseCoreInternal: fe5fa466aeb314787093a7dce9f0beeaad5a2a21 + FirebaseInstallations: 6a14ab3d694ebd9f839c48d330da5547e9ca9dc0 + FirebaseMessaging: 7f42cfd10ec64181db4e01b305a613791c8e782c Flutter: cabc95a1d2626b1b06e7179b784ebcf0c0cde467 flutter_image_compress_common: 1697a328fd72bfb335507c6bca1a65fa5ad87df1 flutter_keyboard_visibility_temp_fork: 95b2d534bacf6ac62e7fcbe5c2a9e2c2a17ce06f @@ -530,13 +516,13 @@ SPEC CHECKSUMS: flutter_sharing_intent: 0c1e53949f09fa8df8ac2268505687bde8ff264c flutter_volume_controller: c2be490cb0487e8b88d0d9fc2b7e1c139a4ebccb gal: baecd024ebfd13c441269ca7404792a7152fde89 - google_mlkit_barcode_scanning: 8f5987f244a43fe1167689c548342a5174108159 - google_mlkit_commons: 2abe6a70e1824e431d16a51085cb475b672c8aab - google_mlkit_face_detection: 754da2113a1952f063c7c5dc347ac6ae8934fb77 + google_mlkit_barcode_scanning: 12d8422d8f7b00726dedf9cac00188a2b98750c2 + google_mlkit_commons: a5e4ffae5bc59ea4c7b9025dc72cb6cb79dc1166 + google_mlkit_face_detection: ee4b72cfae062b4c972204be955d83055a4bfd36 GoogleAdsOnDeviceConversion: d68c69dd9581a0f5da02617b6f377e5be483970f - GoogleAppMeasurement: 3bf40aff49a601af5da1c3345702fcb4991d35ee + GoogleAppMeasurement: 72c9a682fec6290327ea5e3c4b829b247fcb2c17 GoogleDataTransport: aae35b7ea0c09004c3797d53c8c41f66f219d6a7 - GoogleMLKit: eff9e23ec1d90ea4157a1ee2e32a4f610c5b3318 + GoogleMLKit: b1eee21a41c57704fe72483b15c85cb2c0cd7444 GoogleToolboxForMac: d1a2cbf009c453f4d6ded37c105e2f67a32206d8 GoogleUtilities: 00c88b9a86066ef77f0da2fab05f65d7768ed8e1 GTMSessionFetcher: 5aea5ba6bd522a239e236100971f10cb71b96ab6 @@ -545,30 +531,27 @@ SPEC CHECKSUMS: libwebp: 02b23773aedb6ff1fd38cec7a77b81414c6842a8 local_auth_darwin: c3ee6cce0a8d56be34c8ccb66ba31f7f180aaebb Mantle: c5aa8794a29a022dfbbfc9799af95f477a69b62d - MLImage: 0ad1c5f50edd027672d8b26b0fee78a8b4a0fc56 - MLKitBarcodeScanning: 0a3064da0a7f49ac24ceb3cb46a5bc67496facd2 - MLKitCommon: 07c2c33ae5640e5380beaaa6e4b9c249a205542d - MLKitFaceDetection: 2a593db4837db503ad3426b565e7aab045cefea5 - MLKitVision: 45e79d68845a2de77e2dd4d7f07947f0ed157b0e + MLImage: 0de5c6c2bf9e93b80ef752e2797f0836f03b58c0 + MLKitBarcodeScanning: 39de223e7b1b8a8fbf10816a536dd292d8a39343 + MLKitCommon: 47d47b50a031d00db62f1b0efe5a1d8b09a3b2e6 + MLKitFaceDetection: 32549f1e70e6e7731261bf9cea2b74095e2531cb + MLKitVision: 39a5a812db83c4a0794445088e567f3631c11961 nanopb: fad817b59e0457d11a5dfbde799381cd727c1275 - no_screenshot: 89e778ede9f1e39cc3fb9404d782a42712f2a0b2 - objective_c: 89e720c30d716b036faf9c9684022048eee1eee2 + no_screenshot: 5e345998c43ffcad5d6834f249590483fcc037bd package_info_plus: af8e2ca6888548050f16fa2f1938db7b5a5df499 - path_provider_foundation: bb55f6dbba17d0dccd6737fe6f7f34fbd0376880 permission_handler_apple: 4ed2196e43d0651e8ff7ca3483a069d469701f2d PromisesObjC: f5707f49cb48b9636751c5b2e7d227e43fba9f47 restart_app: 9cda5378aacc5000e3f66ee76a9201534e7d3ecf - ScreenProtectorKit: 83a6281b02c7a5902ee6eac4f5045f674e902ae4 - SDWebImage: e9c98383c7572d713c1a0d7dd2783b10599b9838 + SDWebImage: 1bb6a1b84b6fe87b972a102bdc77dd589df33477 SDWebImageWebPCoder: 0e06e365080397465cc73a7a9b472d8a3bd0f377 Sentry: b53951377b78e21a734f5dc8318e333dbfc682d7 - sentry_flutter: 4c33648b7e83310aa1fdb1b10c5491027d9643f0 + sentry_flutter: dbed9a62ae39716b685a80140705c330d200d941 share_plus: 50da8cb520a8f0f65671c6c6a99b3617ed10a58a shared_preferences_foundation: 7036424c3d8ec98dfe75ff1667cb0cd531ec82bb sqflite_darwin: 20b2a3a3b70e43edae938624ce550a3cbf66a3d0 - sqlite3: 73513155ec6979715d3904ef53a8d68892d4032b - sqlite3_flutter_libs: 83f8e9f5b6554077f1d93119fe20ebaa5f3a9ef1 - SwiftProtobuf: e1b437c8e31a4c5577b643249a0bb62ed4f02153 + sqlite3: 8d708bc63e9f4ce48f0ad9d6269e478c5ced1d9b + sqlite3_flutter_libs: d13b8b3003f18f596e542bcb9482d105577eff41 + SwiftProtobuf: c901f00a3e125dc33cac9b16824da85682ee47da SwiftyGif: 706c60cf65fa2bc5ee0313beece843c8eb8194d4 url_launcher_ios: 7a95fa5b60cc718a708b8f2966718e93db0cef1b video_player_avfoundation: dd410b52df6d2466a42d28550e33e4146928280a diff --git a/lib/app.dart b/lib/app.dart index 7ede275..93a3a03 100644 --- a/lib/app.dart +++ b/lib/app.dart @@ -37,14 +37,14 @@ class _AppState extends State with WidgetsBindingObserver { globalIsAppInBackground = false; WidgetsBinding.instance.addObserver(this); - globalCallbackConnectionState = ({required bool isConnected}) async { + globalCallbackConnectionState = ({required isConnected}) async { await context .read() .updateConnectionState(isConnected); await setUserPlan(); }; - globalCallbackUpdatePlan = (SubscriptionPlan plan) { + globalCallbackUpdatePlan = (plan) { context.read().updatePlan(plan); }; @@ -86,8 +86,8 @@ class _AppState extends State with WidgetsBindingObserver { @override void dispose() { WidgetsBinding.instance.removeObserver(this); - globalCallbackConnectionState = ({required bool isConnected}) {}; - globalCallbackUpdatePlan = (SubscriptionPlan planId) {}; + globalCallbackConnectionState = ({required isConnected}) {}; + globalCallbackUpdatePlan = (planId) {}; super.dispose(); } @@ -95,7 +95,7 @@ class _AppState extends State with WidgetsBindingObserver { Widget build(BuildContext context) { return ListenableBuilder( listenable: context.watch(), - builder: (BuildContext context, Widget? child) { + builder: (context, child) { return MaterialApp.router( routerConfig: routerProvider, scaffoldMessengerKey: globalRootScaffoldMessengerKey, diff --git a/lib/globals.dart b/lib/globals.dart index 6196b6f..8731ff1 100644 --- a/lib/globals.dart +++ b/lib/globals.dart @@ -22,12 +22,11 @@ late UserData gUser; // This callback called by the apiProvider void Function({required bool isConnected}) globalCallbackConnectionState = ({ - required bool isConnected, + required isConnected, }) {}; void Function() globalCallbackAppIsOutdated = () {}; void Function() globalCallbackNewDeviceRegistered = () {}; -void Function(SubscriptionPlan plan) globalCallbackUpdatePlan = - (SubscriptionPlan plan) {}; +void Function(SubscriptionPlan plan) globalCallbackUpdatePlan = (plan) {}; Map globalUserDataChangedCallBack = {}; diff --git a/lib/main.dart b/lib/main.dart index ba1eaa8..51543e8 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -13,6 +13,7 @@ import 'package:twonly/src/providers/image_editor.provider.dart'; import 'package:twonly/src/providers/purchases.provider.dart'; import 'package:twonly/src/providers/settings.provider.dart'; import 'package:twonly/src/services/api.service.dart'; +import 'package:twonly/src/services/api/mediafiles/download.service.dart'; import 'package:twonly/src/services/api/mediafiles/media_background.service.dart'; import 'package:twonly/src/services/api/mediafiles/upload.service.dart'; import 'package:twonly/src/services/fcm.service.dart'; @@ -73,6 +74,14 @@ void main() async { return u; }); } + if (gUser.appVersion < 91) { + // BUG: Requested media files for reupload where not reuploaded because the wrong state... + await makeMigrationToVersion91(); + await updateUserdata((u) { + u.appVersion = 91; + return u; + }); + } } await twonlyDB.messagesDao.purgeMessageTable(); diff --git a/lib/src/database/daos/mediafiles.dao.dart b/lib/src/database/daos/mediafiles.dao.dart index 414cc29..7edd600 100644 --- a/lib/src/database/daos/mediafiles.dao.dart +++ b/lib/src/database/daos/mediafiles.dao.dart @@ -100,6 +100,14 @@ class MediaFilesDao extends DatabaseAccessor .get(); } + Future> getAllMediaFilesReuploadRequested() async { + return (select(mediaFiles) + ..where( + (t) => t.downloadState.equals(DownloadState.reuploadRequested.name), + )) + .get(); + } + Future> getAllNonHashedStoredMediaFiles() async { return (select(mediaFiles) ..where( diff --git a/lib/src/database/daos/signal.dao.dart b/lib/src/database/daos/signal.dao.dart index b04bc08..2b8e8d7 100644 --- a/lib/src/database/daos/signal.dao.dart +++ b/lib/src/database/daos/signal.dao.dart @@ -93,17 +93,15 @@ class SignalDao extends DatabaseAccessor with _$SignalDaoMixin { await into(signalContactSignedPreKeys).insert(signedPreKey); } - Future purgeOutDatedPreKeys() async { - // Deletion is a workaround for the issue, that own pre keys where deleted after 40 days, while they could be 30days - // on the server + 25 days on the others device old, resulting in the issue that the receiver could not decrypt the - // messages... + Future purgePreKeysFromContact(int contactId) async { await (delete(signalContactPreKeys) ..where( - (t) => (t.createdAt.isSmallerThanValue( - DateTime(2025, 10, 10), - )), + (t) => (t.contactId.equals(contactId)), )) .go(); + } + + Future purgeOutDatedPreKeys() async { // other pre keys are valid 100 days await (delete(signalContactPreKeys) ..where( diff --git a/lib/src/providers/routing.provider.dart b/lib/src/providers/routing.provider.dart index 44dc744..395a7fb 100644 --- a/lib/src/providers/routing.provider.dart +++ b/lib/src/providers/routing.provider.dart @@ -143,7 +143,7 @@ final routerProvider = GoRouter( GoRoute( path: 'modify_avatar', builder: (context, state) => const ModifyAvatarView(), - ) + ), ], ), GoRoute( @@ -199,7 +199,7 @@ final routerProvider = GoRouter( GoRoute( path: 'block_users', builder: (context, state) => const PrivacyViewBlockUsersView(), - ) + ), ], ), GoRoute( diff --git a/lib/src/services/api.service.dart b/lib/src/services/api.service.dart index b7f39c3..816f575 100644 --- a/lib/src/services/api.service.dart +++ b/lib/src/services/api.service.dart @@ -153,9 +153,8 @@ class ApiService { if (connectivitySubscription != null) { return; } - connectivitySubscription = Connectivity() - .onConnectivityChanged - .listen((List result) async { + connectivitySubscription = + Connectivity().onConnectivityChanged.listen((result) async { if (!result.contains(ConnectivityResult.none)) { await connect(); } diff --git a/lib/src/services/api/client2client/media.c2c.dart b/lib/src/services/api/client2client/media.c2c.dart index b99799e..4cef307 100644 --- a/lib/src/services/api/client2client/media.c2c.dart +++ b/lib/src/services/api/client2client/media.c2c.dart @@ -30,12 +30,15 @@ Future handleMedia( if (message == null || message.senderId != fromUserId || message.mediaId == null) { + Log.warn( + 'Got reupload for a message that either does not exists or sender != fromUserId or not a media file', + ); return; } // in case there was already a downloaded file delete it... final mediaService = await MediaFileService.fromMediaId(message.mediaId!); - if (mediaService != null) { + if (mediaService != null && mediaService.tempPath.existsSync()) { mediaService.tempPath.deleteSync(); } @@ -68,6 +71,14 @@ Future handleMedia( mediaType = MediaType.audio; } + final messageTmp = await twonlyDB.messagesDao + .getMessageById(media.senderMessageId) + .getSingleOrNull(); + if (messageTmp != null) { + Log.warn('This message already exit. Message is dropped.'); + return; + } + int? displayLimitInMilliseconds; if (media.hasDisplayLimitInMilliseconds()) { if (media.displayLimitInMilliseconds.toInt() < 1000) { @@ -192,6 +203,13 @@ Future handleMediaUpdate( reuploadRequestedBy: Value(reuploadRequestedBy), ), ); - unawaited(startBackgroundMediaUpload(MediaFileService(mediaFile))); + final mediaFileUpdated = + await MediaFileService.fromMediaId(mediaFile.mediaId); + if (mediaFileUpdated != null) { + if (mediaFileUpdated.uploadRequestPath.existsSync()) { + mediaFileUpdated.uploadRequestPath.deleteSync(); + } + unawaited(startBackgroundMediaUpload(mediaFileUpdated)); + } } } diff --git a/lib/src/services/api/mediafiles/download.service.dart b/lib/src/services/api/mediafiles/download.service.dart index 724da2c..8192ffe 100644 --- a/lib/src/services/api/mediafiles/download.service.dart +++ b/lib/src/services/api/mediafiles/download.service.dart @@ -5,6 +5,7 @@ import 'package:connectivity_plus/connectivity_plus.dart'; import 'package:cryptography_flutter_plus/cryptography_flutter_plus.dart'; import 'package:cryptography_plus/cryptography_plus.dart'; import 'package:drift/drift.dart'; +import 'package:flutter/foundation.dart'; import 'package:http/http.dart' as http; import 'package:mutex/mutex.dart'; import 'package:path/path.dart'; @@ -217,11 +218,20 @@ Future startDownloadMedia(MediaFile media, bool force) async { } } +int failCounter = 0; + Future downloadFileFast( MediaFile media, String apiUrl, File filePath, ) async { + if (failCounter < 2) { + failCounter += 1; + await requestMediaReupload(media.mediaId); + return; + } + failCounter = 0; + final response = await http.get(Uri.parse(apiUrl)).timeout(const Duration(seconds: 10)); @@ -327,3 +337,11 @@ Future handleEncryptedFile(String mediaId) async { unawaited(apiService.downloadDone(mediaService.mediaFile.downloadToken!)); } + +Future makeMigrationToVersion91() async { + final messages = + await twonlyDB.mediaFilesDao.getAllMediaFilesReuploadRequested(); + for (final message in messages) { + await requestMediaReupload(message.mediaId); + } +} diff --git a/lib/src/services/api/mediafiles/upload.service.dart b/lib/src/services/api/mediafiles/upload.service.dart index 6826f20..b1b6073 100644 --- a/lib/src/services/api/mediafiles/upload.service.dart +++ b/lib/src/services/api/mediafiles/upload.service.dart @@ -160,7 +160,9 @@ Future startBackgroundMediaUpload(MediaFileService mediaService) async { if (mediaService.uploadRequestPath.existsSync()) { await mediaService.setUploadState(UploadState.uploading); // at this point the original file is not used any more, so it can be deleted - mediaService.originalPath.deleteSync(); + if (mediaService.originalPath.existsSync()) { + mediaService.originalPath.deleteSync(); + } } } @@ -238,6 +240,10 @@ Future _createUploadRequest(MediaFileService media) async { type = EncryptedContent_Media_Type.VIDEO; } + if (media.mediaFile.reuploadRequestedBy != null) { + type = EncryptedContent_Media_Type.REUPLOAD; + } + final notEncryptedContent = EncryptedContent( groupId: message.groupId, media: EncryptedContent_Media( diff --git a/lib/src/services/api/server_messages.dart b/lib/src/services/api/server_messages.dart index bd2e54f..2a0546f 100644 --- a/lib/src/services/api/server_messages.dart +++ b/lib/src/services/api/server_messages.dart @@ -90,6 +90,11 @@ Future handleClient2ClientMessage(NewMessage newMessage) async { var retry = false; if (message.hasPlaintextContent()) { if (message.plaintextContent.hasDecryptionErrorMessage()) { + if (message.plaintextContent.decryptionErrorMessage.type == + PlaintextContent_DecryptionErrorMessage_Type.PREKEY_UNKNOWN) { + // in case there was a pre key error remove all downloaded pre keys. New pre keys will be fetched automatically. + await twonlyDB.signalDao.purgePreKeysFromContact(fromUserId); + } Log.info( 'Got decryption error: ${message.plaintextContent.decryptionErrorMessage.type} for $receiptId', ); diff --git a/lib/src/views/camera/share_image_contact_selection.view.dart b/lib/src/views/camera/share_image_contact_selection.view.dart index b93fadb..e912200 100644 --- a/lib/src/views/camera/share_image_contact_selection.view.dart +++ b/lib/src/views/camera/share_image_contact_selection.view.dart @@ -1,5 +1,3 @@ -// ignore_for_file: strict_raw_type - import 'dart:async'; import 'dart:collection'; import 'package:flutter/material.dart'; @@ -208,7 +206,7 @@ class _ShareImageView extends State { child: Checkbox( value: !hideArchivedUsers, side: WidgetStateBorderSide.resolveWith( - (Set states) { + (states) { if (states.contains(WidgetState.selected)) { return const BorderSide(width: 0); } @@ -344,7 +342,7 @@ class UserList extends StatelessWidget { return ListView.builder( restorationId: 'new_message_users_list', itemCount: groups.length, - itemBuilder: (BuildContext context, int i) { + itemBuilder: (context, i) { final group = groups[i]; return ListTile( key: ValueKey(group.groupId), @@ -364,14 +362,14 @@ class UserList extends StatelessWidget { trailing: Checkbox( value: selectedGroupIds.contains(group.groupId), side: WidgetStateBorderSide.resolveWith( - (Set states) { + (states) { if (states.contains(WidgetState.selected)) { return const BorderSide(width: 0); } return BorderSide(color: Theme.of(context).colorScheme.outline); }, ), - onChanged: (bool? value) { + onChanged: (value) { if (value == null) return; updateSelectedGroupIds(group.groupId, value); }, diff --git a/lib/src/views/camera/share_image_contact_selection/best_friends_selector.dart b/lib/src/views/camera/share_image_contact_selection/best_friends_selector.dart index 2f96d48..a989497 100644 --- a/lib/src/views/camera/share_image_contact_selection/best_friends_selector.dart +++ b/lib/src/views/camera/share_image_contact_selection/best_friends_selector.dart @@ -163,8 +163,7 @@ class UserCheckbox extends StatelessWidget { Checkbox( value: isChecked, side: WidgetStateBorderSide.resolveWith( - // ignore: strict_raw_type - (Set states) { + (states) { if (states.contains(WidgetState.selected)) { return const BorderSide(width: 0); } @@ -173,7 +172,7 @@ class UserCheckbox extends StatelessWidget { ); }, ), - onChanged: (bool? value) { + onChanged: (value) { onChanged(group.groupId, value ?? false); }, ), diff --git a/lib/src/views/camera/share_image_contact_selection/select_show_time.dart b/lib/src/views/camera/share_image_contact_selection/select_show_time.dart index ed73470..a60618f 100644 --- a/lib/src/views/camera/share_image_contact_selection/select_show_time.dart +++ b/lib/src/views/camera/share_image_contact_selection/select_show_time.dart @@ -51,7 +51,7 @@ class _SelectShowTimeState extends State { scrollController: FixedExtentScrollController( initialItem: widget.initialItem, ), - onSelectedItemChanged: (int selectedItem) { + onSelectedItemChanged: (selectedItem) { _selectedItem = selectedItem; widget.setMaxShowTime( widget.options[selectedItem], diff --git a/lib/src/views/camera/share_image_editor.view.dart b/lib/src/views/camera/share_image_editor.view.dart index d767466..9d12615 100644 --- a/lib/src/views/camera/share_image_editor.view.dart +++ b/lib/src/views/camera/share_image_editor.view.dart @@ -193,7 +193,7 @@ class _ShareImageEditorView extends State { await showModalBottomSheet( context: context, backgroundColor: Colors.black, - builder: (BuildContext context) { + builder: (context) { return SelectShowTime( initialItem: initialItem, setMaxShowTime: _setMaxShowTime, @@ -249,7 +249,7 @@ class _ShareImageEditorView extends State { final layer = await showModalBottomSheet( context: context, backgroundColor: Colors.black, - builder: (BuildContext context) { + builder: (context) { return const EmojiPickerBottom(); }, ) as Layer?; @@ -315,7 +315,7 @@ class _ShareImageEditorView extends State { Future _showBackDialog() { return showDialog( context: context, - builder: (BuildContext context) { + builder: (context) { return AlertDialog( title: Text( context.lang.dialogAskDeleteMediaFilePopTitle, @@ -559,7 +559,6 @@ class _ShareImageEditorView extends State { if (imageLayer.imageLoaded) { timer.cancel(); Future.delayed(const Duration(milliseconds: 50), () { - Log.info(imageLayer.imageLoaded); if (context.mounted) { setState(() { sendingOrLoadingImage = false; @@ -615,7 +614,7 @@ class _ShareImageEditorView extends State { return PopScope( canPop: false, - onPopInvokedWithResult: (bool didPop, bool? result) async { + onPopInvokedWithResult: (didPop, result) async { if (didPop) return; await askToCloseThenClose(); }, diff --git a/lib/src/views/chats/chat_messages_components/chat_reaction_row.dart b/lib/src/views/chats/chat_messages_components/chat_reaction_row.dart index 1a46d10..32c25b9 100644 --- a/lib/src/views/chats/chat_messages_components/chat_reaction_row.dart +++ b/lib/src/views/chats/chat_messages_components/chat_reaction_row.dart @@ -23,7 +23,7 @@ class ReactionRow extends StatelessWidget { await showModalBottomSheet( context: context, backgroundColor: Colors.black, - builder: (BuildContext context) { + builder: (context) { return AllReactionsView( message: message, ); diff --git a/lib/src/views/chats/chat_messages_components/message_context_menu.dart b/lib/src/views/chats/chat_messages_components/message_context_menu.dart index eb868e4..078e657 100644 --- a/lib/src/views/chats/chat_messages_components/message_context_menu.dart +++ b/lib/src/views/chats/chat_messages_components/message_context_menu.dart @@ -86,7 +86,7 @@ class MessageContextMenu extends StatelessWidget { final layer = await showModalBottomSheet( context: context, backgroundColor: Colors.black, - builder: (BuildContext context) { + builder: (context) { return const EmojiPickerBottom(); }, ) as EmojiLayerData?; @@ -210,10 +210,10 @@ Future editTextMessage(BuildContext context, Message message) async { final controller = TextEditingController(text: message.content); await showDialog( context: context, - builder: (BuildContext context) { + builder: (context) { return AlertDialog( content: StatefulBuilder( - builder: (BuildContext context, StateSetter setState) { + builder: (context, setState) { return SingleChildScrollView( child: Column( mainAxisSize: MainAxisSize.min, diff --git a/lib/src/views/chats/media_viewer_components/reaction_buttons.component.dart b/lib/src/views/chats/media_viewer_components/reaction_buttons.component.dart index 108beac..d63dfd8 100644 --- a/lib/src/views/chats/media_viewer_components/reaction_buttons.component.dart +++ b/lib/src/views/chats/media_viewer_components/reaction_buttons.component.dart @@ -119,7 +119,7 @@ class _ReactionButtonsState extends State { final layer = await showModalBottomSheet( context: context, backgroundColor: context.color.surface, - builder: (BuildContext context) { + builder: (context) { return const EmojiPickerBottom(); }, ) as EmojiLayerData?; diff --git a/lib/src/views/chats/message_info.view.dart b/lib/src/views/chats/message_info.view.dart index bfcdb03..7670c48 100644 --- a/lib/src/views/chats/message_info.view.dart +++ b/lib/src/views/chats/message_info.view.dart @@ -211,7 +211,7 @@ class _MessageInfoViewState extends State { await showModalBottomSheet( context: context, backgroundColor: Colors.black, - builder: (BuildContext context) { + builder: (context) { return MessageHistoryView( message: widget.message, changes: messageHistory, diff --git a/lib/src/views/chats/start_new_chat.view.dart b/lib/src/views/chats/start_new_chat.view.dart index fad23f3..09926fc 100644 --- a/lib/src/views/chats/start_new_chat.view.dart +++ b/lib/src/views/chats/start_new_chat.view.dart @@ -154,7 +154,7 @@ class _StartNewChatView extends State { restorationId: 'new_message_users_list', itemCount: filteredContacts.length + 3 + filteredGroups.length, - itemBuilder: (BuildContext context, int i) { + itemBuilder: (context, i) { if (searchUserName.text.isEmpty) { if (i == 0) { return ListTile( diff --git a/lib/src/views/components/alert_dialog.dart b/lib/src/views/components/alert_dialog.dart index 8393e31..b927877 100644 --- a/lib/src/views/components/alert_dialog.dart +++ b/lib/src/views/components/alert_dialog.dart @@ -42,7 +42,7 @@ Future showAlertDialog( // ignore: inference_failure_on_function_invocation await showDialog( context: context, - builder: (BuildContext context) { + builder: (context) { return alert; }, ); diff --git a/lib/src/views/components/context_menu.component.dart b/lib/src/views/components/context_menu.component.dart index 5e6fd62..d41b034 100644 --- a/lib/src/views/components/context_menu.component.dart +++ b/lib/src/views/components/context_menu.component.dart @@ -79,7 +79,7 @@ class _ContextMenuState extends State { Widget build(BuildContext context) { return GestureDetector( onLongPress: _showCustomMenu, - onTapDown: (TapDownDetails details) { + onTapDown: (details) { _tapPosition = details.globalPosition; }, child: widget.child, diff --git a/lib/src/views/components/select_chat_deletion_time.comp.dart b/lib/src/views/components/select_chat_deletion_time.comp.dart index 279a4c7..b756ebb 100644 --- a/lib/src/views/components/select_chat_deletion_time.comp.dart +++ b/lib/src/views/components/select_chat_deletion_time.comp.dart @@ -61,7 +61,7 @@ class _SelectChatDeletionTimeListTitleState Future _showDialog(Widget child) async { await showCupertinoModalPopup( context: context, - builder: (BuildContext context) => Container( + builder: (context) => Container( height: 216, padding: const EdgeInsets.only(top: 6), // The Bottom margin is provided to align the popup above the system navigation bar. @@ -138,13 +138,13 @@ class _SelectChatDeletionTimeListTitleState initialItem: _selectedDeletionTime, ), // This is called when selected item is changed. - onSelectedItemChanged: (int selectedItem) { + onSelectedItemChanged: (selectedItem) { setState(() { _selectedDeletionTime = selectedItem; }); }, children: - List.generate(_getOptions().length, (int index) { + List.generate(_getOptions().length, (index) { return Center( child: Text(_getOptions()[index].$2), ); diff --git a/lib/src/views/contact/contact.view.dart b/lib/src/views/contact/contact.view.dart index 161fa25..1deebbc 100644 --- a/lib/src/views/contact/contact.view.dart +++ b/lib/src/views/contact/contact.view.dart @@ -250,7 +250,7 @@ Future showNicknameChangeDialog( return showDialog( context: context, - builder: (BuildContext context) { + builder: (context) { return AlertDialog( title: Text(context.lang.contactNickname), content: TextField( @@ -287,7 +287,7 @@ Future showReportDialog( return showDialog( context: context, - builder: (BuildContext context) { + builder: (context) { return AlertDialog( title: Text(context.lang.reportUserTitle(getContactDisplayName(contact))), diff --git a/lib/src/views/groups/group.view.dart b/lib/src/views/groups/group.view.dart index 2279dc0..fcfae5f 100644 --- a/lib/src/views/groups/group.view.dart +++ b/lib/src/views/groups/group.view.dart @@ -293,7 +293,7 @@ Future showGroupNameChangeDialog( return showDialog( context: context, - builder: (BuildContext context) { + builder: (context) { return AlertDialog( title: Text(context.lang.groupNameInput), content: TextField( diff --git a/lib/src/views/groups/group_create_select_group_name.view.dart b/lib/src/views/groups/group_create_select_group_name.view.dart index ca7bf9f..4bcc094 100644 --- a/lib/src/views/groups/group_create_select_group_name.view.dart +++ b/lib/src/views/groups/group_create_select_group_name.view.dart @@ -98,7 +98,7 @@ class _GroupCreateSelectGroupNameViewState child: ListView.builder( restorationId: 'new_message_users_list', itemCount: widget.selectedUsers.length, - itemBuilder: (BuildContext context, int i) { + itemBuilder: (context, i) { final user = widget.selectedUsers[i]; return UserContextMenu( key: ValueKey(user.userId), diff --git a/lib/src/views/groups/group_create_select_members.view.dart b/lib/src/views/groups/group_create_select_members.view.dart index c4dfe71..4d1947e 100644 --- a/lib/src/views/groups/group_create_select_members.view.dart +++ b/lib/src/views/groups/group_create_select_members.view.dart @@ -163,7 +163,7 @@ class _StartNewChatView extends State { restorationId: 'new_message_users_list', itemCount: contacts.length + (selectedUsers.isEmpty ? 0 : 2), - itemBuilder: (BuildContext context, int i) { + itemBuilder: (context, i) { if (selectedUsers.isNotEmpty) { final selected = selectedUsers.toList(); if (i == 0) { @@ -230,7 +230,7 @@ class _StartNewChatView extends State { ); }, ), - onChanged: (bool? value) { + onChanged: (value) { toggleSelectedUser(user.userId); }, ), diff --git a/lib/src/views/home.view.dart b/lib/src/views/home.view.dart index 09d40e9..1e24283 100644 --- a/lib/src/views/home.view.dart +++ b/lib/src/views/home.view.dart @@ -1,7 +1,6 @@ import 'dart:async'; import 'package:app_links/app_links.dart'; import 'package:flutter/material.dart'; -import 'package:flutter_local_notifications/flutter_local_notifications.dart'; import 'package:flutter_sharing_intent/model/sharing_file.dart'; import 'package:font_awesome_flutter/font_awesome_flutter.dart'; import 'package:twonly/globals.dart'; @@ -106,8 +105,7 @@ class HomeViewState extends State { activePageIdx = index; }); }; - selectNotificationStream.stream - .listen((NotificationResponse? response) async { + selectNotificationStream.stream.listen((response) async { globalUpdateOfHomeViewPageIndex(0); }); unawaited(_mainCameraController.selectCamera(0, true)); @@ -239,7 +237,7 @@ class HomeViewState extends State { label: '', ), ], - onTap: (int index) async { + onTap: (index) async { activePageIdx = index; await homeViewPageController.animateToPage( index, diff --git a/lib/src/views/memories/memories_photo_slider.view.dart b/lib/src/views/memories/memories_photo_slider.view.dart index 65c16ce..4ac7d35 100644 --- a/lib/src/views/memories/memories_photo_slider.view.dart +++ b/lib/src/views/memories/memories_photo_slider.view.dart @@ -195,7 +195,7 @@ class _MemoriesPhotoSliderViewState extends State { Positioned( right: 5, child: PopupMenuButton( - onSelected: (String result) async { + onSelected: (result) async { if (result == 'delete') { await deleteFile(); } @@ -203,8 +203,7 @@ class _MemoriesPhotoSliderViewState extends State { await exportFile(); } }, - itemBuilder: (BuildContext context) => - >[ + itemBuilder: (context) => >[ PopupMenuItem( value: 'delete', child: Text(context.lang.galleryDelete), diff --git a/lib/src/views/settings/appearance.view.dart b/lib/src/views/settings/appearance.view.dart index 4ea83cd..fa42ac7 100644 --- a/lib/src/views/settings/appearance.view.dart +++ b/lib/src/views/settings/appearance.view.dart @@ -27,7 +27,7 @@ class _AppearanceViewState extends State { // ignore: inference_failure_on_function_invocation await showDialog( context: context, - builder: (BuildContext context) { + builder: (context) { return AlertDialog( title: Text(context.lang.settingsAppearanceTheme), content: Column( @@ -37,7 +37,7 @@ class _AppearanceViewState extends State { value: ThemeMode.system, groupValue: selectedValue, label: 'System default', - onChanged: (ThemeMode? value) { + onChanged: (value) { selectedValue = value; Navigator.of(context).pop(); }, @@ -46,7 +46,7 @@ class _AppearanceViewState extends State { value: ThemeMode.light, groupValue: selectedValue, label: 'Light', - onChanged: (ThemeMode? value) { + onChanged: (value) { selectedValue = value; Navigator.of(context).pop(); }, @@ -55,7 +55,7 @@ class _AppearanceViewState extends State { value: ThemeMode.dark, groupValue: selectedValue, label: 'Dark', - onChanged: (ThemeMode? value) { + onChanged: (value) { selectedValue = value; Navigator.of(context).pop(); }, diff --git a/lib/src/views/settings/backup/backup.view.dart b/lib/src/views/settings/backup/backup.view.dart index f2fc158..cf5945d 100644 --- a/lib/src/views/settings/backup/backup.view.dart +++ b/lib/src/views/settings/backup/backup.view.dart @@ -197,7 +197,7 @@ class _BackupViewState extends State { label: context.lang.backupData, ), ], - onTap: (int index) async { + onTap: (index) async { activePageIdx = index; await pageController.animateToPage( index, diff --git a/lib/src/views/settings/data_and_storage.view.dart b/lib/src/views/settings/data_and_storage.view.dart index 1088a27..9e2d568 100644 --- a/lib/src/views/settings/data_and_storage.view.dart +++ b/lib/src/views/settings/data_and_storage.view.dart @@ -24,7 +24,7 @@ class _DataAndStorageViewState extends State { // ignore: inference_failure_on_function_invocation await showDialog( context: context, - builder: (BuildContext context) { + builder: (context) { return AutoDownloadOptionsDialog( autoDownloadOptions: gUser.autoDownloadOptions ?? defaultAutoDownloadOptions, @@ -172,7 +172,7 @@ class _AutoDownloadOptionsDialogState extends State { title: const Text('Image'), value: autoDownloadOptions[widget.connectionMode.name]! .contains(DownloadMediaTypes.image.name), - onChanged: (bool? value) async { + onChanged: (value) async { await _updateAutoDownloadSetting(DownloadMediaTypes.image, value); }, ), @@ -180,7 +180,7 @@ class _AutoDownloadOptionsDialogState extends State { title: const Text('Video'), value: autoDownloadOptions[widget.connectionMode.name]! .contains(DownloadMediaTypes.video.name), - onChanged: (bool? value) async { + onChanged: (value) async { await _updateAutoDownloadSetting(DownloadMediaTypes.video, value); }, ), diff --git a/lib/src/views/settings/developer/automated_testing.view.dart b/lib/src/views/settings/developer/automated_testing.view.dart index 02a7b9d..d4beded 100644 --- a/lib/src/views/settings/developer/automated_testing.view.dart +++ b/lib/src/views/settings/developer/automated_testing.view.dart @@ -75,7 +75,7 @@ Future showUserNameDialog( await showDialog( context: context, - builder: (BuildContext context) { + builder: (context) { return AlertDialog( title: const Text('Username'), content: TextField( diff --git a/lib/src/views/settings/help/contact_us.view.dart b/lib/src/views/settings/help/contact_us.view.dart index 4aad469..362f63c 100644 --- a/lib/src/views/settings/help/contact_us.view.dart +++ b/lib/src/views/settings/help/contact_us.view.dart @@ -194,12 +194,12 @@ $debugLogToken hint: Text(context.lang.contactUsSelectOption), underline: const SizedBox.shrink(), value: _selectedReason, - onChanged: (String? newValue) { + onChanged: (newValue) { setState(() { _selectedReason = newValue; }); }, - items: reasons.map>((String reason) { + items: reasons.map>((reason) { return DropdownMenuItem( value: reason, child: Text(reason), @@ -211,7 +211,7 @@ $debugLogToken const SizedBox(height: 5), FeedbackEmojiRow( selectedFeedback: _selectedFeedback, - onFeedbackChanged: (int? newValue) { + onFeedbackChanged: (newValue) { setState(() { _selectedFeedback = newValue; }); @@ -317,7 +317,7 @@ class _IncludeDebugLogState extends State { Checkbox( value: widget.isChecked, materialTapTargetSize: MaterialTapTargetSize.shrinkWrap, - onChanged: (bool? value) { + onChanged: (value) { if (value != null) { widget.onChanged(value); } diff --git a/lib/src/views/settings/privacy_view_block.view.dart b/lib/src/views/settings/privacy_view_block.view.dart index dda1aa1..f3af120 100644 --- a/lib/src/views/settings/privacy_view_block.view.dart +++ b/lib/src/views/settings/privacy_view_block.view.dart @@ -102,7 +102,7 @@ class UserList extends StatelessWidget { return ListView.builder( restorationId: 'new_message_users_list', itemCount: users.length, - itemBuilder: (BuildContext context, int i) { + itemBuilder: (context, i) { final user = users[i]; return UserContextMenu( key: ValueKey(user.userId), @@ -116,7 +116,7 @@ class UserList extends StatelessWidget { leading: AvatarIcon(contactId: user.userId, fontSize: 15), trailing: Checkbox( value: user.blocked, - onChanged: (bool? value) async { + onChanged: (value) async { await block(context, user.userId, value); }, ), diff --git a/lib/src/views/settings/profile/modify_avatar.view.dart b/lib/src/views/settings/profile/modify_avatar.view.dart index 1ba50c0..314b40c 100644 --- a/lib/src/views/settings/profile/modify_avatar.view.dart +++ b/lib/src/views/settings/profile/modify_avatar.view.dart @@ -79,7 +79,7 @@ class _ModifyAvatarViewState extends State { Future _showBackDialog() { return showDialog( context: context, - builder: (BuildContext context) { + builder: (context) { return AlertDialog( title: Text( context.lang.avatarSaveChanges, @@ -117,7 +117,7 @@ class _ModifyAvatarViewState extends State { Widget build(BuildContext context) { return PopScope( canPop: false, - onPopInvokedWithResult: (bool didPop, bool? result) async { + onPopInvokedWithResult: (didPop, result) async { if (didPop) return; if (_avatarMakerController.getJsonOptionsSync() != gUser.avatarJson) { // there where changes diff --git a/lib/src/views/settings/profile/profile.view.dart b/lib/src/views/settings/profile/profile.view.dart index e7b0b56..5132401 100644 --- a/lib/src/views/settings/profile/profile.view.dart +++ b/lib/src/views/settings/profile/profile.view.dart @@ -193,7 +193,7 @@ Future showDisplayNameChangeDialog( return showDialog( context: context, - builder: (BuildContext context) { + builder: (context) { return AlertDialog( title: Text(title), content: TextField( diff --git a/lib/src/views/settings/subscription/select_additional_users.view.dart b/lib/src/views/settings/subscription/select_additional_users.view.dart index 14967c1..2a6d6f1 100644 --- a/lib/src/views/settings/subscription/select_additional_users.view.dart +++ b/lib/src/views/settings/subscription/select_additional_users.view.dart @@ -132,7 +132,7 @@ class _SelectAdditionalUsers extends State { restorationId: 'new_message_users_list', itemCount: contacts.length + (selectedUsers.isEmpty ? 0 : 2), - itemBuilder: (BuildContext context, int i) { + itemBuilder: (context, i) { if (selectedUsers.isNotEmpty) { final selected = selectedUsers.toList(); if (i == 0) { @@ -198,7 +198,7 @@ class _SelectAdditionalUsers extends State { ); }, ), - onChanged: (bool? value) { + onChanged: (value) { toggleSelectedUser(user.userId); }, ), diff --git a/lib/src/views/settings/subscription_custom/select_payment.view.dart b/lib/src/views/settings/subscription_custom/select_payment.view.dart index 15afb5c..9d9c830 100644 --- a/lib/src/views/settings/subscription_custom/select_payment.view.dart +++ b/lib/src/views/settings/subscription_custom/select_payment.view.dart @@ -129,7 +129,7 @@ class _SelectPaymentViewState extends State { Checkbox( value: paymentMethods == PaymentMethods.twonlyCredit, - onChanged: (bool? value) { + onChanged: (value) { setState(() { paymentMethods = PaymentMethods.twonlyCredit; }); diff --git a/lib/src/views/settings/subscription_custom/voucher.view.dart b/lib/src/views/settings/subscription_custom/voucher.view.dart index f2c48dd..770da2f 100644 --- a/lib/src/views/settings/subscription_custom/voucher.view.dart +++ b/lib/src/views/settings/subscription_custom/voucher.view.dart @@ -153,11 +153,11 @@ Future redeemVoucher(BuildContext context) async { // ignore: inference_failure_on_function_invocation await showDialog( context: context, - builder: (BuildContext context) { + builder: (context) { return AlertDialog( title: Text(context.lang.redeemVoucher), content: StatefulBuilder( - builder: (BuildContext context, StateSetter setState) { + builder: (context, setState) { return SingleChildScrollView( child: Column( mainAxisSize: MainAxisSize.min, @@ -227,11 +227,11 @@ Future showBuyVoucher(BuildContext context) async { // ignore: inference_failure_on_function_invocation await showDialog( context: context, - builder: (BuildContext context) { + builder: (context) { return AlertDialog( title: Text(context.lang.createVoucher), content: StatefulBuilder( - builder: (BuildContext context, StateSetter setState) { + builder: (context, setState) { return SingleChildScrollView( child: Column( mainAxisSize: MainAxisSize.min, diff --git a/lib/src/views/user_study/user_study_questionnaire.view.dart b/lib/src/views/user_study/user_study_questionnaire.view.dart index c23a4da..6ae7b2c 100644 --- a/lib/src/views/user_study/user_study_questionnaire.view.dart +++ b/lib/src/views/user_study/user_study_questionnaire.view.dart @@ -179,7 +179,7 @@ class _UserStudyQuestionnaireViewState title: Text(m), visualDensity: const VisualDensity(vertical: -4), value: (_responses['messengers'] as List).contains(m), - onChanged: (bool? value) { + onChanged: (value) { setState(() { value! ? _responses['messengers'].add(m) @@ -236,7 +236,7 @@ class _UserStudyQuestionnaireViewState labelText: 'Bitte wählen...', ), initialValue: _responses[key] as String?, - items: options.map((String value) { + items: options.map((value) { return DropdownMenuItem( value: value, child: Text(value), diff --git a/pubspec.lock b/pubspec.lock index d9c8ce6..240bf52 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -5,18 +5,18 @@ packages: dependency: transitive description: name: _fe_analyzer_shared - sha256: c209688d9f5a5f26b2fb47a188131a6fb9e876ae9e47af3737c0b4f58a93470d + sha256: "8d7ff3948166b8ec5da0fbb5962000926b8e02f2ed9b3e51d1738905fbd4c98d" url: "https://pub.dev" source: hosted - version: "91.0.0" + version: "93.0.0" _flutterfire_internals: dependency: transitive description: name: _flutterfire_internals - sha256: e4a1b612fd2955908e26116075b3a4baf10c353418ca645b4deae231c82bf144 + sha256: cd83f7d6bd4e4c0b0b4fef802e8796784032e1cc23d7b0e982cf5d05d9bbe182 url: "https://pub.dev" source: hosted - version: "1.3.65" + version: "1.3.66" adaptive_number: dependency: "direct overridden" description: @@ -28,10 +28,10 @@ packages: dependency: transitive description: name: analyzer - sha256: f51c8499b35f9b26820cfe914828a6a98a94efd5cc78b37bb7d03debae3a1d08 + sha256: de7148ed2fcec579b19f122c1800933dfa028f6d9fd38a152b04b1516cec120b url: "https://pub.dev" source: hosted - version: "8.4.1" + version: "10.0.1" app_links: dependency: "direct main" description: @@ -92,10 +92,10 @@ packages: dependency: "direct main" description: name: audio_waveforms - sha256: "3a34bdd15dd63a6d1501218449048b28ebe8e1f795bf00ec310acd7b70648f07" + sha256: "03b3430ecf430a2e90185518a228c02be3d26653c62dd931e50d671213a6dbc8" url: "https://pub.dev" source: hosted - version: "2.0.0" + version: "2.0.2" avatar_maker: dependency: "direct main" description: @@ -108,10 +108,10 @@ packages: dependency: "direct main" description: name: background_downloader - sha256: a3b340e42bc45598918944e378dc6a05877e587fcd0e1b8d2ea26339de87bdf9 + sha256: "2ea5322fe836c0aaf96aefd29ef1936771c71927f687cf18168dcc119666a45f" url: "https://pub.dev" source: hosted - version: "9.4.0" + version: "9.5.2" boolean_selector: dependency: transitive description: @@ -124,10 +124,10 @@ packages: dependency: transitive description: name: build - sha256: dfb67ccc9a78c642193e0c2d94cb9e48c2c818b3178a86097d644acdcde6a8d9 + sha256: "275bf6bb2a00a9852c28d4e0b410da1d833a734d57d39d44f94bfc895a484ec3" url: "https://pub.dev" source: hosted - version: "4.0.2" + version: "4.0.4" build_config: dependency: transitive description: @@ -140,18 +140,18 @@ packages: dependency: transitive description: name: build_daemon - sha256: "409002f1adeea601018715d613115cfaf0e31f512cb80ae4534c79867ae2363d" + sha256: bf05f6e12cfea92d3c09308d7bcdab1906cd8a179b023269eed00c071004b957 url: "https://pub.dev" source: hosted - version: "4.1.0" + version: "4.1.1" build_runner: dependency: "direct dev" description: name: build_runner - sha256: a9461b8e586bf018dd4afd2e13b49b08c6a844a4b226c8d1d10f3a723cdd78c3 + sha256: "39ad4ca8a2876779737c60e4228b4bcd35d4352ef7e14e47514093edc012c734" url: "https://pub.dev" source: hosted - version: "2.10.1" + version: "2.11.1" built_collection: dependency: transitive description: @@ -164,10 +164,10 @@ packages: dependency: transitive description: name: built_value - sha256: a30f0a0e38671e89a492c44d005b5545b830a961575bbd8336d42869ff71066d + sha256: "7931c90b84bc573fef103548e354258ae4c9d28d140e41961df6843c5d60d4d8" url: "https://pub.dev" source: hosted - version: "8.12.0" + version: "8.12.3" cached_network_image: dependency: "direct main" description: @@ -196,10 +196,10 @@ packages: dependency: "direct main" description: name: camera - sha256: eefad89f262a873f38d21e5eec853461737ea074d7c9ede39f3ceb135d201cab + sha256: a005c6b9783d895a3a9808d65d06773d13587e22a186b6fe8ef3801b0d12f8cf url: "https://pub.dev" source: hosted - version: "0.11.3" + version: "0.11.3+1" camera_android_camerax: dependency: "direct overridden" description: @@ -213,10 +213,10 @@ packages: dependency: transitive description: name: camera_avfoundation - sha256: "34bcd5db30e52414f1f0783c5e3f566909fab14141a21b3b576c78bd35382bf6" + sha256: "11b4aee2f5e5e038982e152b4a342c749b414aa27857899d20f4323e94cb5f0b" url: "https://pub.dev" source: hosted - version: "0.9.22+4" + version: "0.9.23+2" camera_platform_interface: dependency: transitive description: @@ -229,18 +229,18 @@ packages: dependency: transitive description: name: camera_web - sha256: "595f28c89d1fb62d77c73c633193755b781c6d2e0ebcd8dc25b763b514e6ba8f" + sha256: "57f49a635c8bf249d07fb95eb693d7e4dda6796dedb3777f9127fb54847beba7" url: "https://pub.dev" source: hosted - version: "0.3.5" + version: "0.3.5+3" characters: dependency: transitive description: name: characters - sha256: f71061c654a3380576a52b451dd5532377954cf9dbd272a78fc8479606670803 + sha256: faf38497bda5ead2a8c7615f4f7939df04333478bf32e4173fcb06d428b5716b url: "https://pub.dev" source: hosted - version: "1.4.0" + version: "1.4.1" charcode: dependency: transitive description: @@ -273,14 +273,22 @@ packages: url: "https://pub.dev" source: hosted version: "1.1.2" + code_assets: + dependency: transitive + description: + name: code_assets + sha256: "83ccdaa064c980b5596c35dd64a8d3ecc68620174ab9b90b6343b753aa721687" + url: "https://pub.dev" + source: hosted + version: "1.0.0" code_builder: dependency: transitive description: name: code_builder - sha256: "11654819532ba94c34de52ff5feb52bd81cba1de00ef2ed622fd50295f9d4243" + sha256: "6a6cab2ba4680d6423f34a9b972a4c9a94ebe1b62ecec4e1a1f2cba91fd1319d" url: "https://pub.dev" source: hosted - version: "4.11.0" + version: "4.11.1" collection: dependency: "direct main" description: @@ -317,10 +325,10 @@ packages: dependency: transitive description: name: cross_file - sha256: "942a4791cd385a68ccb3b32c71c427aba508a1bb949b86dff2adbe4049f16239" + sha256: "28bb3ae56f117b5aec029d702a90f57d285cd975c3c5c281eaca38dbc47c5937" url: "https://pub.dev" source: hosted - version: "0.3.5" + version: "0.3.5+2" crypto: dependency: "direct main" description: @@ -357,26 +365,26 @@ packages: dependency: transitive description: name: dart_style - sha256: c87dfe3d56f183ffe9106a18aebc6db431fc7c98c31a54b952a77f3d54a85697 + sha256: "15a7db352c8fc6a4d2bc475ba901c25b39fe7157541da4c16eacce6f8be83e49" url: "https://pub.dev" source: hosted - version: "3.1.2" + version: "3.1.5" dbus: dependency: transitive description: name: dbus - sha256: "79e0c23480ff85dc68de79e2cd6334add97e48f7f4865d17686dd6ea81a47e8c" + sha256: d0c98dcd4f5169878b6cf8f6e0a52403a9dff371a3e2f019697accbf6f44a270 url: "https://pub.dev" source: hosted - version: "0.7.11" + version: "0.7.12" device_info_plus: dependency: "direct main" description: name: device_info_plus - sha256: dd0e8e02186b2196c7848c9d394a5fd6e5b57a43a546082c5820b1ec72317e33 + sha256: "4df8babf73058181227e18b08e6ea3520cf5fc5d796888d33b7cb0f33f984b7c" url: "https://pub.dev" source: hosted - version: "12.2.0" + version: "12.3.0" device_info_plus_platform_interface: dependency: transitive description: @@ -396,26 +404,26 @@ packages: dependency: "direct main" description: name: drift - sha256: "83290a32ae006a7535c5ecf300722cb77177250d9df4ee2becc5fa8a36095114" + sha256: "970cd188fddb111b26ea6a9b07a62bf5c2432d74147b8122c67044ae3b97e99e" url: "https://pub.dev" source: hosted - version: "2.29.0" + version: "2.31.0" drift_dev: dependency: "direct dev" description: name: drift_dev - sha256: "6019f827544e77524ffd5134ae0cb75dfd92ef5ef3e269872af92840c929cd43" + sha256: "917184b2fb867b70a548a83bf0d36268423b38d39968c06cce4905683da49587" url: "https://pub.dev" source: hosted - version: "2.29.0" + version: "2.31.0" drift_flutter: dependency: "direct main" description: name: drift_flutter - sha256: b7534bf320aac5213259aac120670ba67b63a1fd010505babc436ff86083818f + sha256: c07120854742a0cae2f7501a0da02493addde550db6641d284983c08762e60a7 url: "https://pub.dev" source: hosted - version: "0.2.7" + version: "0.2.8" ed25519_edwards: dependency: "direct overridden" description: @@ -444,10 +452,10 @@ packages: dependency: transitive description: name: ffi - sha256: "289279317b4b16eb2bb7e271abccd4bf84ec9bdcbe999e278a94b804f5630418" + sha256: "6d7fd89431262d8f3125e81b50d3847a091d846eafcd4fdb88dd06f36d705a45" url: "https://pub.dev" source: hosted - version: "2.1.4" + version: "2.2.0" ffmpeg_kit_flutter_new: dependency: "direct main" description: @@ -476,50 +484,50 @@ packages: dependency: "direct main" description: name: file_picker - sha256: f8f4ea435f791ab1f817b4e338ed958cb3d04ba43d6736ffc39958d950754967 + sha256: "57d9a1dd5063f85fa3107fb42d1faffda52fdc948cefd5fe5ea85267a5fc7343" url: "https://pub.dev" source: hosted - version: "10.3.6" + version: "10.3.10" file_selector_linux: dependency: transitive description: name: file_selector_linux - sha256: "54cbbd957e1156d29548c7d9b9ec0c0ebb6de0a90452198683a7d23aed617a33" + sha256: "2567f398e06ac72dcf2e98a0c95df2a9edd03c2c2e0cacd4780f20cdf56263a0" url: "https://pub.dev" source: hosted - version: "0.9.3+2" + version: "0.9.4" file_selector_macos: dependency: transitive description: name: file_selector_macos - sha256: "88707a3bec4b988aaed3b4df5d7441ee4e987f20b286cddca5d6a8270cab23f2" + sha256: "5e0bbe9c312416f1787a68259ea1505b52f258c587f12920422671807c4d618a" url: "https://pub.dev" source: hosted - version: "0.9.4+5" + version: "0.9.5" file_selector_platform_interface: dependency: transitive description: name: file_selector_platform_interface - sha256: a3994c26f10378a039faa11de174d7b78eb8f79e4dd0af2a451410c1a5c3f66b + sha256: "35e0bd61ebcdb91a3505813b055b09b79dfdc7d0aee9c09a7ba59ae4bb13dc85" url: "https://pub.dev" source: hosted - version: "2.6.2" + version: "2.7.0" file_selector_windows: dependency: transitive description: name: file_selector_windows - sha256: "320fcfb6f33caa90f0b58380489fc5ac05d99ee94b61aa96ec2bff0ba81d3c2b" + sha256: "62197474ae75893a62df75939c777763d39c2bc5f73ce5b88497208bc269abfd" url: "https://pub.dev" source: hosted - version: "0.9.3+4" + version: "0.9.3+5" firebase_core: dependency: "direct main" description: name: firebase_core - sha256: "29cfa93c771d8105484acac340b5ea0835be371672c91405a300303986f4eba9" + sha256: "923085c881663ef685269b013e241b428e1fb03cdd0ebde265d9b40ff18abf80" url: "https://pub.dev" source: hosted - version: "4.3.0" + version: "4.4.0" firebase_core_platform_interface: dependency: transitive description: @@ -532,34 +540,34 @@ packages: dependency: transitive description: name: firebase_core_web - sha256: a631bbfbfa26963d68046aed949df80b228964020e9155b086eff94f462bbf1f + sha256: "83e7356c704131ca4d8d8dd57e360d8acecbca38b1a3705c7ae46cc34c708084" url: "https://pub.dev" source: hosted - version: "3.3.1" + version: "3.4.0" firebase_messaging: dependency: "direct main" description: name: firebase_messaging - sha256: "1ad663fbb6758acec09d7e84a2e6478265f0a517f40ef77c573efd5e0089f400" + sha256: "06fad40ea14771e969a8f2bbce1944aa20ee2f4f57f4eca5b3ba346b65f3f644" url: "https://pub.dev" source: hosted - version: "16.1.0" + version: "16.1.1" firebase_messaging_platform_interface: dependency: transitive description: name: firebase_messaging_platform_interface - sha256: ea620e841fbcec62a96984295fc628f53ef5a8da4f53238159719ed0af7db834 + sha256: "6c49e901c77e6e10e86d98e32056a087eb1ca1b93acdf58524f1961e617657b7" url: "https://pub.dev" source: hosted - version: "4.7.5" + version: "4.7.6" firebase_messaging_web: dependency: transitive description: name: firebase_messaging_web - sha256: "7d0fb6256202515bba8489a3d69c6bc9d52d69a4999bad789053b486c8e7323e" + sha256: "2756f8fea583ffb9d294d15ddecb3a9ad429b023b70c9990c151fc92c54a32b3" url: "https://pub.dev" source: hosted - version: "4.1.1" + version: "4.1.2" fixnum: dependency: "direct main" description: @@ -735,10 +743,10 @@ packages: dependency: transitive description: name: flutter_plugin_android_lifecycle - sha256: "306f0596590e077338312f38837f595c04f28d6cdeeac392d3d74df2f0003687" + sha256: ee8068e0e1cd16c4a82714119918efdeed33b3ba7772c54b5d094ab53f9b7fd1 url: "https://pub.dev" source: hosted - version: "2.0.32" + version: "2.0.33" flutter_secure_storage: dependency: "direct main" description: @@ -798,10 +806,10 @@ packages: dependency: "direct main" description: name: flutter_svg - sha256: "055de8921be7b8e8b98a233c7a5ef84b3a6fcc32f46f1ebf5b9bb3576d108355" + sha256: "87fbd7c534435b6c5d9d98b01e1fd527812b82e68ddd8bd35fc45ed0fa8f0a95" url: "https://pub.dev" source: hosted - version: "2.2.2" + version: "2.2.3" flutter_test: dependency: "direct dev" description: flutter @@ -840,10 +848,10 @@ packages: dependency: "direct main" description: name: get - sha256: c79eeb4339f1f3deffd9ec912f8a923834bec55f7b49c9e882b8fef2c139d425 + sha256: "5ed34a7925b85336e15d472cc4cfe7d9ebf4ab8e8b9f688585bf6b50f4c3d79a" url: "https://pub.dev" source: hosted - version: "4.7.2" + version: "4.7.3" glob: dependency: transitive description: @@ -864,26 +872,26 @@ packages: dependency: "direct main" description: name: google_mlkit_barcode_scanning - sha256: b38505df2d3fdf7830979d60fee55039c2f442d189b2e06fcb2fe494ba65d0db + sha256: dbf4df99cb490b12e95dcedde3e6741ce711942904f7049da601dfede91c1e0f url: "https://pub.dev" source: hosted - version: "0.14.1" + version: "0.14.2" google_mlkit_commons: dependency: transitive description: name: google_mlkit_commons - sha256: "8f40fbac10685cad4715d11e6a0d86837d9ad7168684dfcad29610282a88e67a" + sha256: "3e69fea4211727732cc385104e675ad1e40b29f12edd492ee52fa108423a6124" url: "https://pub.dev" source: hosted - version: "0.11.0" + version: "0.11.1" google_mlkit_face_detection: dependency: "direct main" description: name: google_mlkit_face_detection - sha256: f336737d5b8a86797fd4368f42a5c26aeaa9c6dcc5243f0a16b5f6f663cfb70a + sha256: "7b6ddcc69dbd6fbfa313fb2d974ad0f0c3a0d1657560f0da6be465baf1889687" url: "https://pub.dev" source: hosted - version: "0.13.1" + version: "0.13.2" graphs: dependency: transitive description: @@ -921,6 +929,14 @@ packages: relative: true source: path version: "3.0.1" + hooks: + dependency: transitive + description: + name: hooks + sha256: "7a08a0d684cb3b8fb604b78455d5d352f502b68079f7b80b831c62220ab0a4f6" + url: "https://pub.dev" + source: hosted + version: "1.0.1" html: dependency: "direct main" description: @@ -933,10 +949,10 @@ packages: dependency: "direct main" description: name: http - sha256: bb2ce4590bc2667c96f318d68cac1b5a7987ec819351d32b1c987239a815e007 + sha256: "87721a4a50b19c7f1d49001e51409bddc46303966ce89a65af4f4e6004896412" url: "https://pub.dev" source: hosted - version: "1.5.0" + version: "1.6.0" http_multi_server: dependency: transitive description: @@ -957,42 +973,42 @@ packages: dependency: "direct main" description: name: image - sha256: "4e973fcf4caae1a4be2fa0a13157aa38a8f9cb049db6529aa00b4d71abc4d928" + sha256: "492bd52f6c4fbb6ee41f781ff27765ce5f627910e1e0cbecfa3d9add5562604c" url: "https://pub.dev" source: hosted - version: "4.5.4" + version: "4.7.2" image_picker: dependency: "direct main" description: name: image_picker - sha256: "736eb56a911cf24d1859315ad09ddec0b66104bc41a7f8c5b96b4e2620cf5041" + sha256: "784210112be18ea55f69d7076e2c656a4e24949fa9e76429fe53af0c0f4fa320" url: "https://pub.dev" source: hosted - version: "1.2.0" + version: "1.2.1" image_picker_android: dependency: transitive description: name: image_picker_android - sha256: ca2a3b04d34e76157e9ae680ef16014fb4c2d20484e78417eaed6139330056f6 + sha256: "518a16108529fc18657a3e6dde4a043dc465d16596d20ab2abd49a4cac2e703d" url: "https://pub.dev" source: hosted - version: "0.8.13+7" + version: "0.8.13+13" image_picker_for_web: dependency: transitive description: name: image_picker_for_web - sha256: "40c2a6a0da15556dc0f8e38a3246064a971a9f512386c3339b89f76db87269b6" + sha256: "66257a3191ab360d23a55c8241c91a6e329d31e94efa7be9cf7a212e65850214" url: "https://pub.dev" source: hosted - version: "3.1.0" + version: "3.1.1" image_picker_ios: dependency: transitive description: name: image_picker_ios - sha256: e675c22790bcc24e9abd455deead2b7a88de4b79f7327a281812f14de1a56f58 + sha256: b9c4a438a9ff4f60808c9cf0039b93a42bb6c2211ef6ebb647394b2b3fa84588 url: "https://pub.dev" source: hosted - version: "0.8.13+1" + version: "0.8.13+6" image_picker_linux: dependency: transitive description: @@ -1100,18 +1116,26 @@ packages: dependency: "direct main" description: name: json_annotation - sha256: "1ce844379ca14835a50d2f019a3099f419082cfdd231cd86a142af94dd5c6bb1" + sha256: "805fa86df56383000f640384b282ce0cb8431f1a7a2396de92fb66186d8c57df" url: "https://pub.dev" source: hosted - version: "4.9.0" + version: "4.10.0" + json_schema: + dependency: transitive + description: + name: json_schema + sha256: f37d9c3fdfe8c9aae55fdfd5af815d24ce63c3a0f6a2c1f0982c30f43643fa1a + url: "https://pub.dev" + source: hosted + version: "5.2.2" json_serializable: dependency: "direct dev" description: name: json_serializable - sha256: "33a040668b31b320aafa4822b7b1e177e163fc3c1e835c6750319d4ab23aa6fe" + sha256: "93fba3ad139dab2b1ce59ecc6fdce6da46a42cdb6c4399ecda30f1e7e725760d" url: "https://pub.dev" source: hosted - version: "6.11.1" + version: "6.12.0" leak_tracker: dependency: transitive description: @@ -1147,10 +1171,10 @@ packages: dependency: transitive description: name: lints - sha256: a5e2b223cb7c9c8efdc663ef484fdd95bb243bff242ef5b13e26883547fce9a0 + sha256: "12f842a479589fea194fe5c5a3095abc7be0c1f2ddfa9a0e76aed1dbd26a87df" url: "https://pub.dev" source: hosted - version: "6.0.0" + version: "6.1.0" local_auth: dependency: "direct main" description: @@ -1163,18 +1187,18 @@ packages: dependency: transitive description: name: local_auth_android - sha256: d836715ed95b16b2de3a8c47a88ba5e607976bb1e27c9446d193152ea1429fae + sha256: "162b8e177fd9978c4620da2a8002a5c6bed4d20f0c6daf5137e72e9a8b767d2e" url: "https://pub.dev" source: hosted - version: "2.0.0" + version: "2.0.4" local_auth_darwin: dependency: transitive description: name: local_auth_darwin - sha256: "15d9db4ad4d58a11d7269e55d46ff8d49ed5e856226c8a5a91280f0d7c37b3a6" + sha256: "176480aa855ebedeed195e26ac7d6601a45e6b255dfc7433f353e0c1aeafa9a2" url: "https://pub.dev" source: hosted - version: "2.0.0" + version: "2.0.2" local_auth_platform_interface: dependency: transitive description: @@ -1187,10 +1211,10 @@ packages: dependency: transitive description: name: local_auth_windows - sha256: d95535a73eddf57ce5930d5e78a0fa4f294c31981fdeeee83325b797302be454 + sha256: be12c5b8ba5e64896983123655c5f67d2484ecfcc95e367952ad6e3bff94cb16 url: "https://pub.dev" source: hosted - version: "2.0.0" + version: "2.0.1" logging: dependency: "direct main" description: @@ -1210,18 +1234,18 @@ packages: dependency: transitive description: name: matcher - sha256: dc58c723c3c24bf8d3e2d3ad3f2f9d7bd9cf43ec6feaa64181775e60190153f2 + sha256: "12956d0ad8390bbcc63ca2e1469c0619946ccb52809807067a7020d57e647aa6" url: "https://pub.dev" source: hosted - version: "0.12.17" + version: "0.12.18" material_color_utilities: dependency: transitive description: name: material_color_utilities - sha256: f7142bb1154231d7ea5f96bc7bde4bda2a0945d2806bb11670e30b850d56bdec + sha256: "9c337007e82b1889149c82ed242ed1cb24a66044e30979c44912381e9be4c48b" url: "https://pub.dev" source: hosted - version: "0.11.1" + version: "0.13.0" meta: dependency: "direct main" description: @@ -1245,6 +1269,14 @@ packages: relative: true source: path version: "3.1.0" + native_toolchain_c: + dependency: transitive + description: + name: native_toolchain_c + sha256: "89e83885ba09da5fdf2cdacc8002a712ca238c28b7f717910b34bcd27b0d03ac" + url: "https://pub.dev" + source: hosted + version: "0.17.4" nested: dependency: transitive description: @@ -1267,15 +1299,15 @@ packages: path: "dependencies/no_screenshot" relative: true source: path - version: "0.3.2" + version: "0.4.0" objective_c: dependency: transitive description: name: objective_c - sha256: "64e35e1e2e79da4e83f2ace3bf4e5437cef523f46c7db2eba9a1419c49573790" + sha256: "100a1c87616ab6ed41ec263b083c0ef3261ee6cd1dc3b0f35f8ddfa4f996fe52" url: "https://pub.dev" source: hosted - version: "8.0.0" + version: "9.3.0" octo_image: dependency: transitive description: @@ -1343,18 +1375,18 @@ packages: dependency: transitive description: name: path_provider_android - sha256: e122c5ea805bb6773bb12ce667611265980940145be920cd09a4b0ec0285cb16 + sha256: f2c65e21139ce2c3dad46922be8272bb5963516045659e71bb16e151c93b580e url: "https://pub.dev" source: hosted - version: "2.2.20" + version: "2.2.22" path_provider_foundation: dependency: transitive description: name: path_provider_foundation - sha256: efaec349ddfc181528345c56f8eda9d6cccd71c177511b132c6a0ddaefaa2738 + sha256: "2a376b7d6392d80cd3705782d2caa734ca4727776db0b6ec36ef3f1855197699" url: "https://pub.dev" source: hosted - version: "2.4.3" + version: "2.6.0" path_provider_linux: dependency: transitive description: @@ -1527,6 +1559,14 @@ packages: relative: true source: path version: "4.1.0" + quiver: + dependency: transitive + description: + name: quiver + sha256: ea0b925899e64ecdfbf9c7becb60d5b50e706ade44a85b2363be2a22d88117d2 + url: "https://pub.dev" + source: hosted + version: "3.2.2" recase: dependency: transitive description: @@ -1543,6 +1583,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.3.2" + rfc_6901: + dependency: transitive + description: + name: rfc_6901 + sha256: "6a43b1858dca2febaf93e15639aa6b0c49ccdfd7647775f15a499f872b018154" + url: "https://pub.dev" + source: hosted + version: "0.2.1" rxdart: dependency: transitive description: @@ -1563,18 +1611,18 @@ packages: dependency: transitive description: name: sentry - sha256: "10a0bc25f5f21468e3beeae44e561825aaa02cdc6829438e73b9b64658ff88d9" + sha256: e57e57123968b673c8ca19892eecf93113b4811b8e5cd5d165749ca7f7319fdb url: "https://pub.dev" source: hosted - version: "9.8.0" + version: "9.13.0" sentry_flutter: dependency: "direct main" description: name: sentry_flutter - sha256: aafbf41c63c98a30b17bdbf3313424d5102db62b08735c44bff810f277e786a5 + sha256: c8f5b805c0346cd0c93b09e584675af7ed8c3ef36c3589181ad19b4adce35954 url: "https://pub.dev" source: hosted - version: "9.8.0" + version: "9.13.0" share_plus: dependency: "direct main" description: @@ -1595,26 +1643,26 @@ packages: dependency: transitive description: name: shared_preferences - sha256: "6e8bf70b7fef813df4e9a36f658ac46d107db4b4cfe1048b477d4e453a8159f5" + sha256: "2939ae520c9024cb197fc20dee269cd8cdbf564c8b5746374ec6cacdc5169e64" url: "https://pub.dev" source: hosted - version: "2.5.3" + version: "2.5.4" shared_preferences_android: dependency: transitive description: name: shared_preferences_android - sha256: "34266009473bf71d748912da4bf62d439185226c03e01e2d9687bc65bbfcb713" + sha256: cbc40be9be1c5af4dab4d6e0de4d5d3729e6f3d65b89d21e1815d57705644a6f url: "https://pub.dev" source: hosted - version: "2.4.15" + version: "2.4.20" shared_preferences_foundation: dependency: transitive description: name: shared_preferences_foundation - sha256: "1c33a907142607c40a7542768ec9badfd16293bac51da3a4482623d15845f88b" + sha256: "4e7eaffc2b17ba398759f1151415869a34771ba11ebbccd1b0145472a619a64f" url: "https://pub.dev" source: hosted - version: "2.5.5" + version: "2.5.6" shared_preferences_linux: dependency: transitive description: @@ -1672,26 +1720,26 @@ packages: dependency: transitive description: name: source_gen - sha256: "9098ab86015c4f1d8af6486b547b11100e73b193e1899015033cb3e14ad20243" + sha256: "1d562a3c1f713904ebbed50d2760217fd8a51ca170ac4b05b0db490699dbac17" url: "https://pub.dev" source: hosted - version: "4.0.2" + version: "4.2.0" source_helper: dependency: transitive description: name: source_helper - sha256: "6a3c6cc82073a8797f8c4dc4572146114a39652851c157db37e964d9c7038723" + sha256: "4a85e90b50694e652075cbe4575665539d253e6ec10e46e76b45368ab5e3caae" url: "https://pub.dev" source: hosted - version: "1.3.8" + version: "1.3.10" source_span: dependency: transitive description: name: source_span - sha256: "254ee5351d6cb365c859e20ee823c3bb479bf4a293c22d17a9f1bf144ce86f7c" + sha256: "56a02f1f4cd1a2d96303c0144c93bd6d909eea6bee6bf5a0e0b685edbd4c47ab" url: "https://pub.dev" source: hosted - version: "1.10.1" + version: "1.10.2" sqflite: dependency: transitive description: @@ -1744,18 +1792,18 @@ packages: dependency: transitive description: name: sqlite3_flutter_libs - sha256: "69c80d812ef2500202ebd22002cbfc1b6565e9ff56b2f971e757fac5d42294df" + sha256: "1e800ebe7f85a80a66adacaa6febe4d5f4d8b75f244e9838a27cb2ffc7aec08d" url: "https://pub.dev" source: hosted - version: "0.5.40" + version: "0.5.41" sqlparser: dependency: transitive description: name: sqlparser - sha256: "54eea43e36dd3769274c3108625f9ea1a382f8d2ac8b16f3e4589d9bd9b0e16c" + sha256: "337e9997f7141ffdd054259128553c348635fa318f7ca492f07a4ab76f850d19" url: "https://pub.dev" source: hosted - version: "0.42.0" + version: "0.43.1" stack_trace: dependency: transitive description: @@ -1808,10 +1856,10 @@ packages: dependency: transitive description: name: test_api - sha256: ab2726c1a94d3176a45960b6234466ec367179b87dd74f1611adb1f3b5fb9d55 + sha256: "19a78f63e83d3a61f00826d09bc2f60e191bf3504183c001262be6ac75589fb8" url: "https://pub.dev" source: hosted - version: "0.7.7" + version: "0.7.8" timezone: dependency: transitive description: @@ -1828,6 +1876,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.4.0" + uri: + dependency: transitive + description: + name: uri + sha256: "889eea21e953187c6099802b7b4cf5219ba8f3518f604a1033064d45b1b8268a" + url: "https://pub.dev" + source: hosted + version: "1.0.0" url_launcher: dependency: "direct main" description: @@ -1840,34 +1896,34 @@ packages: dependency: transitive description: name: url_launcher_android - sha256: "5c8b6c2d89a78f5a1cca70a73d9d5f86c701b36b42f9c9dac7bad592113c28e9" + sha256: "767344bf3063897b5cf0db830e94f904528e6dd50a6dfaf839f0abf509009611" url: "https://pub.dev" source: hosted - version: "6.3.24" + version: "6.3.28" url_launcher_ios: dependency: transitive description: name: url_launcher_ios - sha256: "6b63f1441e4f653ae799166a72b50b1767321ecc263a57aadf825a7a2a5477d9" + sha256: b1aca26728b7cc7a3af971bb6f601554a8ae9df2e0a006de8450ba06a17ad36a url: "https://pub.dev" source: hosted - version: "6.3.5" + version: "6.4.0" url_launcher_linux: dependency: transitive description: name: url_launcher_linux - sha256: "4e9ba368772369e3e08f231d2301b4ef72b9ff87c31192ef471b380ef29a4935" + sha256: d5e14138b3bc193a0f63c10a53c94b91d399df0512b1f29b94a043db7482384a url: "https://pub.dev" source: hosted - version: "3.2.1" + version: "3.2.2" url_launcher_macos: dependency: transitive description: name: url_launcher_macos - sha256: "8262208506252a3ed4ff5c0dc1e973d2c0e0ef337d0a074d35634da5d44397c9" + sha256: "368adf46f71ad3c21b8f06614adb38346f193f3a59ba8fe9a2fd74133070ba18" url: "https://pub.dev" source: hosted - version: "3.2.4" + version: "3.2.5" url_launcher_platform_interface: dependency: transitive description: @@ -1880,18 +1936,18 @@ packages: dependency: transitive description: name: url_launcher_web - sha256: "4bd2b7b4dc4d4d0b94e5babfffbca8eac1a126c7f3d6ecbc1a11013faa3abba2" + sha256: d0412fcf4c6b31ecfdb7762359b7206ffba3bbffd396c6d9f9c4616ece476c1f url: "https://pub.dev" source: hosted - version: "2.4.1" + version: "2.4.2" url_launcher_windows: dependency: transitive description: name: url_launcher_windows - sha256: "3284b6d2ac454cf34f114e1d3319866fdd1e19cdc329999057e44ffe936cfa77" + sha256: "712c70ab1b99744ff066053cbe3e80c73332b38d46e5e945c98689b2e66fc15f" url: "https://pub.dev" source: hosted - version: "3.1.4" + version: "3.1.5" uuid: dependency: transitive description: @@ -1920,10 +1976,10 @@ packages: dependency: transitive description: name: vector_graphics_compiler - sha256: d354a7ec6931e6047785f4db12a1f61ec3d43b207fc0790f863818543f8ff0dc + sha256: "201e876b5d52753626af64b6359cd13ac6011b80728731428fd34bc840f71c9b" url: "https://pub.dev" source: hosted - version: "1.1.19" + version: "1.1.20" vector_math: dependency: transitive description: @@ -1936,10 +1992,10 @@ packages: dependency: "direct dev" description: name: very_good_analysis - sha256: "96245839dbcc45dfab1af5fa551603b5c7a282028a64746c19c547d21a7f1e3a" + sha256: "27927d1140ce1b140f998b6340f730a626faa5b95110b3e34a238ff254d731d0" url: "https://pub.dev" source: hosted - version: "10.0.0" + version: "10.1.0" video_player: dependency: "direct main" description: @@ -1952,18 +2008,18 @@ packages: dependency: transitive description: name: video_player_android - sha256: cf768d02924b91e333e2bc1ff928528f57d686445874f383bafab12d0bdfc340 + sha256: ee4fd520b0cafa02e4a867a0f882092e727cdaa1a2d24762171e787f8a502b0a url: "https://pub.dev" source: hosted - version: "2.8.17" + version: "2.9.1" video_player_avfoundation: dependency: transitive description: name: video_player_avfoundation - sha256: "19ed1162a7a5520e7d7791e0b7b73ba03161b6a69428b82e4689e435b325432d" + sha256: f93b93a3baa12ca0ff7d00ca8bc60c1ecd96865568a01ff0c18a99853ee201a5 url: "https://pub.dev" source: hosted - version: "2.8.5" + version: "2.9.3" video_player_platform_interface: dependency: transitive description: @@ -1992,10 +2048,10 @@ packages: dependency: transitive description: name: watcher - sha256: "592ab6e2892f67760543fb712ff0177f4ec76c031f02f5b4ff8d3fc5eb9fb61a" + sha256: "1398c9f081a753f9226febe8900fce8f7d0a67163334e1c94a2438339d79d635" url: "https://pub.dev" source: hosted - version: "1.1.4" + version: "1.2.1" web: dependency: transitive description: @@ -2068,5 +2124,5 @@ packages: source: hosted version: "3.1.3" sdks: - dart: ">=3.10.0 <4.0.0" - flutter: ">=3.38.1" + dart: ">=3.10.3 <4.0.0" + flutter: ">=3.38.4" diff --git a/test/widget_test.dart b/test/widget_test.dart index 1d8332f..0e3e2ac 100644 --- a/test/widget_test.dart +++ b/test/widget_test.dart @@ -13,7 +13,7 @@ import 'package:flutter_test/flutter_test.dart'; void main() { group('MyWidget', () { - testWidgets('should display a string of text', (WidgetTester tester) async { + testWidgets('should display a string of text', (tester) async { // Define a Widget const myWidget = MaterialApp( home: Scaffold(