fixed some smaller issues
Some checks are pending
Flutter analyze & test / flutter_analyze_and_test (push) Waiting to run

This commit is contained in:
otsmr 2025-12-21 17:19:40 +01:00
parent 049507cd25
commit c91c53dd8b
9 changed files with 138 additions and 92 deletions

View file

@ -207,13 +207,15 @@
"proFeature1": "✓ Unbegrenzte Medien-Datei-Uploads", "proFeature1": "✓ Unbegrenzte Medien-Datei-Uploads",
"proFeature2": "✓ 1 zusätzlicher Plus Benutzer", "proFeature2": "✓ 1 zusätzlicher Plus Benutzer",
"proFeature3": "✓ Flammen wiederherstellen", "proFeature3": "✓ Flammen wiederherstellen",
"proFeature4": "✓ Cloud-Backup verschlüsselt (coming-soon)", "proFeature4": "✓ twonly unterstützen",
"year": "Jahr", "year": "Jahr",
"month": "Monat", "month": "Monat",
"yearly": "Jährlich", "yearly": "Jährlich",
"monthly": "Monatlich", "monthly": "Monatlich",
"familyFeature1": "✓ Alles von Pro", "familyFeature1": "✓ Unbegrenzte Medien-Datei-Uploads",
"familyFeature2": "✓ 4 zusätzliche Plus Benutzer", "familyFeature2": "✓ 4 zusätzliche Plus Benutzer",
"familyFeature3": "✓ Flammen wiederherstellen",
"familyFeature4": "✓ twonly unterstützen",
"redeemUserInviteCode": "Oder löse einen twonly-Code ein.", "redeemUserInviteCode": "Oder löse einen twonly-Code ein.",
"freeFeature1": "✓ 10 Medien-Datei-Uploads pro Tag", "freeFeature1": "✓ 10 Medien-Datei-Uploads pro Tag",
"plusFeature1": "✓ Unbegrenzte Medien-Datei-Uploads", "plusFeature1": "✓ Unbegrenzte Medien-Datei-Uploads",

View file

@ -240,10 +240,12 @@
"monthly": "Monthly", "monthly": "Monthly",
"proFeature1": "✓ Unlimited media file uploads", "proFeature1": "✓ Unlimited media file uploads",
"proFeature2": "✓ 1 additional Plus user", "proFeature2": "✓ 1 additional Plus user",
"proFeature3": "✓ Cloud-Backup encrypted (coming-soon)", "proFeature3": "✓ Restore flames",
"proFeature4": "Additional features (coming-soon)", "proFeature4": "✓ Support twonly",
"familyFeature1": "✓ All from Pro", "familyFeature1": "✓ Unlimited media file uploads",
"familyFeature2": "✓ 4 additional Plus users", "familyFeature2": "✓ 4 additional Plus user",
"familyFeature3": "✓ Restore flames",
"familyFeature4": "✓ Support twonly",
"redeemUserInviteCode": "Or redeem a twonly-Code.", "redeemUserInviteCode": "Or redeem a twonly-Code.",
"redeemUserInviteCodeTitle": "Redeem twonly-Code", "redeemUserInviteCodeTitle": "Redeem twonly-Code",
"redeemUserInviteCodeSuccess": "Your plan has been successfully adjusted.", "redeemUserInviteCodeSuccess": "Your plan has been successfully adjusted.",

View file

@ -1361,27 +1361,39 @@ abstract class AppLocalizations {
/// No description provided for @proFeature3. /// No description provided for @proFeature3.
/// ///
/// In en, this message translates to: /// In en, this message translates to:
/// **'Cloud-Backup encrypted (coming-soon)'** /// **'Restore flames'**
String get proFeature3; String get proFeature3;
/// No description provided for @proFeature4. /// No description provided for @proFeature4.
/// ///
/// In en, this message translates to: /// In en, this message translates to:
/// **'Additional features (coming-soon)'** /// **'✓ Support twonly'**
String get proFeature4; String get proFeature4;
/// No description provided for @familyFeature1. /// No description provided for @familyFeature1.
/// ///
/// In en, this message translates to: /// In en, this message translates to:
/// **'All from Pro'** /// **'Unlimited media file uploads'**
String get familyFeature1; String get familyFeature1;
/// No description provided for @familyFeature2. /// No description provided for @familyFeature2.
/// ///
/// In en, this message translates to: /// In en, this message translates to:
/// **'✓ 4 additional Plus users'** /// **'✓ 4 additional Plus user'**
String get familyFeature2; String get familyFeature2;
/// No description provided for @familyFeature3.
///
/// In en, this message translates to:
/// **'✓ Restore flames'**
String get familyFeature3;
/// No description provided for @familyFeature4.
///
/// In en, this message translates to:
/// **'✓ Support twonly'**
String get familyFeature4;
/// No description provided for @redeemUserInviteCode. /// No description provided for @redeemUserInviteCode.
/// ///
/// In en, this message translates to: /// In en, this message translates to:

View file

@ -716,14 +716,20 @@ class AppLocalizationsDe extends AppLocalizations {
String get proFeature3 => '✓ Flammen wiederherstellen'; String get proFeature3 => '✓ Flammen wiederherstellen';
@override @override
String get proFeature4 => 'Cloud-Backup verschlüsselt (coming-soon)'; String get proFeature4 => 'twonly unterstützen';
@override @override
String get familyFeature1 => 'Alles von Pro'; String get familyFeature1 => 'Unbegrenzte Medien-Datei-Uploads';
@override @override
String get familyFeature2 => '✓ 4 zusätzliche Plus Benutzer'; String get familyFeature2 => '✓ 4 zusätzliche Plus Benutzer';
@override
String get familyFeature3 => '✓ Flammen wiederherstellen';
@override
String get familyFeature4 => '✓ twonly unterstützen';
@override @override
String get redeemUserInviteCode => 'Oder löse einen twonly-Code ein.'; String get redeemUserInviteCode => 'Oder löse einen twonly-Code ein.';

View file

@ -707,16 +707,22 @@ class AppLocalizationsEn extends AppLocalizations {
String get proFeature2 => '✓ 1 additional Plus user'; String get proFeature2 => '✓ 1 additional Plus user';
@override @override
String get proFeature3 => 'Cloud-Backup encrypted (coming-soon)'; String get proFeature3 => 'Restore flames';
@override @override
String get proFeature4 => 'Additional features (coming-soon)'; String get proFeature4 => '✓ Support twonly';
@override @override
String get familyFeature1 => 'All from Pro'; String get familyFeature1 => 'Unlimited media file uploads';
@override @override
String get familyFeature2 => '✓ 4 additional Plus users'; String get familyFeature2 => '✓ 4 additional Plus user';
@override
String get familyFeature3 => '✓ Restore flames';
@override
String get familyFeature4 => '✓ Support twonly';
@override @override
String get redeemUserInviteCode => 'Or redeem a twonly-Code.'; String get redeemUserInviteCode => 'Or redeem a twonly-Code.';

View file

@ -159,7 +159,7 @@ class _UserListItem extends State<GroupListItem> {
} }
Future<void> onTap() async { Future<void> onTap() async {
if (_currentMessage == null) { if (_currentMessage == null && widget.group.totalMediaCounter == 0) {
await Navigator.push( await Navigator.push(
context, context,
MaterialPageRoute( MaterialPageRoute(

View file

@ -113,6 +113,7 @@ class _MessageInputState extends State<MessageInput> {
} }
setState(() { setState(() {
_recordingState = RecordingState.recording; _recordingState = RecordingState.recording;
_currentDuration = 0;
}); });
await HapticFeedback.heavyImpact(); await HapticFeedback.heavyImpact();
final audioTmpPath = final audioTmpPath =
@ -220,82 +221,96 @@ class _MessageInputState extends State<MessageInput> {
), ),
), ),
Expanded( Expanded(
child: (_recordingState == RecordingState.recording) child: Stack(
? Row( children: [
children: [ TextField(
const Padding( controller: _textFieldController,
padding: EdgeInsets.only( focusNode: widget.textFieldFocus,
top: 14, keyboardType: TextInputType.multiline,
bottom: 14, showCursor:
left: 12, _recordingState != RecordingState.recording,
right: 8, maxLines: 4,
), minLines: 1,
child: FaIcon( onChanged: (value) async {
FontAwesomeIcons.microphone, setState(() {});
size: 20, await twonlyDB.groupsDao.updateGroup(
color: Colors.red, widget.group.groupId,
), GroupsCompanion(
draftMessage:
Value(_textFieldController.text),
), ),
const SizedBox(width: 10), );
Text( },
formatMsToMinSec( onSubmitted: (_) {
_currentDuration, _sendMessage();
), },
style: const TextStyle( style: const TextStyle(fontSize: 17),
color: Colors.white, decoration: InputDecoration(
fontSize: 12, hintText: context.lang.chatListDetailInput,
), contentPadding: EdgeInsets.zero,
), border: InputBorder.none,
if (!_audioRecordingLock) ...[ ),
SizedBox( ),
width: (100 - _cancelSlideOffset) % 101, if (_recordingState == RecordingState.recording)
), Container(
Text( decoration: BoxDecoration(
context.lang.voiceMessageSlideToCancel, color: context.color.surfaceContainer,
), borderRadius: BorderRadius.circular(20),
] else ...[ ),
Expanded( child: Row(
child: Container(), children: [
), const Padding(
GestureDetector( padding: EdgeInsets.only(
onTap: _cancelAudioRecording, top: 14,
child: Text( bottom: 14,
context.lang.voiceMessageCancel, left: 12,
style: const TextStyle( right: 8,
color: Colors.red, ),
), child: FaIcon(
FontAwesomeIcons.microphone,
size: 20,
color: Colors.red,
), ),
), ),
const SizedBox(width: 20), const SizedBox(width: 10),
], Text(
], formatMsToMinSec(
) _currentDuration,
: TextField( ),
controller: _textFieldController, style: TextStyle(
focusNode: widget.textFieldFocus, color: isDarkMode(context)
keyboardType: TextInputType.multiline, ? Colors.white
maxLines: 4, : Colors.black,
minLines: 1, fontSize: 12,
onChanged: (value) async { ),
setState(() {});
await twonlyDB.groupsDao.updateGroup(
widget.group.groupId,
GroupsCompanion(
draftMessage:
Value(_textFieldController.text),
), ),
); if (!_audioRecordingLock) ...[
}, SizedBox(
onSubmitted: (_) { width: (100 - _cancelSlideOffset) % 101,
_sendMessage(); ),
}, Text(
style: const TextStyle(fontSize: 17), context.lang.voiceMessageSlideToCancel,
decoration: InputDecoration( ),
hintText: context.lang.chatListDetailInput, ] else ...[
contentPadding: EdgeInsets.zero, Expanded(
border: InputBorder.none, child: Container(),
),
GestureDetector(
onTap: _cancelAudioRecording,
child: Text(
context.lang.voiceMessageCancel,
style: const TextStyle(
color: Colors.red,
),
),
),
const SizedBox(width: 20),
],
],
), ),
), ),
],
),
), ),
if (_textFieldController.text == '') if (_textFieldController.text == '')
GestureDetector( GestureDetector(
@ -355,7 +370,9 @@ class _MessageInputState extends State<MessageInput> {
height: 60, height: 60,
decoration: BoxDecoration( decoration: BoxDecoration(
borderRadius: BorderRadius.circular(90), borderRadius: BorderRadius.circular(90),
color: Colors.black, color: isDarkMode(context)
? Colors.black
: Colors.white,
), ),
child: const Center( child: const Center(
child: Column( child: Column(

View file

@ -227,14 +227,15 @@ class _PlanCardState extends State<PlanCard> {
context.lang.proFeature1, context.lang.proFeature1,
context.lang.proFeature2, context.lang.proFeature2,
context.lang.proFeature3, context.lang.proFeature3,
context.lang.proFeature4,
// context.lang.proFeature4, // context.lang.proFeature4,
]; ];
case 'Family': case 'Family':
features = [ features = [
context.lang.proFeature1, context.lang.familyFeature1,
context.lang.familyFeature2, context.lang.familyFeature2,
context.lang.proFeature3, context.lang.familyFeature3,
// context.lang.proFeature4, context.lang.familyFeature4,
]; ];
default: default:
} }

View file

@ -3,7 +3,7 @@ description: "twonly, a privacy-friendly way to connect with friends through sec
publish_to: 'none' publish_to: 'none'
version: 0.0.77+77 version: 0.0.78+78
environment: environment:
sdk: ^3.6.0 sdk: ^3.6.0