mirror of
https://github.com/twonlyapp/twonly-app.git
synced 2026-01-15 06:28:41 +00:00
fixed some smaller issues
Some checks are pending
Flutter analyze & test / flutter_analyze_and_test (push) Waiting to run
Some checks are pending
Flutter analyze & test / flutter_analyze_and_test (push) Waiting to run
This commit is contained in:
parent
049507cd25
commit
c91c53dd8b
9 changed files with 138 additions and 92 deletions
|
|
@ -207,13 +207,15 @@
|
|||
"proFeature1": "✓ Unbegrenzte Medien-Datei-Uploads",
|
||||
"proFeature2": "✓ 1 zusätzlicher Plus Benutzer",
|
||||
"proFeature3": "✓ Flammen wiederherstellen",
|
||||
"proFeature4": "✓ Cloud-Backup verschlüsselt (coming-soon)",
|
||||
"proFeature4": "✓ twonly unterstützen",
|
||||
"year": "Jahr",
|
||||
"month": "Monat",
|
||||
"yearly": "Jährlich",
|
||||
"monthly": "Monatlich",
|
||||
"familyFeature1": "✓ Alles von Pro",
|
||||
"familyFeature1": "✓ Unbegrenzte Medien-Datei-Uploads",
|
||||
"familyFeature2": "✓ 4 zusätzliche Plus Benutzer",
|
||||
"familyFeature3": "✓ Flammen wiederherstellen",
|
||||
"familyFeature4": "✓ twonly unterstützen",
|
||||
"redeemUserInviteCode": "Oder löse einen twonly-Code ein.",
|
||||
"freeFeature1": "✓ 10 Medien-Datei-Uploads pro Tag",
|
||||
"plusFeature1": "✓ Unbegrenzte Medien-Datei-Uploads",
|
||||
|
|
|
|||
|
|
@ -240,10 +240,12 @@
|
|||
"monthly": "Monthly",
|
||||
"proFeature1": "✓ Unlimited media file uploads",
|
||||
"proFeature2": "✓ 1 additional Plus user",
|
||||
"proFeature3": "✓ Cloud-Backup encrypted (coming-soon)",
|
||||
"proFeature4": "Additional features (coming-soon)",
|
||||
"familyFeature1": "✓ All from Pro",
|
||||
"familyFeature2": "✓ 4 additional Plus users",
|
||||
"proFeature3": "✓ Restore flames",
|
||||
"proFeature4": "✓ Support twonly",
|
||||
"familyFeature1": "✓ Unlimited media file uploads",
|
||||
"familyFeature2": "✓ 4 additional Plus user",
|
||||
"familyFeature3": "✓ Restore flames",
|
||||
"familyFeature4": "✓ Support twonly",
|
||||
"redeemUserInviteCode": "Or redeem a twonly-Code.",
|
||||
"redeemUserInviteCodeTitle": "Redeem twonly-Code",
|
||||
"redeemUserInviteCodeSuccess": "Your plan has been successfully adjusted.",
|
||||
|
|
|
|||
|
|
@ -1361,27 +1361,39 @@ abstract class AppLocalizations {
|
|||
/// No description provided for @proFeature3.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'✓ Cloud-Backup encrypted (coming-soon)'**
|
||||
/// **'✓ Restore flames'**
|
||||
String get proFeature3;
|
||||
|
||||
/// No description provided for @proFeature4.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Additional features (coming-soon)'**
|
||||
/// **'✓ Support twonly'**
|
||||
String get proFeature4;
|
||||
|
||||
/// No description provided for @familyFeature1.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'✓ All from Pro'**
|
||||
/// **'✓ Unlimited media file uploads'**
|
||||
String get familyFeature1;
|
||||
|
||||
/// No description provided for @familyFeature2.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'✓ 4 additional Plus users'**
|
||||
/// **'✓ 4 additional Plus user'**
|
||||
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.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
|
|
|
|||
|
|
@ -716,14 +716,20 @@ class AppLocalizationsDe extends AppLocalizations {
|
|||
String get proFeature3 => '✓ Flammen wiederherstellen';
|
||||
|
||||
@override
|
||||
String get proFeature4 => '✓ Cloud-Backup verschlüsselt (coming-soon)';
|
||||
String get proFeature4 => '✓ twonly unterstützen';
|
||||
|
||||
@override
|
||||
String get familyFeature1 => '✓ Alles von Pro';
|
||||
String get familyFeature1 => '✓ Unbegrenzte Medien-Datei-Uploads';
|
||||
|
||||
@override
|
||||
String get familyFeature2 => '✓ 4 zusätzliche Plus Benutzer';
|
||||
|
||||
@override
|
||||
String get familyFeature3 => '✓ Flammen wiederherstellen';
|
||||
|
||||
@override
|
||||
String get familyFeature4 => '✓ twonly unterstützen';
|
||||
|
||||
@override
|
||||
String get redeemUserInviteCode => 'Oder löse einen twonly-Code ein.';
|
||||
|
||||
|
|
|
|||
|
|
@ -707,16 +707,22 @@ class AppLocalizationsEn extends AppLocalizations {
|
|||
String get proFeature2 => '✓ 1 additional Plus user';
|
||||
|
||||
@override
|
||||
String get proFeature3 => '✓ Cloud-Backup encrypted (coming-soon)';
|
||||
String get proFeature3 => '✓ Restore flames';
|
||||
|
||||
@override
|
||||
String get proFeature4 => 'Additional features (coming-soon)';
|
||||
String get proFeature4 => '✓ Support twonly';
|
||||
|
||||
@override
|
||||
String get familyFeature1 => '✓ All from Pro';
|
||||
String get familyFeature1 => '✓ Unlimited media file uploads';
|
||||
|
||||
@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
|
||||
String get redeemUserInviteCode => 'Or redeem a twonly-Code.';
|
||||
|
|
|
|||
|
|
@ -159,7 +159,7 @@ class _UserListItem extends State<GroupListItem> {
|
|||
}
|
||||
|
||||
Future<void> onTap() async {
|
||||
if (_currentMessage == null) {
|
||||
if (_currentMessage == null && widget.group.totalMediaCounter == 0) {
|
||||
await Navigator.push(
|
||||
context,
|
||||
MaterialPageRoute(
|
||||
|
|
|
|||
|
|
@ -113,6 +113,7 @@ class _MessageInputState extends State<MessageInput> {
|
|||
}
|
||||
setState(() {
|
||||
_recordingState = RecordingState.recording;
|
||||
_currentDuration = 0;
|
||||
});
|
||||
await HapticFeedback.heavyImpact();
|
||||
final audioTmpPath =
|
||||
|
|
@ -220,82 +221,96 @@ class _MessageInputState extends State<MessageInput> {
|
|||
),
|
||||
),
|
||||
Expanded(
|
||||
child: (_recordingState == RecordingState.recording)
|
||||
? Row(
|
||||
children: [
|
||||
const Padding(
|
||||
padding: EdgeInsets.only(
|
||||
top: 14,
|
||||
bottom: 14,
|
||||
left: 12,
|
||||
right: 8,
|
||||
),
|
||||
child: FaIcon(
|
||||
FontAwesomeIcons.microphone,
|
||||
size: 20,
|
||||
color: Colors.red,
|
||||
),
|
||||
child: Stack(
|
||||
children: [
|
||||
TextField(
|
||||
controller: _textFieldController,
|
||||
focusNode: widget.textFieldFocus,
|
||||
keyboardType: TextInputType.multiline,
|
||||
showCursor:
|
||||
_recordingState != RecordingState.recording,
|
||||
maxLines: 4,
|
||||
minLines: 1,
|
||||
onChanged: (value) async {
|
||||
setState(() {});
|
||||
await twonlyDB.groupsDao.updateGroup(
|
||||
widget.group.groupId,
|
||||
GroupsCompanion(
|
||||
draftMessage:
|
||||
Value(_textFieldController.text),
|
||||
),
|
||||
const SizedBox(width: 10),
|
||||
Text(
|
||||
formatMsToMinSec(
|
||||
_currentDuration,
|
||||
),
|
||||
style: const TextStyle(
|
||||
color: Colors.white,
|
||||
fontSize: 12,
|
||||
),
|
||||
),
|
||||
if (!_audioRecordingLock) ...[
|
||||
SizedBox(
|
||||
width: (100 - _cancelSlideOffset) % 101,
|
||||
),
|
||||
Text(
|
||||
context.lang.voiceMessageSlideToCancel,
|
||||
),
|
||||
] else ...[
|
||||
Expanded(
|
||||
child: Container(),
|
||||
),
|
||||
GestureDetector(
|
||||
onTap: _cancelAudioRecording,
|
||||
child: Text(
|
||||
context.lang.voiceMessageCancel,
|
||||
style: const TextStyle(
|
||||
color: Colors.red,
|
||||
),
|
||||
);
|
||||
},
|
||||
onSubmitted: (_) {
|
||||
_sendMessage();
|
||||
},
|
||||
style: const TextStyle(fontSize: 17),
|
||||
decoration: InputDecoration(
|
||||
hintText: context.lang.chatListDetailInput,
|
||||
contentPadding: EdgeInsets.zero,
|
||||
border: InputBorder.none,
|
||||
),
|
||||
),
|
||||
if (_recordingState == RecordingState.recording)
|
||||
Container(
|
||||
decoration: BoxDecoration(
|
||||
color: context.color.surfaceContainer,
|
||||
borderRadius: BorderRadius.circular(20),
|
||||
),
|
||||
child: Row(
|
||||
children: [
|
||||
const Padding(
|
||||
padding: EdgeInsets.only(
|
||||
top: 14,
|
||||
bottom: 14,
|
||||
left: 12,
|
||||
right: 8,
|
||||
),
|
||||
child: FaIcon(
|
||||
FontAwesomeIcons.microphone,
|
||||
size: 20,
|
||||
color: Colors.red,
|
||||
),
|
||||
),
|
||||
const SizedBox(width: 20),
|
||||
],
|
||||
],
|
||||
)
|
||||
: TextField(
|
||||
controller: _textFieldController,
|
||||
focusNode: widget.textFieldFocus,
|
||||
keyboardType: TextInputType.multiline,
|
||||
maxLines: 4,
|
||||
minLines: 1,
|
||||
onChanged: (value) async {
|
||||
setState(() {});
|
||||
await twonlyDB.groupsDao.updateGroup(
|
||||
widget.group.groupId,
|
||||
GroupsCompanion(
|
||||
draftMessage:
|
||||
Value(_textFieldController.text),
|
||||
const SizedBox(width: 10),
|
||||
Text(
|
||||
formatMsToMinSec(
|
||||
_currentDuration,
|
||||
),
|
||||
style: TextStyle(
|
||||
color: isDarkMode(context)
|
||||
? Colors.white
|
||||
: Colors.black,
|
||||
fontSize: 12,
|
||||
),
|
||||
),
|
||||
);
|
||||
},
|
||||
onSubmitted: (_) {
|
||||
_sendMessage();
|
||||
},
|
||||
style: const TextStyle(fontSize: 17),
|
||||
decoration: InputDecoration(
|
||||
hintText: context.lang.chatListDetailInput,
|
||||
contentPadding: EdgeInsets.zero,
|
||||
border: InputBorder.none,
|
||||
if (!_audioRecordingLock) ...[
|
||||
SizedBox(
|
||||
width: (100 - _cancelSlideOffset) % 101,
|
||||
),
|
||||
Text(
|
||||
context.lang.voiceMessageSlideToCancel,
|
||||
),
|
||||
] else ...[
|
||||
Expanded(
|
||||
child: Container(),
|
||||
),
|
||||
GestureDetector(
|
||||
onTap: _cancelAudioRecording,
|
||||
child: Text(
|
||||
context.lang.voiceMessageCancel,
|
||||
style: const TextStyle(
|
||||
color: Colors.red,
|
||||
),
|
||||
),
|
||||
),
|
||||
const SizedBox(width: 20),
|
||||
],
|
||||
],
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
if (_textFieldController.text == '')
|
||||
GestureDetector(
|
||||
|
|
@ -355,7 +370,9 @@ class _MessageInputState extends State<MessageInput> {
|
|||
height: 60,
|
||||
decoration: BoxDecoration(
|
||||
borderRadius: BorderRadius.circular(90),
|
||||
color: Colors.black,
|
||||
color: isDarkMode(context)
|
||||
? Colors.black
|
||||
: Colors.white,
|
||||
),
|
||||
child: const Center(
|
||||
child: Column(
|
||||
|
|
|
|||
|
|
@ -227,14 +227,15 @@ class _PlanCardState extends State<PlanCard> {
|
|||
context.lang.proFeature1,
|
||||
context.lang.proFeature2,
|
||||
context.lang.proFeature3,
|
||||
context.lang.proFeature4,
|
||||
// context.lang.proFeature4,
|
||||
];
|
||||
case 'Family':
|
||||
features = [
|
||||
context.lang.proFeature1,
|
||||
context.lang.familyFeature1,
|
||||
context.lang.familyFeature2,
|
||||
context.lang.proFeature3,
|
||||
// context.lang.proFeature4,
|
||||
context.lang.familyFeature3,
|
||||
context.lang.familyFeature4,
|
||||
];
|
||||
default:
|
||||
}
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@ description: "twonly, a privacy-friendly way to connect with friends through sec
|
|||
|
||||
publish_to: 'none'
|
||||
|
||||
version: 0.0.77+77
|
||||
version: 0.0.78+78
|
||||
|
||||
environment:
|
||||
sdk: ^3.6.0
|
||||
|
|
|
|||
Loading…
Reference in a new issue