added option to choose more emoji reactions

This commit is contained in:
Lars Neuhaus 2024-04-02 14:11:48 +02:00
parent a1ad6aa582
commit 9aa3f7c058
4 changed files with 94 additions and 6 deletions

View File

@ -45,7 +45,7 @@ android {
applicationId "eu.mhsl.marianum.mobile.client" applicationId "eu.mhsl.marianum.mobile.client"
// You can update the following values to match your application needs. // You can update the following values to match your application needs.
// For more information, see: https://docs.flutter.dev/deployment/android#reviewing-the-gradle-build-configuration. // For more information, see: https://docs.flutter.dev/deployment/android#reviewing-the-gradle-build-configuration.
minSdkVersion 19 minSdkVersion 21
targetSdkVersion flutter.targetSdkVersion targetSdkVersion flutter.targetSdkVersion
versionCode flutterVersionCode.toInteger() versionCode flutterVersionCode.toInteger()
versionName flutterVersionName versionName flutterVersionName

View File

@ -20,7 +20,7 @@ pluginManagement {
plugins { plugins {
id "dev.flutter.flutter-plugin-loader" version "1.0.0" id "dev.flutter.flutter-plugin-loader" version "1.0.0"
id "com.android.application" version "7.3.0" apply false id "com.android.application" version "7.3.0" apply false
id "org.jetbrains.kotlin.android" version "1.7.10" apply false id "org.jetbrains.kotlin.android" version "1.8.10" apply false
} }
include ":app" include ":app"

View File

@ -1,5 +1,6 @@
import 'package:better_open_file/better_open_file.dart'; import 'package:better_open_file/better_open_file.dart';
import 'package:bubble/bubble.dart'; import 'package:bubble/bubble.dart';
import 'package:emoji_picker_flutter/emoji_picker_flutter.dart' as emojis;
import 'package:flowder/flowder.dart'; import 'package:flowder/flowder.dart';
import 'package:flutter/foundation.dart'; import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
@ -49,6 +50,8 @@ class ChatBubble extends StatefulWidget {
} }
class _ChatBubbleState extends State<ChatBubble> { class _ChatBubbleState extends State<ChatBubble> {
final TextEditingController _emojiInput = TextEditingController();
BubbleStyle getSystemStyle() { BubbleStyle getSystemStyle() {
return BubbleStyle( return BubbleStyle(
color: AppTheme.isDarkMode(context) ? const Color(0xff182229) : Colors.white, color: AppTheme.isDarkMode(context) ? const Color(0xff182229) : Colors.white,
@ -184,7 +187,7 @@ class _ChatBubbleState extends State<ChatBubble> {
), ),
onLongPress: () { onLongPress: () {
showDialog(context: context, builder: (context) { showDialog(context: context, builder: (context) {
List<String> commonReactions = ['👍', '👎', '😆', '❤️', '👀', '🤔']; List<String> commonReactions = ['👍', '👎', '😆', '❤️', '😎'];
bool canReact = widget.bubbleData.messageType == GetRoomResponseObjectMessageType.comment; bool canReact = widget.bubbleData.messageType == GetRoomResponseObjectMessageType.comment;
return SimpleDialog( return SimpleDialog(
children: [ children: [
@ -210,18 +213,102 @@ class _ChatBubbleState extends State<ChatBubble> {
params: ReactMessageParams(e), params: ReactMessageParams(e),
).run().then((value) => widget.refetch(renew: true)); ).run().then((value) => widget.refetch(renew: true));
}, },
child: Text(e)), child: Text(e),
),
),
IconButton(
onPressed: () {
showDialog(context: context, builder: (context) {
return SimpleDialog(
contentPadding: const EdgeInsets.all(15),
titlePadding: const EdgeInsets.only(left: 6, top: 15),
title: Row(
mainAxisAlignment: MainAxisAlignment.start,
children: [
IconButton(
onPressed: () {
Navigator.of(context).pop();
},
icon: const Icon(Icons.arrow_back),
),
const SizedBox(
width: 10,
height: 0,
child: null,
),
const Text('Emoji auswählen'),
],
),
children: [
Column(
children: [
emojis.EmojiPicker(
onBackspacePressed: () {
null;
},
config: emojis.Config(
height: 256,
swapCategoryAndBottomBar: true,
emojiViewConfig: emojis.EmojiViewConfig(
backgroundColor: Theme.of(context).canvasColor,
recentsLimit: 67,
emojiSizeMax: 20,
),
bottomActionBarConfig: emojis.BottomActionBarConfig(
showBackspaceButton: false,
backgroundColor: Theme.of(context).hoverColor.withAlpha(50),
buttonColor: Theme.of(context).dividerColor.withAlpha(70),
),
categoryViewConfig: emojis.CategoryViewConfig(
backgroundColor: Theme.of(context).hoverColor,
iconColorSelected: Theme.of(context).primaryColor,
indicatorColor: Theme.of(context).primaryColor,
),
searchViewConfig: emojis.SearchViewConfig(
backgroundColor: Theme.of(context).dividerColor,
buttonColor: Theme.of(context).dividerColor,
hintText: 'Suchen',
buttonIconColor: Colors.white,
),
),
onEmojiSelected: (emojis.Category? category, emojis.Emoji emoji) {
Navigator.of(context).pop();
Navigator.of(context).pop();
ReactMessage(
chatToken: widget.chatData.token,
messageId: widget.bubbleData.id,
params: ReactMessageParams(emoji.emoji),
).run().then((value) => widget.refetch(renew: true));
},
),
const SizedBox(
width: 1,
height: 25,
child: null,
)
],
),
],
);
});
},
style: IconButton.styleFrom(
padding: EdgeInsets.zero,
tapTargetSize: MaterialTapTargetSize.shrinkWrap,
minimumSize: const Size(40, 40),
),
icon: const Icon(Icons.add_circle_outline_outlined),
), ),
], ],
), ),
const Divider(), const Divider(),
], ],
) ),
), ),
Visibility( Visibility(
visible: canReact, visible: canReact,
child: ListTile( child: ListTile(
leading: const Icon(Icons.add_reaction_outlined), leading: const Icon(Icons.emoji_emotions_outlined),
title: const Text('Reaktionen'), title: const Text('Reaktionen'),
onTap: () { onTap: () {
Navigator.of(context).push(MaterialPageRoute(builder: (context) => MessageReactions( Navigator.of(context).push(MaterialPageRoute(builder: (context) => MessageReactions(

View File

@ -97,6 +97,7 @@ dependencies:
rrule: ^0.2.16 rrule: ^0.2.16
time_range_picker: ^2.2.0 time_range_picker: ^2.2.0
in_app_review: ^2.0.8 in_app_review: ^2.0.8
emoji_picker_flutter: ^2.1.1
dev_dependencies: dev_dependencies:
flutter_test: flutter_test: