mirror of
https://github.com/twonlyapp/twonly-app.git
synced 2026-01-15 12:48:41 +00:00
fix #125
This commit is contained in:
parent
1e89809f27
commit
8f29461f72
7 changed files with 114 additions and 60 deletions
|
|
@ -42,7 +42,7 @@ class PermissionHandlerViewState extends State<PermissionHandlerView> {
|
|||
// }
|
||||
|
||||
if (statuses[Permission.camera]!.isPermanentlyDenied) {
|
||||
openAppSettings();
|
||||
await openAppSettings();
|
||||
// setState(() {});
|
||||
} else {
|
||||
// if (statuses[Permission.camera]!.isDenied) {
|
||||
|
|
@ -74,7 +74,7 @@ class PermissionHandlerViewState extends State<PermissionHandlerView> {
|
|||
icon: const Icon(Icons.perm_camera_mic),
|
||||
onPressed: () async {
|
||||
try {
|
||||
permissionServices();
|
||||
await permissionServices();
|
||||
if (await checkPermissions()) {
|
||||
widget.onSuccess();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -81,7 +81,7 @@
|
|||
"settingsTitle": "Einstellungen",
|
||||
"settingsChats": "Chats",
|
||||
"settingsPreSelectedReactions": "Vorgewählte Reaktions-Emojis",
|
||||
"settingsPreSelectedReactionsError": "Es können maximal 6 Reaktionen ausgewählt werden.",
|
||||
"settingsPreSelectedReactionsError": "Es können maximal 12 Reaktionen ausgewählt werden.",
|
||||
"settingsProfile": "Profil",
|
||||
"settingsProfileCustomizeAvatar": "Avatar anpassen",
|
||||
"settingsProfileEditDisplayName": "Anzeigename",
|
||||
|
|
|
|||
|
|
@ -136,7 +136,7 @@
|
|||
"@settingsChats": {},
|
||||
"settingsPreSelectedReactions": "Preselected reaction emojis",
|
||||
"@settingsPreSelectedReactions": {},
|
||||
"settingsPreSelectedReactionsError": "A maximum of 6 reactions can be selected.",
|
||||
"settingsPreSelectedReactionsError": "A maximum of 12 reactions can be selected.",
|
||||
"@settingsPreSelectedReactionsError": {},
|
||||
"settingsProfile": "Profile",
|
||||
"@settingsProfile": {},
|
||||
|
|
|
|||
|
|
@ -561,6 +561,10 @@ class _ReactionButtonsState extends State<ReactionButtons> {
|
|||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
final firstRowEmojis = selectedEmojis.take(6).toList();
|
||||
final secondRowEmojis =
|
||||
selectedEmojis.length > 6 ? selectedEmojis.skip(6).toList() : [];
|
||||
|
||||
return AnimatedPositioned(
|
||||
duration: Duration(milliseconds: 200), // Animation duration
|
||||
bottom: widget.show ? 100 : 90,
|
||||
|
|
@ -570,28 +574,83 @@ class _ReactionButtonsState extends State<ReactionButtons> {
|
|||
child: AnimatedOpacity(
|
||||
opacity: widget.show ? 1.0 : 0.0, // Fade in/out
|
||||
duration: Duration(milliseconds: 150),
|
||||
child: Row(
|
||||
child: Column(
|
||||
children: [
|
||||
if (secondRowEmojis.isNotEmpty)
|
||||
Row(
|
||||
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
|
||||
crossAxisAlignment: CrossAxisAlignment.end,
|
||||
children: List.generate(
|
||||
6,
|
||||
(index) {
|
||||
final emoji = selectedEmojis[index];
|
||||
children: secondRowEmojis
|
||||
.map((emoji) => EmojiReactionWidget(
|
||||
userId: widget.userId,
|
||||
responseToMessageId: widget.responseToMessageId,
|
||||
hide: widget.hide,
|
||||
show: widget.show,
|
||||
emoji: emoji,
|
||||
))
|
||||
.toList(),
|
||||
),
|
||||
if (secondRowEmojis.isNotEmpty) SizedBox(height: 15),
|
||||
Row(
|
||||
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
|
||||
crossAxisAlignment: CrossAxisAlignment.end,
|
||||
children: firstRowEmojis
|
||||
.map((emoji) => EmojiReactionWidget(
|
||||
userId: widget.userId,
|
||||
responseToMessageId: widget.responseToMessageId,
|
||||
hide: widget.hide,
|
||||
show: widget.show,
|
||||
emoji: emoji,
|
||||
))
|
||||
.toList(),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
class EmojiReactionWidget extends StatefulWidget {
|
||||
final int userId;
|
||||
final int responseToMessageId;
|
||||
final Function hide;
|
||||
final bool show;
|
||||
final String emoji;
|
||||
|
||||
const EmojiReactionWidget({
|
||||
super.key,
|
||||
required this.userId,
|
||||
required this.responseToMessageId,
|
||||
required this.hide,
|
||||
required this.show,
|
||||
required this.emoji,
|
||||
});
|
||||
|
||||
@override
|
||||
_EmojiReactionWidgetState createState() => _EmojiReactionWidgetState();
|
||||
}
|
||||
|
||||
class _EmojiReactionWidgetState extends State<EmojiReactionWidget> {
|
||||
int selectedShortReaction = -1;
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return AnimatedSize(
|
||||
duration: Duration(milliseconds: 200), // Animation duration
|
||||
duration: Duration(milliseconds: 200),
|
||||
curve: Curves.linearToEaseOut,
|
||||
child: GestureDetector(
|
||||
onTap: () {
|
||||
sendTextMessage(
|
||||
widget.userId,
|
||||
TextMessageContent(
|
||||
text: emoji,
|
||||
text: widget.emoji,
|
||||
responseToMessageId: widget.responseToMessageId,
|
||||
),
|
||||
PushKind.reaction,
|
||||
);
|
||||
setState(() {
|
||||
selectedShortReaction = index;
|
||||
selectedShortReaction = 0; // Assuming index is 0 for this example
|
||||
});
|
||||
Future.delayed(Duration(milliseconds: 300), () {
|
||||
setState(() {
|
||||
|
|
@ -600,32 +659,27 @@ class _ReactionButtonsState extends State<ReactionButtons> {
|
|||
});
|
||||
});
|
||||
},
|
||||
child: (selectedShortReaction == index)
|
||||
child: (selectedShortReaction ==
|
||||
0) // Assuming index is 0 for this example
|
||||
? EmojiAnimationFlying(
|
||||
emoji: emoji,
|
||||
emoji: widget.emoji,
|
||||
duration: Duration(milliseconds: 300),
|
||||
startPosition: 0.0,
|
||||
size: (widget.show) ? 40 : 10)
|
||||
size: (widget.show) ? 40 : 10,
|
||||
)
|
||||
: AnimatedOpacity(
|
||||
opacity: (selectedShortReaction == -1)
|
||||
? 1
|
||||
: 0, // Fade in/out
|
||||
opacity: (selectedShortReaction == -1) ? 1 : 0, // Fade in/out
|
||||
duration: Duration(milliseconds: 150),
|
||||
child: SizedBox(
|
||||
width: widget.show ? 40 : 10,
|
||||
child: Center(
|
||||
child: EmojiAnimation(
|
||||
emoji: emoji,
|
||||
emoji: widget.emoji,
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
},
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -34,7 +34,7 @@ class _ChatReactionSelectionView extends State<ChatReactionSelectionView> {
|
|||
if (selectedEmojis.contains(emoji)) {
|
||||
selectedEmojis.remove(emoji);
|
||||
} else {
|
||||
if (selectedEmojis.length < 6) {
|
||||
if (selectedEmojis.length < 12) {
|
||||
selectedEmojis.add(emoji);
|
||||
var user = await getUser();
|
||||
if (user != null) {
|
||||
|
|
@ -1,6 +1,6 @@
|
|||
import 'package:flutter/material.dart';
|
||||
import 'package:twonly/src/utils/misc.dart';
|
||||
import 'package:twonly/src/views/settings/chat_reactions_view.dart';
|
||||
import 'package:twonly/src/views/settings/chat/chat_reactions_view.dart';
|
||||
|
||||
class ChatSettingsView extends StatefulWidget {
|
||||
const ChatSettingsView({super.key});
|
||||
|
|
@ -7,7 +7,7 @@ import 'package:twonly/src/utils/misc.dart';
|
|||
import 'package:twonly/src/utils/storage.dart';
|
||||
import 'package:twonly/src/views/settings/account_view.dart';
|
||||
import 'package:twonly/src/views/settings/appearance_view.dart';
|
||||
import 'package:twonly/src/views/settings/chat_settings_view.dart';
|
||||
import 'package:twonly/src/views/settings/chat/chat_settings_view.dart';
|
||||
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_view.dart';
|
||||
|
|
|
|||
Loading…
Reference in a new issue