Fixing for multiline messages

This commit is contained in:
Leandro Borges Ferreira
2023-02-15 19:40:51 +01:00
parent e66f96f759
commit 87e07683df
3 changed files with 44 additions and 27 deletions
@@ -101,20 +101,10 @@ class _MessageActionsModalState extends State<MessageActionsModal> {
final user = StreamChat.of(context).currentUser; final user = StreamChat.of(context).currentUser;
final roughMaxSize = size.width * 2 / 3; final roughMaxSize = size.width * 2 / 3;
var messageTextLength = widget.message.text!.length;
if (widget.message.quotedMessage != null) { final roughSentenceSize = widget.message
var quotedMessageLength = .roughMessageSize(widget.messageTheme.messageTextStyle?.fontSize);
(widget.message.quotedMessage!.text?.length ?? 0) + 40;
if (widget.message.quotedMessage!.attachments.isNotEmpty) {
quotedMessageLength += 40;
}
if (quotedMessageLength > messageTextLength) {
messageTextLength = quotedMessageLength;
}
}
final roughSentenceSize = messageTextLength *
(widget.messageTheme.messageTextStyle?.fontSize ?? 1) *
1.2;
final divFactor = widget.message.attachments.isNotEmpty final divFactor = widget.message.attachments.isNotEmpty
? 1 ? 1
: (roughSentenceSize == 0 ? 1 : (roughSentenceSize / roughMaxSize)); : (roughSentenceSize == 0 ? 1 : (roughSentenceSize / roughMaxSize));
@@ -289,6 +279,12 @@ class _MessageActionsModalState extends State<MessageActionsModal> {
) { ) {
var result = 0.0; var result = 0.0;
var cont = true; var cont = true;
print('INFO - max width: ${constraints.maxWidth}. '
'shiftFactor: $shiftFactor '
'divFactor: $divFactor '
'cont: $cont');
if (user?.id == widget.message.user?.id) { if (user?.id == widget.message.user?.id) {
if (divFactor >= 1.0) { if (divFactor >= 1.0) {
// This calculation is hacky and does not cover all bases!!! // This calculation is hacky and does not cover all bases!!!
@@ -358,6 +354,8 @@ class _MessageActionsModalState extends State<MessageActionsModal> {
} }
} }
print('INFO - result: $result');
// Ensure reactions don't get pushed past the edge of the screen. // Ensure reactions don't get pushed past the edge of the screen.
// //
// Hacky!!! Needs improvement!!! // Hacky!!! Needs improvement!!!
@@ -47,19 +47,9 @@ class StreamMessageReactionsModal extends StatelessWidget {
_userPermissions.contains(PermissionType.sendReaction); _userPermissions.contains(PermissionType.sendReaction);
final roughMaxSize = size.width * 2 / 3; final roughMaxSize = size.width * 2 / 3;
var messageTextLength = message.text!.length;
if (message.quotedMessage != null) { final roughSentenceSize =
var quotedMessageLength = message.quotedMessage!.text!.length + 40; message.roughMessageSize(messageTheme.messageTextStyle?.fontSize);
if (message.quotedMessage!.attachments.isNotEmpty) {
quotedMessageLength += 40;
}
if (quotedMessageLength > messageTextLength) {
messageTextLength = quotedMessageLength;
}
}
final roughSentenceSize = messageTextLength *
(messageTheme.messageTextStyle?.fontSize ?? 1) *
1.2;
final divFactor = message.attachments.isNotEmpty final divFactor = message.attachments.isNotEmpty
? 1 ? 1
: (roughSentenceSize == 0 ? 1 : (roughSentenceSize / roughMaxSize)); : (roughSentenceSize == 0 ? 1 : (roughSentenceSize / roughMaxSize));
@@ -1,3 +1,4 @@
import 'package:collection/collection.dart';
import 'package:diacritic/diacritic.dart'; import 'package:diacritic/diacritic.dart';
import 'package:file_picker/file_picker.dart'; import 'package:file_picker/file_picker.dart';
import 'package:flutter/foundation.dart'; import 'package:flutter/foundation.dart';
@@ -12,6 +13,16 @@ extension StringExtension on String {
String capitalize() => String capitalize() =>
isNotEmpty ? '${this[0].toUpperCase()}${substring(1).toLowerCase()}' : ''; isNotEmpty ? '${this[0].toUpperCase()}${substring(1).toLowerCase()}' : '';
/// Returns the biggest line of a text.
String biggestLine() {
if (contains('\n')) {
return split('\n')
.reduce((curr, next) => curr.length > next.length ? curr : next);
} else {
return this;
}
}
/// Returns whether the string contains only emoji's or not. /// Returns whether the string contains only emoji's or not.
/// ///
/// Emojis guidelines /// Emojis guidelines
@@ -353,6 +364,24 @@ extension MessageX on Message {
return copyWith(text: messageTextToRender); return copyWith(text: messageTextToRender);
} }
/// Returns an approximation of message size
double roughMessageSize(double? fontSize) {
var messageTextLength = text!.biggestLine().length;
if (quotedMessage != null) {
var quotedMessageLength =
(quotedMessage!.text?.biggestLine().length ?? 0) + 40;
if (quotedMessage!.attachments.isNotEmpty) {
quotedMessageLength += 40;
}
if (quotedMessageLength > messageTextLength) {
messageTextLength = quotedMessageLength;
}
}
return messageTextLength * (fontSize ?? 1) * 1.2;
}
/// It returns the message with the translated text if available locally /// It returns the message with the translated text if available locally
Message translate(String language) => Message translate(String language) =>
copyWith(text: i18n?['${language}_text'] ?? text); copyWith(text: i18n?['${language}_text'] ?? text);