From 1a1b02b92b66c5282060bb0510f398b3dac87621 Mon Sep 17 00:00:00 2001 From: otsmr Date: Sat, 21 Jun 2025 18:38:30 +0200 Subject: [PATCH] fix #216 --- lib/src/localization/app_de.arb | 5 +- lib/src/localization/app_en.arb | 5 +- .../generated/app_localizations.dart | 18 ++++++ .../generated/app_localizations_de.dart | 11 ++++ .../generated/app_localizations_en.dart | 11 ++++ .../views/settings/settings_main.view.dart | 12 ++++ .../settings/share_with_friends.view.dart | 60 +++++++++++++++++++ 7 files changed, 120 insertions(+), 2 deletions(-) create mode 100644 lib/src/views/settings/share_with_friends.view.dart diff --git a/lib/src/localization/app_de.arb b/lib/src/localization/app_de.arb index 240795d..1fb4a30 100644 --- a/lib/src/localization/app_de.arb +++ b/lib/src/localization/app_de.arb @@ -295,5 +295,8 @@ "backupOwnServerDesc": "Speichere dein twonly Safe-Backups auf einem Server deiner Wahl.", "backupUseOwnServer": "Server verwenden", "backupResetServer": "Standardserver verwenden", - "backupTwonlySaveNow": "Jetzt speichern" + "backupTwonlySaveNow": "Jetzt speichern", + "inviteFriends": "Freunde einladen", + "inviteFriendsShareBtn": "Teilen", + "inviteFriendsShareText": "Wechseln wir zu twonly: {url}" } \ No newline at end of file diff --git a/lib/src/localization/app_en.arb b/lib/src/localization/app_en.arb index 222d724..5fa6e88 100644 --- a/lib/src/localization/app_en.arb +++ b/lib/src/localization/app_en.arb @@ -452,5 +452,8 @@ "backupTwonlySaveNow": "Save now", "twonlySafeRecoverTitle": "Recovery", "twonlySafeRecoverDesc": "If you have created a backup with twonly Safe, you can restore it here.", - "twonlySafeRecoverBtn": "Restore backup" + "twonlySafeRecoverBtn": "Restore backup", + "inviteFriends": "Invite your friends", + "inviteFriendsShareBtn": "Share", + "inviteFriendsShareText": "Let's switch to twonly: {url}" } \ 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 e1363bf..64ca280 100644 --- a/lib/src/localization/generated/app_localizations.dart +++ b/lib/src/localization/generated/app_localizations.dart @@ -1813,6 +1813,24 @@ abstract class AppLocalizations { /// In en, this message translates to: /// **'Restore backup'** String get twonlySafeRecoverBtn; + + /// No description provided for @inviteFriends. + /// + /// In en, this message translates to: + /// **'Invite your friends'** + String get inviteFriends; + + /// No description provided for @inviteFriendsShareBtn. + /// + /// In en, this message translates to: + /// **'Share'** + String get inviteFriendsShareBtn; + + /// No description provided for @inviteFriendsShareText. + /// + /// In en, this message translates to: + /// **'Let\'s switch to twonly: {url}'** + String inviteFriendsShareText(Object url); } class _AppLocalizationsDelegate diff --git a/lib/src/localization/generated/app_localizations_de.dart b/lib/src/localization/generated/app_localizations_de.dart index c10af71..aa28745 100644 --- a/lib/src/localization/generated/app_localizations_de.dart +++ b/lib/src/localization/generated/app_localizations_de.dart @@ -963,4 +963,15 @@ class AppLocalizationsDe extends AppLocalizations { @override String get twonlySafeRecoverBtn => 'Restore backup'; + + @override + String get inviteFriends => 'Freunde einladen'; + + @override + String get inviteFriendsShareBtn => 'Teilen'; + + @override + String inviteFriendsShareText(Object url) { + return 'Wechseln wir zu twonly: $url'; + } } diff --git a/lib/src/localization/generated/app_localizations_en.dart b/lib/src/localization/generated/app_localizations_en.dart index 39f2f36..af0d8ca 100644 --- a/lib/src/localization/generated/app_localizations_en.dart +++ b/lib/src/localization/generated/app_localizations_en.dart @@ -957,4 +957,15 @@ class AppLocalizationsEn extends AppLocalizations { @override String get twonlySafeRecoverBtn => 'Restore backup'; + + @override + String get inviteFriends => 'Invite your friends'; + + @override + String get inviteFriendsShareBtn => 'Share'; + + @override + String inviteFriendsShareText(Object url) { + return 'Let\'s switch to twonly: $url'; + } } diff --git a/lib/src/views/settings/settings_main.view.dart b/lib/src/views/settings/settings_main.view.dart index 72e4bc8..9b4b27c 100644 --- a/lib/src/views/settings/settings_main.view.dart +++ b/lib/src/views/settings/settings_main.view.dart @@ -14,6 +14,7 @@ import 'package:twonly/src/views/settings/notification.view.dart'; import 'package:twonly/src/views/settings/profile/profile.view.dart'; import 'package:twonly/src/views/settings/help/help.view.dart'; import 'package:twonly/src/views/settings/privacy.view.dart'; +import 'package:twonly/src/views/settings/share_with_friends.view.dart'; import 'package:twonly/src/views/settings/subscription/subscription.view.dart'; class SettingsMainView extends StatefulWidget { @@ -195,6 +196,17 @@ class _SettingsMainViewState extends State { )); }, ), + BetterListTile( + icon: FontAwesomeIcons.shareFromSquare, + text: context.lang.inviteFriends, + onTap: () { + Navigator.push(context, MaterialPageRoute( + builder: (context) { + return ShareWithFriendsView(); + }, + )); + }, + ), ], ), ); diff --git a/lib/src/views/settings/share_with_friends.view.dart b/lib/src/views/settings/share_with_friends.view.dart new file mode 100644 index 0000000..9ffd07c --- /dev/null +++ b/lib/src/views/settings/share_with_friends.view.dart @@ -0,0 +1,60 @@ +import 'package:flutter/material.dart'; +import 'package:font_awesome_flutter/font_awesome_flutter.dart'; +import 'package:share_plus/share_plus.dart'; +import 'package:twonly/src/utils/misc.dart'; + +class ShareWithFriendsView extends StatefulWidget { + const ShareWithFriendsView({super.key}); + + @override + State createState() => _ShareWithFriendsView(); +} + +class _ShareWithFriendsView extends State { + final TextEditingController _controller = TextEditingController(); + + @override + void initState() { + super.initState(); + WidgetsBinding.instance.addPostFrameCallback((_) { + _controller.text = + context.lang.inviteFriendsShareText("https://twonly.eu/install"); + }); + } + + void _shareText() async { + final textToShare = _controller.text; + final params = ShareParams( + text: textToShare, + ); + await SharePlus.instance.share(params); + } + + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: AppBar( + title: Text(context.lang.inviteFriends), + ), + body: Padding( + padding: const EdgeInsets.all(16.0), + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + TextField( + controller: _controller, + style: TextStyle(fontSize: 14.0), + decoration: InputDecoration(), + ), + SizedBox(height: 16.0), + FilledButton.icon( + onPressed: _shareText, + icon: FaIcon(FontAwesomeIcons.shareFromSquare), + label: Text(context.lang.inviteFriendsShareBtn), + ), + ], + ), + ), + ); + } +}