Merge branch 'develop' into feat/attachment-text-title-color
This commit is contained in:
@@ -1,10 +1,35 @@
|
||||
## Upcoming
|
||||
|
||||
🐞 Fixed
|
||||
|
||||
- [[#1502]](https://github.com/GetStream/stream-chat-flutter/issues/1502) Fixed `isOnlyEmoji` method Detects Single
|
||||
Hangul
|
||||
Consonants as Emoji.
|
||||
- [[#1505]](https://github.com/GetStream/stream-chat-flutter/issues/1505) Fixed Message bubble disappears for Hangul
|
||||
Consonants.
|
||||
- [[#1490]](https://github.com/GetStream/stream-chat-flutter/issues/1490) Fixed `editMessageInputBuilder` property not
|
||||
used in message edit widget.
|
||||
|
||||
✅ Added
|
||||
|
||||
- Added `MessageTheme.urlAttachmentHostStyle`, `MessageTheme.urlAttachmentTitleStyle`, and
|
||||
`MessageTheme.urlAttachmentTextStyle` to customize the style of the url attachment.
|
||||
- Added `StreamMessageInput.ogPreviewFilter` to allow users to filter out the og preview
|
||||
links. [#1338](https://github.com/GetStream/stream-chat-flutter/issues/1338)
|
||||
|
||||
```dart
|
||||
StreamMessageInput(
|
||||
ogPreviewFilter: (matchedUri, messageText) {
|
||||
final url = matchedUri.toString();
|
||||
if (url.contains('giphy.com')) {
|
||||
// Return false to prevent the OG preview from being built.
|
||||
return false;
|
||||
}
|
||||
// Return true to build the OG preview.
|
||||
return true;
|
||||
),
|
||||
```
|
||||
|
||||
🔄 Changed
|
||||
|
||||
- Deprecated `MessageTheme.linkBackgroundColor` in favor of `MessageTheme.urlAttachmentBackgroundColor`.
|
||||
@@ -13,22 +38,26 @@
|
||||
|
||||
🐞 Fixed
|
||||
|
||||
- [#1456](https://github.com/GetStream/stream-chat-flutter/issues/1456) Fixed logic for showing that a message was read using sending indicator.
|
||||
- [#1462](https://github.com/GetStream/stream-chat-flutter/issues/1462) Fixed support for iPad in the share button for images.
|
||||
- [#1475](https://github.com/GetStream/stream-chat-flutter/issues/1475) Fixed typo to fix compilation.
|
||||
- [[#1456]](https://github.com/GetStream/stream-chat-flutter/issues/1456) Fixed logic for showing that a message was
|
||||
read using sending indicator.
|
||||
- [[#1462]](https://github.com/GetStream/stream-chat-flutter/issues/1462) Fixed support for iPad in the share button for
|
||||
images.
|
||||
- [[#1475]](https://github.com/GetStream/stream-chat-flutter/issues/1475) Fixed typo to fix compilation.
|
||||
|
||||
✅ Added
|
||||
|
||||
- Now it is possible to customize the max lines of the title of a url attachment. Before it was always 1 line.
|
||||
- Added `attachmentActionsModalBuilder` parameter to `StreamMessageWidget` that allows to customize `AttachmentActionsModal`.
|
||||
- Added `StreamMessageInput.sendMessageKeyPredicate` and `StreamMessageInput.clearQuotedMessageKeyPredicate` to customize the keys used to send and clear the quoted message.
|
||||
- Added `attachmentActionsModalBuilder` parameter to `StreamMessageWidget` that allows to
|
||||
customize `AttachmentActionsModal`.
|
||||
- Added `StreamMessageInput.sendMessageKeyPredicate` and `StreamMessageInput.clearQuotedMessageKeyPredicate` to
|
||||
customize the keys used to send and clear the quoted message.
|
||||
|
||||
🔄 Changed
|
||||
|
||||
- Updated dependencies to resolvable versions.
|
||||
|
||||
🚀 Improved
|
||||
-
|
||||
|
||||
- Improved draw of reaction options. [#1455](https://github.com/GetStream/stream-chat-flutter/pull/1455)
|
||||
|
||||
## 5.3.0
|
||||
@@ -38,17 +67,22 @@
|
||||
- Updated `photo_manager` dependency to `^2.5.2`
|
||||
|
||||
🐞 Fixed
|
||||
- [[#1424]](https://github.com/GetStream/stream-chat-flutter/issues/1424) Fixed a render issue when showing messages starting with 4 whitespaces.
|
||||
|
||||
- [[#1424]](https://github.com/GetStream/stream-chat-flutter/issues/1424) Fixed a render issue when showing messages
|
||||
starting with 4 whitespaces.
|
||||
- Fixed a bug where the `AttachmentPickerBottomSheet` was not able to identify the mobile browser.
|
||||
- Fixed uploading files on Windows - fixed temp file path.
|
||||
|
||||
✅ Added
|
||||
|
||||
- New `noPhotoOrVideoLabel` displayed when there is no files to choose.
|
||||
|
||||
## 5.2.0
|
||||
|
||||
✅ Added
|
||||
- Added a new `bottomRowBuilderWithDefaultWidget` parameter to `StreamMessageWidget` which contains a third parameter (default `BottomRow` widget with `copyWith` method available) to allow easier customization.
|
||||
|
||||
- Added a new `bottomRowBuilderWithDefaultWidget` parameter to `StreamMessageWidget` which contains a third parameter (
|
||||
default `BottomRow` widget with `copyWith` method available) to allow easier customization.
|
||||
|
||||
🔄 Changed
|
||||
|
||||
@@ -58,14 +92,20 @@
|
||||
- Updated `dart_vlc` dependency to `^0.4.0`
|
||||
- Updated `file_picker` dependency to `^5.2.4`
|
||||
- Deprecated `StreamMessageWidget.bottomRowBuilder` in favor of `StreamMessageWidget.bottomRowBuilderWithDefaultWidget`.
|
||||
- Deprecated `StreamMessageWidget.deletedBottomRowBuilder` in favor of `StreamMessageWidget.bottomRowBuilderWithDefaultWidget`.
|
||||
- Deprecated `StreamMessageWidget.deletedBottomRowBuilder` in favor
|
||||
of `StreamMessageWidget.bottomRowBuilderWithDefaultWidget`.
|
||||
- Deprecated `StreamMessageWidget.usernameBuilder` in favor of `StreamMessageWidget.bottomRowBuilderWithDefaultWidget`.
|
||||
|
||||
🐞 Fixed
|
||||
- [[#1379]](https://github.com/GetStream/stream-chat-flutter/issues/1379) Fixed "Issues with photo attachments on web", where the cached image attachment would not render while uploading.
|
||||
- Fix render overflow issue with `MessageSearchListTileTitle`. It now uses `Text.rich` instead of `Row`. Better default behaviour and allows `TextOverflow`.
|
||||
- [[1346]](https://github.com/GetStream/stream-chat-flutter/issues/1346) Fixed a render issue while uploading video on web.
|
||||
- [[#1347]](https://github.com/GetStream/stream-chat-flutter/issues/1347) `onReply` not working in `AttachmentActionsModal` which is used by `StreamImageAttachment` and `StreamImageGroup`.
|
||||
|
||||
- [[#1379]](https://github.com/GetStream/stream-chat-flutter/issues/1379) Fixed "Issues with photo attachments on web",
|
||||
where the cached image attachment would not render while uploading.
|
||||
- Fix render overflow issue with `MessageSearchListTileTitle`. It now uses `Text.rich` instead of `Row`. Better default
|
||||
behaviour and allows `TextOverflow`.
|
||||
- [[1346]](https://github.com/GetStream/stream-chat-flutter/issues/1346) Fixed a render issue while uploading video on
|
||||
web.
|
||||
- [[#1347]](https://github.com/GetStream/stream-chat-flutter/issues/1347) `onReply` not working
|
||||
in `AttachmentActionsModal` which is used by `StreamImageAttachment` and `StreamImageGroup`.
|
||||
|
||||
## 5.1.0
|
||||
|
||||
|
||||
@@ -25,6 +25,13 @@ import 'package:stream_chat_flutter/stream_chat_flutter.dart';
|
||||
const _kCommandTrigger = '/';
|
||||
const _kMentionTrigger = '@';
|
||||
|
||||
/// Signature for the function that determines if a [matchedUri] should be
|
||||
/// previewed as an OG Attachment.
|
||||
typedef OgPreviewFilter = bool Function(
|
||||
Uri matchedUri,
|
||||
String messageText,
|
||||
);
|
||||
|
||||
/// Inactive state:
|
||||
///
|
||||
/// 
|
||||
@@ -114,6 +121,7 @@ class StreamMessageInput extends StatefulWidget {
|
||||
this.sendMessageKeyPredicate = _defaultSendMessageKeyPredicate,
|
||||
this.clearQuotedMessageKeyPredicate =
|
||||
_defaultClearQuotedMessageKeyPredicate,
|
||||
this.ogPreviewFilter = _defaultOgPreviewFilter,
|
||||
});
|
||||
|
||||
/// The predicate used to send a message on desktop/web
|
||||
@@ -259,6 +267,18 @@ class StreamMessageInput extends StatefulWidget {
|
||||
/// Callback for when the quoted message is cleared
|
||||
final VoidCallback? onQuotedMessageCleared;
|
||||
|
||||
/// The filter used to determine if a link should be shown as an OpenGraph
|
||||
/// preview.
|
||||
final OgPreviewFilter ogPreviewFilter;
|
||||
|
||||
static bool _defaultOgPreviewFilter(
|
||||
Uri matchedUri,
|
||||
String messageText,
|
||||
) {
|
||||
// Show the preview for all links
|
||||
return true;
|
||||
}
|
||||
|
||||
static bool _defaultValidator(Message message) =>
|
||||
message.text?.isNotEmpty == true || message.attachments.isNotEmpty;
|
||||
|
||||
@@ -990,11 +1010,13 @@ class StreamMessageInputState extends State<StreamMessageInput>
|
||||
if (_lastSearchedContainsUrlText == value) return;
|
||||
_lastSearchedContainsUrlText = value;
|
||||
|
||||
final matchedUrls = _urlRegex.allMatches(value).toList()
|
||||
..removeWhere((it) {
|
||||
final _parsedMatch = Uri.tryParse(it.group(0) ?? '')?.withScheme;
|
||||
return _parsedMatch?.host.split('.').last.isValidTLD() == false;
|
||||
});
|
||||
final matchedUrls = _urlRegex.allMatches(value).where((it) {
|
||||
final _parsedMatch = Uri.tryParse(it.group(0) ?? '')?.withScheme;
|
||||
if (_parsedMatch == null) return false;
|
||||
|
||||
return _parsedMatch.host.split('.').last.isValidTLD() &&
|
||||
widget.ogPreviewFilter.call(_parsedMatch, value);
|
||||
}).toList();
|
||||
|
||||
// Reset the og attachment if the text doesn't contain any url
|
||||
if (matchedUrls.isEmpty ||
|
||||
|
||||
@@ -1035,6 +1035,7 @@ class _StreamMessageWidgetState extends State<StreamMessageWidget>
|
||||
builder: (_) => EditMessageSheet(
|
||||
message: widget.message,
|
||||
channel: StreamChannel.of(context).channel,
|
||||
editMessageInputBuilder: widget.editMessageInputBuilder,
|
||||
),
|
||||
);
|
||||
},
|
||||
|
||||
@@ -34,7 +34,7 @@ extension StringExtension on String {
|
||||
if (trimmedString.isEmpty) return false;
|
||||
if (trimmedString.characters.length > 3) return false;
|
||||
final emojiRegex = RegExp(
|
||||
r'^(\u00a9|\u00ae|[\u2000-\u3300]|\ud83c[\ud000-\udfff]|\ud83d[\ud000-\udfff]|\ud83e[\ud000-\udfff])+$',
|
||||
r'^(\u00a9|\u00ae|\u200d|[\ufe00-\ufe0f]|[\u2600-\u27FF]|[\u2300-\u2bFF]|\ud83c[\ud000-\udfff]|\ud83d[\ud000-\udfff]|\ud83e[\ud000-\udfff])+$',
|
||||
multiLine: true,
|
||||
caseSensitive: false,
|
||||
);
|
||||
|
||||
@@ -81,6 +81,71 @@ void main() {
|
||||
expect('🌶1'.isOnlyEmoji, false);
|
||||
expect('👨👨👨👨'.isOnlyEmoji, true);
|
||||
expect('👨👨👨👨 '.isOnlyEmoji, true);
|
||||
expect('👨👨👨👨'.isOnlyEmoji, false);
|
||||
expect('⭐⭐⭐'.isOnlyEmoji, true);
|
||||
expect('⭕⭕⭐'.isOnlyEmoji, true);
|
||||
expect('✅'.isOnlyEmoji, true);
|
||||
expect('☺️'.isOnlyEmoji, true);
|
||||
});
|
||||
|
||||
test('Korean vowels', () {
|
||||
expect('ㅏ'.isOnlyEmoji, false);
|
||||
expect('ㅑ'.isOnlyEmoji, false);
|
||||
expect('ㅓ'.isOnlyEmoji, false);
|
||||
expect('ㅕ'.isOnlyEmoji, false);
|
||||
expect('ㅗ'.isOnlyEmoji, false);
|
||||
expect('ㅛ'.isOnlyEmoji, false);
|
||||
expect('ㅜ'.isOnlyEmoji, false);
|
||||
expect('ㅠ'.isOnlyEmoji, false);
|
||||
expect('ㅡ'.isOnlyEmoji, false);
|
||||
expect('ㅣ'.isOnlyEmoji, false);
|
||||
});
|
||||
|
||||
test('Korean consonants', () {
|
||||
expect('ㄱ'.isOnlyEmoji, false);
|
||||
expect('ㄴ'.isOnlyEmoji, false);
|
||||
expect('ㄷ'.isOnlyEmoji, false);
|
||||
expect('ㄹ'.isOnlyEmoji, false);
|
||||
expect('ㅁ'.isOnlyEmoji, false);
|
||||
expect('ㅂ'.isOnlyEmoji, false);
|
||||
expect('ㅅ'.isOnlyEmoji, false);
|
||||
expect('ㅇ'.isOnlyEmoji, false);
|
||||
expect('ㅈ'.isOnlyEmoji, false);
|
||||
expect('ㅊ'.isOnlyEmoji, false);
|
||||
expect('ㅋ'.isOnlyEmoji, false);
|
||||
expect('ㅌ'.isOnlyEmoji, false);
|
||||
expect('ㅍ'.isOnlyEmoji, false);
|
||||
expect('ㅎ'.isOnlyEmoji, false);
|
||||
});
|
||||
|
||||
test('Korean syllables', () {
|
||||
expect('가'.isOnlyEmoji, false);
|
||||
expect('나'.isOnlyEmoji, false);
|
||||
expect('다'.isOnlyEmoji, false);
|
||||
expect('라'.isOnlyEmoji, false);
|
||||
expect('마'.isOnlyEmoji, false);
|
||||
expect('바'.isOnlyEmoji, false);
|
||||
expect('사'.isOnlyEmoji, false);
|
||||
expect('아'.isOnlyEmoji, false);
|
||||
expect('자'.isOnlyEmoji, false);
|
||||
expect('차'.isOnlyEmoji, false);
|
||||
expect('카'.isOnlyEmoji, false);
|
||||
expect('타'.isOnlyEmoji, false);
|
||||
expect('파'.isOnlyEmoji, false);
|
||||
expect('하'.isOnlyEmoji, false);
|
||||
});
|
||||
|
||||
// https://github.com/GetStream/stream-chat-flutter/issues/1502
|
||||
test('Issue:#1502', () {
|
||||
expect('ㄴ'.isOnlyEmoji, false);
|
||||
expect('ㄴㅇ'.isOnlyEmoji, false);
|
||||
expect('ㅇㅋ'.isOnlyEmoji, false);
|
||||
});
|
||||
|
||||
// https://github.com/GetStream/stream-chat-flutter/issues/1505
|
||||
test('Issue:#1505', () {
|
||||
expect('ㅎㅎㅎ'.isOnlyEmoji, false);
|
||||
expect('ㅎㅎㅎㅎ'.isOnlyEmoji, false);
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user