This commit is contained in:
otsmr 2025-06-21 18:38:30 +02:00
parent 14811dea22
commit 1a1b02b92b
7 changed files with 120 additions and 2 deletions

View file

@ -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}"
}

View file

@ -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}"
}

View file

@ -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

View file

@ -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';
}
}

View file

@ -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';
}
}

View file

@ -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<SettingsMainView> {
));
},
),
BetterListTile(
icon: FontAwesomeIcons.shareFromSquare,
text: context.lang.inviteFriends,
onTap: () {
Navigator.push(context, MaterialPageRoute(
builder: (context) {
return ShareWithFriendsView();
},
));
},
),
],
),
);

View file

@ -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<ShareWithFriendsView> createState() => _ShareWithFriendsView();
}
class _ShareWithFriendsView extends State<ShareWithFriendsView> {
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),
),
],
),
),
);
}
}