allow sharing proifile via qrcode #536
|
@ -1,6 +1,8 @@
|
||||||
{
|
{
|
||||||
"@@locale": "cy",
|
"@@locale": "cy",
|
||||||
"@@last_modified": "2022-09-09T21:46:36+02:00",
|
"@@last_modified": "2022-09-09T22:56:43+02:00",
|
||||||
|
"shareMenuQRCode": "Show QR Code",
|
||||||
|
"shareProfileMenuTooltop": "Share profile via...",
|
||||||
"acquiredTicketsFromServer": "Antispam Challenge Complete",
|
"acquiredTicketsFromServer": "Antispam Challenge Complete",
|
||||||
"acquiringTicketsFromServer": "Performing Antispam Challenge",
|
"acquiringTicketsFromServer": "Performing Antispam Challenge",
|
||||||
"errorDownloadDirectoryDoesNotExist": "Filesharing cannot be enabled because the Download Folder has not been set, or is set to a folder that does not exist.",
|
"errorDownloadDirectoryDoesNotExist": "Filesharing cannot be enabled because the Download Folder has not been set, or is set to a folder that does not exist.",
|
||||||
|
|
|
@ -1,6 +1,8 @@
|
||||||
{
|
{
|
||||||
"@@locale": "da",
|
"@@locale": "da",
|
||||||
"@@last_modified": "2022-09-09T21:46:36+02:00",
|
"@@last_modified": "2022-09-09T22:56:43+02:00",
|
||||||
|
"shareMenuQRCode": "Show QR Code",
|
||||||
|
"shareProfileMenuTooltop": "Share profile via...",
|
||||||
"acquiredTicketsFromServer": "Antispam Challenge Complete",
|
"acquiredTicketsFromServer": "Antispam Challenge Complete",
|
||||||
"acquiringTicketsFromServer": "Performing Antispam Challenge",
|
"acquiringTicketsFromServer": "Performing Antispam Challenge",
|
||||||
"errorDownloadDirectoryDoesNotExist": "Filesharing cannot be enabled because the Download Folder has not been set, or is set to a folder that does not exist.",
|
"errorDownloadDirectoryDoesNotExist": "Filesharing cannot be enabled because the Download Folder has not been set, or is set to a folder that does not exist.",
|
||||||
|
|
|
@ -1,6 +1,8 @@
|
||||||
{
|
{
|
||||||
"@@locale": "de",
|
"@@locale": "de",
|
||||||
"@@last_modified": "2022-09-09T21:46:36+02:00",
|
"@@last_modified": "2022-09-09T22:56:43+02:00",
|
||||||
|
"shareMenuQRCode": "Show QR Code",
|
||||||
|
"shareProfileMenuTooltop": "Share profile via...",
|
||||||
"acquiredTicketsFromServer": "Antispam Challenge Complete",
|
"acquiredTicketsFromServer": "Antispam Challenge Complete",
|
||||||
"acquiringTicketsFromServer": "Performing Antispam Challenge",
|
"acquiringTicketsFromServer": "Performing Antispam Challenge",
|
||||||
"localeIt": "Italienisch \/ Italiano",
|
"localeIt": "Italienisch \/ Italiano",
|
||||||
|
|
|
@ -1,6 +1,8 @@
|
||||||
{
|
{
|
||||||
"@@locale": "el",
|
"@@locale": "el",
|
||||||
"@@last_modified": "2022-09-09T21:46:36+02:00",
|
"@@last_modified": "2022-09-09T22:56:43+02:00",
|
||||||
|
"shareMenuQRCode": "Show QR Code",
|
||||||
|
"shareProfileMenuTooltop": "Share profile via...",
|
||||||
"acquiredTicketsFromServer": "Antispam Challenge Complete",
|
"acquiredTicketsFromServer": "Antispam Challenge Complete",
|
||||||
"acquiringTicketsFromServer": "Performing Antispam Challenge",
|
"acquiringTicketsFromServer": "Performing Antispam Challenge",
|
||||||
"errorDownloadDirectoryDoesNotExist": "Filesharing cannot be enabled because the Download Folder has not been set, or is set to a folder that does not exist.",
|
"errorDownloadDirectoryDoesNotExist": "Filesharing cannot be enabled because the Download Folder has not been set, or is set to a folder that does not exist.",
|
||||||
|
|
|
@ -1,6 +1,8 @@
|
||||||
{
|
{
|
||||||
"@@locale": "en",
|
"@@locale": "en",
|
||||||
"@@last_modified": "2022-09-09T21:46:36+02:00",
|
"@@last_modified": "2022-09-09T22:56:43+02:00",
|
||||||
|
"shareMenuQRCode": "Show QR Code",
|
||||||
|
"shareProfileMenuTooltop": "Share profile via...",
|
||||||
"acquiredTicketsFromServer": "Antispam Challenge Complete",
|
"acquiredTicketsFromServer": "Antispam Challenge Complete",
|
||||||
"acquiringTicketsFromServer": "Performing Antispam Challenge",
|
"acquiringTicketsFromServer": "Performing Antispam Challenge",
|
||||||
"errorDownloadDirectoryDoesNotExist": "Filesharing cannot be enabled because the Download Folder has not been set, or is set to a folder that does not exist.",
|
"errorDownloadDirectoryDoesNotExist": "Filesharing cannot be enabled because the Download Folder has not been set, or is set to a folder that does not exist.",
|
||||||
|
|
|
@ -1,6 +1,8 @@
|
||||||
{
|
{
|
||||||
"@@locale": "es",
|
"@@locale": "es",
|
||||||
"@@last_modified": "2022-09-09T21:46:36+02:00",
|
"@@last_modified": "2022-09-09T22:56:43+02:00",
|
||||||
|
"shareMenuQRCode": "Show QR Code",
|
||||||
|
"shareProfileMenuTooltop": "Share profile via...",
|
||||||
"tooltipPinConversation": "Fija la conversación en la parte superior de \"Conversaciones\"",
|
"tooltipPinConversation": "Fija la conversación en la parte superior de \"Conversaciones\"",
|
||||||
"errorDownloadDirectoryDoesNotExist": "No se puede habilitar el uso compartido de archivos porque la carpeta de descarga no se ha configurado o se configuró en una carpeta que no existe.",
|
"errorDownloadDirectoryDoesNotExist": "No se puede habilitar el uso compartido de archivos porque la carpeta de descarga no se ha configurado o se configuró en una carpeta que no existe.",
|
||||||
"acquiringTicketsFromServer": "Realizando Desafío Antispam",
|
"acquiringTicketsFromServer": "Realizando Desafío Antispam",
|
||||||
|
|
|
@ -1,6 +1,8 @@
|
||||||
{
|
{
|
||||||
"@@locale": "fr",
|
"@@locale": "fr",
|
||||||
"@@last_modified": "2022-09-09T21:46:36+02:00",
|
"@@last_modified": "2022-09-09T22:56:43+02:00",
|
||||||
|
"shareMenuQRCode": "Show QR Code",
|
||||||
|
"shareProfileMenuTooltop": "Share profile via...",
|
||||||
"acquiredTicketsFromServer": "Antispam Challenge Complete",
|
"acquiredTicketsFromServer": "Antispam Challenge Complete",
|
||||||
"acquiringTicketsFromServer": "Performing Antispam Challenge",
|
"acquiringTicketsFromServer": "Performing Antispam Challenge",
|
||||||
"errorDownloadDirectoryDoesNotExist": "Le partage de fichiers ne peut pas être activé car le dossier de téléchargement n'a pas été défini ou est défini sur un dossier qui n'existe pas.",
|
"errorDownloadDirectoryDoesNotExist": "Le partage de fichiers ne peut pas être activé car le dossier de téléchargement n'a pas été défini ou est défini sur un dossier qui n'existe pas.",
|
||||||
|
|
|
@ -1,6 +1,8 @@
|
||||||
{
|
{
|
||||||
"@@locale": "it",
|
"@@locale": "it",
|
||||||
"@@last_modified": "2022-09-09T21:46:36+02:00",
|
"@@last_modified": "2022-09-09T22:56:43+02:00",
|
||||||
|
"shareMenuQRCode": "Show QR Code",
|
||||||
|
"shareProfileMenuTooltop": "Share profile via...",
|
||||||
"acquiredTicketsFromServer": "Antispam Challenge Complete",
|
"acquiredTicketsFromServer": "Antispam Challenge Complete",
|
||||||
"acquiringTicketsFromServer": "Performing Antispam Challenge",
|
"acquiringTicketsFromServer": "Performing Antispam Challenge",
|
||||||
"errorDownloadDirectoryDoesNotExist": "Filesharing cannot be enabled because the Download Folder has not been set, or is set to a folder that does not exist.",
|
"errorDownloadDirectoryDoesNotExist": "Filesharing cannot be enabled because the Download Folder has not been set, or is set to a folder that does not exist.",
|
||||||
|
|
|
@ -1,6 +1,8 @@
|
||||||
{
|
{
|
||||||
"@@locale": "lb",
|
"@@locale": "lb",
|
||||||
"@@last_modified": "2022-09-09T21:46:36+02:00",
|
"@@last_modified": "2022-09-09T22:56:43+02:00",
|
||||||
|
"shareMenuQRCode": "Show QR Code",
|
||||||
|
"shareProfileMenuTooltop": "Share profile via...",
|
||||||
"acquiredTicketsFromServer": "Antispam Challenge Complete",
|
"acquiredTicketsFromServer": "Antispam Challenge Complete",
|
||||||
"acquiringTicketsFromServer": "Performing Antispam Challenge",
|
"acquiringTicketsFromServer": "Performing Antispam Challenge",
|
||||||
"errorDownloadDirectoryDoesNotExist": "Filesharing cannot be enabled because the Download Folder has not been set, or is set to a folder that does not exist.",
|
"errorDownloadDirectoryDoesNotExist": "Filesharing cannot be enabled because the Download Folder has not been set, or is set to a folder that does not exist.",
|
||||||
|
|
|
@ -1,6 +1,8 @@
|
||||||
{
|
{
|
||||||
"@@locale": "no",
|
"@@locale": "no",
|
||||||
"@@last_modified": "2022-09-09T21:46:36+02:00",
|
"@@last_modified": "2022-09-09T22:56:43+02:00",
|
||||||
|
"shareMenuQRCode": "Show QR Code",
|
||||||
|
"shareProfileMenuTooltop": "Share profile via...",
|
||||||
"acquiredTicketsFromServer": "Antispam Challenge Complete",
|
"acquiredTicketsFromServer": "Antispam Challenge Complete",
|
||||||
"acquiringTicketsFromServer": "Performing Antispam Challenge",
|
"acquiringTicketsFromServer": "Performing Antispam Challenge",
|
||||||
"errorDownloadDirectoryDoesNotExist": "Filesharing cannot be enabled because the Download Folder has not been set, or is set to a folder that does not exist.",
|
"errorDownloadDirectoryDoesNotExist": "Filesharing cannot be enabled because the Download Folder has not been set, or is set to a folder that does not exist.",
|
||||||
|
|
|
@ -1,6 +1,8 @@
|
||||||
{
|
{
|
||||||
"@@locale": "pl",
|
"@@locale": "pl",
|
||||||
"@@last_modified": "2022-09-09T21:46:36+02:00",
|
"@@last_modified": "2022-09-09T22:56:43+02:00",
|
||||||
|
"shareMenuQRCode": "Show QR Code",
|
||||||
|
"shareProfileMenuTooltop": "Share profile via...",
|
||||||
"acquiredTicketsFromServer": "Antispam Challenge Complete",
|
"acquiredTicketsFromServer": "Antispam Challenge Complete",
|
||||||
"acquiringTicketsFromServer": "Performing Antispam Challenge",
|
"acquiringTicketsFromServer": "Performing Antispam Challenge",
|
||||||
"errorDownloadDirectoryDoesNotExist": "Filesharing cannot be enabled because the Download Folder has not been set, or is set to a folder that does not exist.",
|
"errorDownloadDirectoryDoesNotExist": "Filesharing cannot be enabled because the Download Folder has not been set, or is set to a folder that does not exist.",
|
||||||
|
|
|
@ -1,6 +1,8 @@
|
||||||
{
|
{
|
||||||
"@@locale": "pt",
|
"@@locale": "pt",
|
||||||
"@@last_modified": "2022-09-09T21:46:36+02:00",
|
"@@last_modified": "2022-09-09T22:56:43+02:00",
|
||||||
|
"shareMenuQRCode": "Show QR Code",
|
||||||
|
"shareProfileMenuTooltop": "Share profile via...",
|
||||||
"acquiredTicketsFromServer": "Antispam Challenge Complete",
|
"acquiredTicketsFromServer": "Antispam Challenge Complete",
|
||||||
"acquiringTicketsFromServer": "Performing Antispam Challenge",
|
"acquiringTicketsFromServer": "Performing Antispam Challenge",
|
||||||
"errorDownloadDirectoryDoesNotExist": "Filesharing cannot be enabled because the Download Folder has not been set, or is set to a folder that does not exist.",
|
"errorDownloadDirectoryDoesNotExist": "Filesharing cannot be enabled because the Download Folder has not been set, or is set to a folder that does not exist.",
|
||||||
|
|
|
@ -1,6 +1,8 @@
|
||||||
{
|
{
|
||||||
"@@locale": "ro",
|
"@@locale": "ro",
|
||||||
"@@last_modified": "2022-09-09T21:46:36+02:00",
|
"@@last_modified": "2022-09-09T22:56:43+02:00",
|
||||||
|
"shareMenuQRCode": "Show QR Code",
|
||||||
|
"shareProfileMenuTooltop": "Share profile via...",
|
||||||
"acquiredTicketsFromServer": "Antispam Challenge Complete",
|
"acquiredTicketsFromServer": "Antispam Challenge Complete",
|
||||||
"acquiringTicketsFromServer": "Performing Antispam Challenge",
|
"acquiringTicketsFromServer": "Performing Antispam Challenge",
|
||||||
"errorDownloadDirectoryDoesNotExist": "Filesharing cannot be enabled because the Download Folder has not been set, or is set to a folder that does not exist.",
|
"errorDownloadDirectoryDoesNotExist": "Filesharing cannot be enabled because the Download Folder has not been set, or is set to a folder that does not exist.",
|
||||||
|
|
|
@ -1,6 +1,8 @@
|
||||||
{
|
{
|
||||||
"@@locale": "ru",
|
"@@locale": "ru",
|
||||||
"@@last_modified": "2022-09-09T21:46:36+02:00",
|
"@@last_modified": "2022-09-09T22:56:43+02:00",
|
||||||
|
"shareMenuQRCode": "Show QR Code",
|
||||||
|
"shareProfileMenuTooltop": "Share profile via...",
|
||||||
"acquiredTicketsFromServer": "Antispam Challenge Complete",
|
"acquiredTicketsFromServer": "Antispam Challenge Complete",
|
||||||
"acquiringTicketsFromServer": "Performing Antispam Challenge",
|
"acquiringTicketsFromServer": "Performing Antispam Challenge",
|
||||||
"errorDownloadDirectoryDoesNotExist": "Filesharing cannot be enabled because the Download Folder has not been set, or is set to a folder that does not exist.",
|
"errorDownloadDirectoryDoesNotExist": "Filesharing cannot be enabled because the Download Folder has not been set, or is set to a folder that does not exist.",
|
||||||
|
|
|
@ -19,9 +19,12 @@ import '../main.dart';
|
||||||
import '../settings.dart';
|
import '../settings.dart';
|
||||||
import 'addcontactview.dart';
|
import 'addcontactview.dart';
|
||||||
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
|
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
|
||||||
|
import 'package:qr_flutter/qr_flutter.dart';
|
||||||
|
|
||||||
import 'messageview.dart';
|
import 'messageview.dart';
|
||||||
|
|
||||||
|
enum ShareMenu { copyCode, qrcode }
|
||||||
|
|
||||||
class ContactsView extends StatefulWidget {
|
class ContactsView extends StatefulWidget {
|
||||||
const ContactsView({Key? key}) : super(key: key);
|
const ContactsView({Key? key}) : super(key: key);
|
||||||
|
|
||||||
|
@ -163,16 +166,38 @@ class _ContactsViewState extends State<ContactsView> {
|
||||||
actions.add(Tooltip(message: AppLocalizations.of(context)!.blockUnknownConnectionsEnabledDescription, child: Icon(CwtchIcons.block_unknown)));
|
actions.add(Tooltip(message: AppLocalizations.of(context)!.blockUnknownConnectionsEnabledDescription, child: Icon(CwtchIcons.block_unknown)));
|
||||||
}
|
}
|
||||||
|
|
||||||
// Copy profile onion
|
actions.add(PopupMenuButton<ShareMenu>(
|
||||||
actions.add(IconButton(
|
|
||||||
icon: Icon(CwtchIcons.address_copy_2),
|
icon: Icon(CwtchIcons.address_copy_2),
|
||||||
tooltip: AppLocalizations.of(context)!.copyAddress,
|
tooltip: AppLocalizations.of(context)!.shareProfileMenuTooltop,
|
||||||
splashRadius: Material.defaultSplashRadius / 2,
|
splashRadius: Material.defaultSplashRadius / 2,
|
||||||
onPressed: () {
|
onSelected: (ShareMenu item) {
|
||||||
Clipboard.setData(new ClipboardData(text: Provider.of<ProfileInfoState>(context, listen: false).onion));
|
switch(item) {
|
||||||
final snackBar = SnackBar(content: Text(AppLocalizations.of(context)!.copiedToClipboardNotification));
|
case ShareMenu.copyCode:
|
||||||
ScaffoldMessenger.of(context).showSnackBar(snackBar);
|
{
|
||||||
}));
|
Clipboard.setData(new ClipboardData(text: Provider
|
||||||
|
.of<ProfileInfoState>(context, listen: false)
|
||||||
|
.onion));
|
||||||
|
final snackBar = SnackBar(content: Text(AppLocalizations.of(context)!.copiedToClipboardNotification));
|
||||||
|
ScaffoldMessenger.of(context).showSnackBar(snackBar);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case ShareMenu.qrcode: {
|
||||||
|
_showQRCode("cwtch:" + Provider.of<ProfileInfoState>(context, listen: false).onion);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
itemBuilder: (BuildContext context) => <PopupMenuEntry<ShareMenu>>[
|
||||||
|
PopupMenuItem<ShareMenu>(
|
||||||
|
value: ShareMenu.copyCode,
|
||||||
|
child: Text(AppLocalizations.of(context)!.copyAddress),
|
||||||
|
),
|
||||||
|
PopupMenuItem<ShareMenu>(
|
||||||
|
value: ShareMenu.qrcode,
|
||||||
|
child: Text(AppLocalizations.of(context)!.shareMenuQRCode),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
));
|
||||||
|
|
||||||
// Manage known Servers
|
// Manage known Servers
|
||||||
if (Provider.of<Settings>(context, listen: false).isExperimentEnabled(TapirGroupsExperiment) || Provider.of<Settings>(context, listen: false).isExperimentEnabled(ServerManagementExperiment)) {
|
if (Provider.of<Settings>(context, listen: false).isExperimentEnabled(TapirGroupsExperiment) || Provider.of<Settings>(context, listen: false).isExperimentEnabled(ServerManagementExperiment)) {
|
||||||
|
@ -381,4 +406,25 @@ class _ContactsViewState extends State<ContactsView> {
|
||||||
)));
|
)));
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void _showQRCode(String profile_code) {
|
||||||
|
showModalBottomSheet<dynamic>(
|
||||||
|
context: context,
|
||||||
|
builder: (BuildContext context) {
|
||||||
|
return Wrap( children: <Widget>[
|
||||||
|
Center( child:
|
||||||
|
QrImage(
|
||||||
|
data: profile_code,
|
||||||
|
version: QrVersions.auto,
|
||||||
|
size: 400.0,
|
||||||
|
backgroundColor: Provider.of<Settings>(context).theme.backgroundPaneColor,
|
||||||
|
foregroundColor: Provider.of<Settings>(context).theme.mainTextColor,
|
||||||
|
gapless: false,
|
||||||
|
),
|
||||||
|
)]);
|
||||||
|
|
||||||
|
},
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
14
pubspec.lock
14
pubspec.lock
|
@ -617,6 +617,20 @@ packages:
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.2.0"
|
version: "1.2.0"
|
||||||
|
qr:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: qr
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "2.1.0"
|
||||||
|
qr_flutter:
|
||||||
|
dependency: "direct main"
|
||||||
|
description:
|
||||||
|
name: qr_flutter
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "4.0.0"
|
||||||
screen_retriever:
|
screen_retriever:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
|
|
|
@ -15,7 +15,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev
|
||||||
# In iOS, build-name is used as CFBundleShortVersionString while build-number used as CFBundleVersion.
|
# In iOS, build-name is used as CFBundleShortVersionString while build-number used as CFBundleVersion.
|
||||||
# Read more about iOS versioning at
|
# Read more about iOS versioning at
|
||||||
# https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html
|
# https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html
|
||||||
version: 1.8.0+34
|
version: 1.9.0+35
|
||||||
|
|
||||||
environment:
|
environment:
|
||||||
sdk: ">=2.15.0 <3.0.0"
|
sdk: ">=2.15.0 <3.0.0"
|
||||||
|
@ -46,6 +46,7 @@ dependencies:
|
||||||
win_toast: ^0.0.2
|
win_toast: ^0.0.2
|
||||||
flutter_local_notifications: ^9.6.1
|
flutter_local_notifications: ^9.6.1
|
||||||
desktop_notifications: ^0.6.3
|
desktop_notifications: ^0.6.3
|
||||||
|
qr_flutter: ^4.0.0
|
||||||
|
|
||||||
dev_dependencies:
|
dev_dependencies:
|
||||||
msix: ^3.6.2
|
msix: ^3.6.2
|
||||||
|
|
Loading…
Reference in New Issue