From 6dc9aa10bc9f59f877e7f44f8e44935cda106a44 Mon Sep 17 00:00:00 2001 From: otsmr Date: Fri, 26 Dec 2025 22:08:39 +0100 Subject: [PATCH] fix #350 --- lib/app.dart | 1 + lib/globals.dart | 6 ++++-- lib/src/localization/app_de.arb | 3 ++- lib/src/localization/app_en.arb | 3 ++- .../generated/app_localizations.dart | 6 ++++++ .../generated/app_localizations_de.dart | 5 +++++ .../generated/app_localizations_en.dart | 5 +++++ .../main_camera_controller.dart | 17 ++++++++++++++++- 8 files changed, 41 insertions(+), 5 deletions(-) diff --git a/lib/app.dart b/lib/app.dart index 7831a05..fa3a598 100644 --- a/lib/app.dart +++ b/lib/app.dart @@ -94,6 +94,7 @@ class _AppState extends State with WidgetsBindingObserver { listenable: context.watch(), builder: (BuildContext context, Widget? child) { return MaterialApp( + scaffoldMessengerKey: globalRootScaffoldMessengerKey, restorationScopeId: 'app', localizationsDelegates: const [ AppLocalizations.delegate, diff --git a/lib/globals.dart b/lib/globals.dart index 274507b..6196b6f 100644 --- a/lib/globals.dart +++ b/lib/globals.dart @@ -1,6 +1,5 @@ -import 'dart:ui'; - import 'package:camera/camera.dart'; +import 'package:flutter/material.dart'; import 'package:twonly/src/database/twonly.db.dart'; import 'package:twonly/src/model/json/userdata.dart'; import 'package:twonly/src/services/api.service.dart'; @@ -37,3 +36,6 @@ bool globalAllowErrorTrackingViaSentry = false; late String globalApplicationCacheDirectory; late String globalApplicationSupportDirectory; + +final GlobalKey globalRootScaffoldMessengerKey = + GlobalKey(); diff --git a/lib/src/localization/app_de.arb b/lib/src/localization/app_de.arb index 8cb4d76..1361dac 100644 --- a/lib/src/localization/app_de.arb +++ b/lib/src/localization/app_de.arb @@ -458,5 +458,6 @@ "couldNotVerifyUsername": "{username} konnte nicht verifiziert werden", "linkPubkeyDoesNotMatch": "Der öffentliche Schlüssel im Link stimmt nicht mit dem für diesen Kontakt gespeicherten öffentlichen Schlüssel überein. Triff die Person persönlich und scanne den QR-Code direkt!", "startWithCameraOpen": "Mit geöffneter Kamera starten", - "showImagePreviewWhenSending": "Bildvorschau bei der Auswahl von Empfängern anzeigen" + "showImagePreviewWhenSending": "Bildvorschau bei der Auswahl von Empfängern anzeigen", + "verifiedPublicKey": "Der öffentliche Schlüssel von {username} wurde überprüft und ist gültig." } \ No newline at end of file diff --git a/lib/src/localization/app_en.arb b/lib/src/localization/app_en.arb index ebc9f7f..96ce280 100644 --- a/lib/src/localization/app_en.arb +++ b/lib/src/localization/app_en.arb @@ -488,5 +488,6 @@ "couldNotVerifyUsername": "Could not verify {username}", "linkPubkeyDoesNotMatch": "The public key in the link does not match the public key stored for this contact. Try to meet your friend in person and scan the QR code directly!", "startWithCameraOpen": "Start with camera open", - "showImagePreviewWhenSending": "Display image preview when selecting recipients" + "showImagePreviewWhenSending": "Display image preview when selecting recipients", + "verifiedPublicKey": "The public key of {username} has been verified and is valid." } \ No newline at end of file diff --git a/lib/src/localization/generated/app_localizations.dart b/lib/src/localization/generated/app_localizations.dart index 8d497c3..d337892 100644 --- a/lib/src/localization/generated/app_localizations.dart +++ b/lib/src/localization/generated/app_localizations.dart @@ -2851,6 +2851,12 @@ abstract class AppLocalizations { /// In en, this message translates to: /// **'Display image preview when selecting recipients'** String get showImagePreviewWhenSending; + + /// No description provided for @verifiedPublicKey. + /// + /// In en, this message translates to: + /// **'The public key of {username} has been verified and is valid.'** + String verifiedPublicKey(Object username); } class _AppLocalizationsDelegate diff --git a/lib/src/localization/generated/app_localizations_de.dart b/lib/src/localization/generated/app_localizations_de.dart index 49ab691..61bae51 100644 --- a/lib/src/localization/generated/app_localizations_de.dart +++ b/lib/src/localization/generated/app_localizations_de.dart @@ -1577,4 +1577,9 @@ class AppLocalizationsDe extends AppLocalizations { @override String get showImagePreviewWhenSending => 'Bildvorschau bei der Auswahl von Empfängern anzeigen'; + + @override + String verifiedPublicKey(Object username) { + return 'Der öffentliche Schlüssel von $username wurde überprüft und ist gültig.'; + } } diff --git a/lib/src/localization/generated/app_localizations_en.dart b/lib/src/localization/generated/app_localizations_en.dart index 064d769..04d56d9 100644 --- a/lib/src/localization/generated/app_localizations_en.dart +++ b/lib/src/localization/generated/app_localizations_en.dart @@ -1567,4 +1567,9 @@ class AppLocalizationsEn extends AppLocalizations { @override String get showImagePreviewWhenSending => 'Display image preview when selecting recipients'; + + @override + String verifiedPublicKey(Object username) { + return 'The public key of $username has been verified and is valid.'; + } } diff --git a/lib/src/views/camera/camera_preview_components/main_camera_controller.dart b/lib/src/views/camera/camera_preview_components/main_camera_controller.dart index 63ac0b0..6c30d5a 100644 --- a/lib/src/views/camera/camera_preview_components/main_camera_controller.dart +++ b/lib/src/views/camera/camera_preview_components/main_camera_controller.dart @@ -2,14 +2,16 @@ import 'dart:io'; import 'package:camera/camera.dart'; import 'package:collection/collection.dart'; import 'package:drift/drift.dart' show Value; +import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; -import 'package:flutter/widgets.dart'; import 'package:google_mlkit_barcode_scanning/google_mlkit_barcode_scanning.dart'; import 'package:twonly/globals.dart'; +import 'package:twonly/src/database/daos/contacts.dao.dart'; import 'package:twonly/src/database/twonly.db.dart'; import 'package:twonly/src/model/protobuf/client/generated/qr.pb.dart'; import 'package:twonly/src/services/signal/session.signal.dart'; import 'package:twonly/src/utils/log.dart'; +import 'package:twonly/src/utils/misc.dart'; import 'package:twonly/src/utils/qr.dart'; import 'package:twonly/src/utils/screenshot.dart'; import 'package:twonly/src/views/camera/camera_preview_components/camera_preview_controller_view.dart'; @@ -219,6 +221,19 @@ class MainCameraController { ); } await HapticFeedback.heavyImpact(); + if (verificationOk) { + globalRootScaffoldMessengerKey.currentState?.showSnackBar( + SnackBar( + content: Text( + globalRootScaffoldMessengerKey.currentContext?.lang + .verifiedPublicKey( + getContactDisplayName(contact)) ?? + '', + ), + duration: const Duration(seconds: 6), + ), + ); + } } } } else {