Fixing for multiline messages
This commit is contained in:
+12
-14
@@ -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!!!
|
||||||
|
|||||||
+3
-13
@@ -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);
|
||||||
|
|||||||
Reference in New Issue
Block a user