added option to choose more emoji reactions #55

Merged
MineTec merged 8 commits from develop-moreEmojiReactions into develop 2024-04-02 16:51:33 +00:00
4 changed files with 94 additions and 6 deletions
Showing only changes of commit 9aa3f7c058 - Show all commits

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,
Pupsi marked this conversation as resolved Outdated

hight und child müssen nicht angegeben werden

hight und child müssen nicht angegeben werden
child: null,
),
const Text('Emoji auswählen'),
],
Pupsi marked this conversation as resolved
Review

wofür existiert diese column?

wofür existiert diese column?
),
children: [
Column(
children: [
emojis.EmojiPicker(
onBackspacePressed: () {
Pupsi marked this conversation as resolved Outdated

ist onBackspacePressed nullable? Falls ja den parameter nicht angeben.

Ansonsten das null statement weg und die curly braces einfach leer lassen. In diesem Fall dürfen die curlybraces auch in der selben Zeile stehen "{ }"

ist onBackspacePressed nullable? Falls ja den parameter nicht angeben. Ansonsten das null statement weg und die curly braces einfach leer lassen. In diesem Fall dürfen die curlybraces auch in der selben Zeile stehen "{ }"
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,
Pupsi marked this conversation as resolved Outdated

width ist nullable, daher brauchst du keinen platzhalter wie 1 angeben. Parameter die Null sind können ganz weggelassen werden.

width ist nullable, daher brauchst du keinen platzhalter wie 1 angeben. Parameter die Null sind können ganz weggelassen werden.
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: