diff --git a/.github/workflows/pana.yml b/.github/workflows/pana.yml index e698349c..4341e480 100644 --- a/.github/workflows/pana.yml +++ b/.github/workflows/pana.yml @@ -32,7 +32,7 @@ jobs: TOTAL_MAX: ${{ steps.analysis.outputs.total_max }} run: | PERCENTAGE=$(( $TOTAL * 100 / $TOTAL_MAX )) - if (( $PERCENTAGE < 100 )) + if (( $PERCENTAGE < 90 )) then echo Score too low! exit 1 diff --git a/.github/workflows/stream_flutter_workflow.yml b/.github/workflows/stream_flutter_workflow.yml index ce6d2c63..25dab1f4 100644 --- a/.github/workflows/stream_flutter_workflow.yml +++ b/.github/workflows/stream_flutter_workflow.yml @@ -30,7 +30,7 @@ jobs: run: melos bootstrap - name: 'Dart Analyze' run: | - melos exec -c 3 -- \ + melos exec -c 3 --ignore="*example*" -- \ tuneup check - name: 'Pub Check' run: | diff --git a/README.md b/README.md index 7f4a523e..0d465852 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# Official Flutter packages for [Stream Chat](https://getstream.io/chat/) +# Official Flutter packages for [Stream Chat](https://getstream.io/chat/sdk/flutter/) ![](https://raw.githubusercontent.com/GetStream/stream-chat-flutter/master/images/sdk_hero_v4.png) diff --git a/packages/stream_chat/CHANGELOG.md b/packages/stream_chat/CHANGELOG.md index 02825f58..4e30d452 100644 --- a/packages/stream_chat/CHANGELOG.md +++ b/packages/stream_chat/CHANGELOG.md @@ -1,3 +1,10 @@ +## 1.4.0-beta + +- Improved attachment uploading +- Fix: update member presence +- Added skip_push to message model +- Minor fixes and improvements + ## 1.3.2+1-beta - Fixed queryChannels bug diff --git a/packages/stream_chat/lib/src/api/channel.dart b/packages/stream_chat/lib/src/api/channel.dart index 13ea00ac..76209bfd 100644 --- a/packages/stream_chat/lib/src/api/channel.dart +++ b/packages/stream_chat/lib/src/api/channel.dart @@ -338,6 +338,7 @@ class Channel { _messageAttachmentsUploadCompleter[message.id] = attachmentsUploadCompleter; + // ignore: unawaited_futures _uploadAttachments( message.id, message.attachments.map((it) => it.id), @@ -388,6 +389,7 @@ class Channel { _messageAttachmentsUploadCompleter[message.id] = attachmentsUploadCompleter; + // ignore: unawaited_futures _uploadAttachments( message.id, message.attachments.map((it) => it.id), diff --git a/packages/stream_chat/lib/src/client.dart b/packages/stream_chat/lib/src/client.dart index 1f80e63b..d422dba1 100644 --- a/packages/stream_chat/lib/src/client.dart +++ b/packages/stream_chat/lib/src/client.dart @@ -510,6 +510,7 @@ class StreamChatClient { if (status == ConnectionStatus.connected && state.channels?.isNotEmpty == true) { + // ignore: unawaited_futures queryChannelsOnline(filter: { 'cid': { '\$in': state.channels.keys.toList(), diff --git a/packages/stream_chat/lib/version.dart b/packages/stream_chat/lib/version.dart index 39aa0571..207ba25e 100644 --- a/packages/stream_chat/lib/version.dart +++ b/packages/stream_chat/lib/version.dart @@ -3,4 +3,4 @@ import 'package:stream_chat/src/client.dart'; /// Current package version /// Used in [StreamChatClient] to build the `x-stream-client` header // ignore: constant_identifier_names -const PACKAGE_VERSION = '1.3.2+1-beta'; +const PACKAGE_VERSION = '1.4.0-beta'; diff --git a/packages/stream_chat/pubspec.yaml b/packages/stream_chat/pubspec.yaml index e8b485c5..410cc561 100644 --- a/packages/stream_chat/pubspec.yaml +++ b/packages/stream_chat/pubspec.yaml @@ -1,7 +1,7 @@ name: stream_chat homepage: https://getstream.io/ description: The official Dart client for Stream Chat, a service for building chat applications. -version: 1.3.2+1-beta +version: 1.4.0-beta repository: https://github.com/GetStream/stream-chat-flutter issue_tracker: https://github.com/GetStream/stream-chat-flutter/issues @@ -27,4 +27,4 @@ dev_dependencies: freezed: ^0.12.7 json_serializable: ^3.3.0 mockito: ^4.1.1 - test: ^1.15.7 \ No newline at end of file + test: ^1.15.7 diff --git a/packages/stream_chat_flutter/CHANGELOG.md b/packages/stream_chat_flutter/CHANGELOG.md index 73ac6d4b..d432f441 100644 --- a/packages/stream_chat_flutter/CHANGELOG.md +++ b/packages/stream_chat_flutter/CHANGELOG.md @@ -1,3 +1,17 @@ +## 1.4.0-beta + +- Unfocus `MessageInput` only when sending commands +- Updated default error for `MessageSearchListView` +- Show error messages as system and keep them in the message input +- Remove notification badge logic +- Use shimmer while loading images +- Polished `StreamChatTheme` adding more options and a new `MessageInputTheme` dedicated to `MessageInput` +- Add possibility to specify custom message actions using `MessageWidget.customActions` +- Added `MessageListView.onAttachmentTap` callback +- Fixed message newline issue +- Fixed `MessageListView` scroll keyboard behaviour +- Minor fixes and improveqments + ## 1.3.2-beta - Updated `stream_chat_core` dependency diff --git a/packages/stream_chat_flutter/lib/src/attachment/file_attachment.dart b/packages/stream_chat_flutter/lib/src/attachment/file_attachment.dart index 51dd4460..6b2c1348 100644 --- a/packages/stream_chat_flutter/lib/src/attachment/file_attachment.dart +++ b/packages/stream_chat_flutter/lib/src/attachment/file_attachment.dart @@ -45,10 +45,10 @@ class FileAttachment extends AttachmentWidget { crossAxisAlignment: CrossAxisAlignment.start, children: [ Container( - child: _getFileTypeImage(context), height: 40.0, width: 33.33, margin: EdgeInsets.all(8.0), + child: _getFileTypeImage(context), ), SizedBox(width: 8.0), Expanded( diff --git a/packages/stream_chat_flutter/lib/src/attachment/giphy_attachment.dart b/packages/stream_chat_flutter/lib/src/attachment/giphy_attachment.dart index b54c0a7c..2426991f 100644 --- a/packages/stream_chat_flutter/lib/src/attachment/giphy_attachment.dart +++ b/packages/stream_chat_flutter/lib/src/attachment/giphy_attachment.dart @@ -143,6 +143,7 @@ class GiphyAttachment extends AttachmentWidget { Card( color: Colors.white, elevation: 2, + shape: CircleBorder(), child: IconButton( padding: const EdgeInsets.all(0), constraints: BoxConstraints.tight(Size(32, 32)), @@ -156,7 +157,6 @@ class GiphyAttachment extends AttachmentWidget { }); }, ), - shape: CircleBorder(), ), Expanded( child: Center( @@ -171,6 +171,7 @@ class GiphyAttachment extends AttachmentWidget { Card( color: Colors.white, elevation: 2, + shape: CircleBorder(), child: IconButton( padding: const EdgeInsets.all(0), constraints: BoxConstraints.tight(Size(32, 32)), @@ -184,7 +185,6 @@ class GiphyAttachment extends AttachmentWidget { }); }, ), - shape: CircleBorder(), ), ], ), diff --git a/packages/stream_chat_flutter/lib/src/attachment_actions_modal.dart b/packages/stream_chat_flutter/lib/src/attachment_actions_modal.dart index 1bea3c50..d9b9c016 100644 --- a/packages/stream_chat_flutter/lib/src/attachment_actions_modal.dart +++ b/packages/stream_chat_flutter/lib/src/attachment_actions_modal.dart @@ -9,26 +9,32 @@ import 'package:path_provider/path_provider.dart'; import '../stream_chat_flutter.dart'; import 'extension.dart'; +/// Callback to download an attachment asset typedef AttachmentDownloader = Future Function( Attachment attachment, { ProgressCallback progressCallback, }); +/// Widget that shows the options in the gallery view class AttachmentActionsModal extends StatelessWidget { + /// The message containing the attachments final Message message; - final String userName; - final String sentAt; - final List attachments; + + /// Current page index final currentIndex; + + /// Callback to show the message final VoidCallback onShowMessage; + + /// Callback to download images final AttachmentDownloader imageDownloader; + + /// Callback to provide download files final AttachmentDownloader fileDownloader; + /// Returns a new [AttachmentActionsModal] const AttachmentActionsModal({ this.message, - this.userName, - this.sentAt, - this.attachments, this.currentIndex, this.onShowMessage, this.imageDownloader, @@ -85,13 +91,13 @@ class AttachmentActionsModal extends StatelessWidget { ), _buildButton( context, - 'Save ${attachments[currentIndex].type == 'video' ? 'Video' : 'Image'}', + 'Save ${message.attachments[currentIndex].type == 'video' ? 'Video' : 'Image'}', StreamSvgIcon.iconSave( size: 24.0, color: theme.colorTheme.grey, ), () { - final attachment = attachments[currentIndex]; + final attachment = message.attachments[currentIndex]; final isImage = attachment.type == 'image'; final saveFile = fileDownloader ?? _downloadAttachment; final saveImage = imageDownloader ?? _downloadAttachment; diff --git a/packages/stream_chat_flutter/lib/src/channel_file_display_screen.dart b/packages/stream_chat_flutter/lib/src/channel_file_display_screen.dart index a6be5555..2813f300 100644 --- a/packages/stream_chat_flutter/lib/src/channel_file_display_screen.dart +++ b/packages/stream_chat_flutter/lib/src/channel_file_display_screen.dart @@ -71,12 +71,12 @@ class _ChannelFileDisplayScreenState extends State { Navigator.of(context).pop(); }, child: Container( + width: 24.0, + height: 24.0, child: StreamSvgIcon.left( color: StreamChatTheme.of(context).colorTheme.black, size: 24.0, ), - width: 24.0, - height: 24.0, ), ), ), diff --git a/packages/stream_chat_flutter/lib/src/channel_list_view.dart b/packages/stream_chat_flutter/lib/src/channel_list_view.dart index f31c759a..0396bffe 100644 --- a/packages/stream_chat_flutter/lib/src/channel_list_view.dart +++ b/packages/stream_chat_flutter/lib/src/channel_list_view.dart @@ -223,8 +223,8 @@ class _ChannelListViewState extends State { } return AnimatedSwitcher( - child: child, duration: const Duration(milliseconds: 500), + child: child, ); } @@ -469,8 +469,8 @@ class _ChannelListViewState extends State { MaterialPageRoute( builder: (context) { return StreamChannel( - child: widget.channelWidget, channel: client, + child: widget.channelWidget, ); }, ), @@ -506,12 +506,12 @@ class _ChannelListViewState extends State { context: context, builder: (context) { return StreamChannel( + channel: channel, child: ChannelBottomSheet( onViewInfoTap: () { widget.onViewInfoTap(channel); }, ), - channel: channel, ); }, ); @@ -592,13 +592,13 @@ class _ChannelListViewState extends State { Padding( padding: const EdgeInsets.symmetric(horizontal: 8), child: StreamChannel( + channel: channel, child: ChannelName( textStyle: TextStyle( fontSize: 12, fontWeight: FontWeight.w600, ), ), - channel: channel, ), ), ], diff --git a/packages/stream_chat_flutter/lib/src/channel_media_display_screen.dart b/packages/stream_chat_flutter/lib/src/channel_media_display_screen.dart index 87ab2f3b..251143ed 100644 --- a/packages/stream_chat_flutter/lib/src/channel_media_display_screen.dart +++ b/packages/stream_chat_flutter/lib/src/channel_media_display_screen.dart @@ -78,12 +78,12 @@ class _ChannelMediaDisplayScreenState extends State { Navigator.of(context).pop(); }, child: Container( + width: 24.0, + height: 24.0, child: StreamSvgIcon.left( color: StreamChatTheme.of(context).colorTheme.black, size: 24.0, ), - width: 24.0, - height: 24.0, ), ), ), diff --git a/packages/stream_chat_flutter/lib/src/image_footer.dart b/packages/stream_chat_flutter/lib/src/image_footer.dart index afcd0176..1d0d7e78 100644 --- a/packages/stream_chat_flutter/lib/src/image_footer.dart +++ b/packages/stream_chat_flutter/lib/src/image_footer.dart @@ -237,13 +237,13 @@ class _ImageFooterState extends State { media = InkWell( onTap: () => widget.mediaSelectedCallBack(index), child: AspectRatio( + aspectRatio: 1.0, child: CachedNetworkImage( imageUrl: attachment.imageUrl ?? attachment.assetUrl ?? attachment.thumbUrl, fit: BoxFit.cover, ), - aspectRatio: 1.0, ), ); } diff --git a/packages/stream_chat_flutter/lib/src/image_header.dart b/packages/stream_chat_flutter/lib/src/image_header.dart index 67e8e5cd..bf4ec474 100644 --- a/packages/stream_chat_flutter/lib/src/image_header.dart +++ b/packages/stream_chat_flutter/lib/src/image_header.dart @@ -111,10 +111,7 @@ class ImageHeader extends StatelessWidget implements PreferredSizeWidget { return StreamChannel( channel: channel, child: AttachmentActionsModal( - userName: userName, - sentAt: sentAt, message: message, - attachments: urls, currentIndex: currentIndex, onShowMessage: onShowMessage, ), diff --git a/packages/stream_chat_flutter/lib/src/media_list_view.dart b/packages/stream_chat_flutter/lib/src/media_list_view.dart index 7550e3e4..ddaf2c24 100644 --- a/packages/stream_chat_flutter/lib/src/media_list_view.dart +++ b/packages/stream_chat_flutter/lib/src/media_list_view.dart @@ -56,6 +56,11 @@ class _MediaListViewState extends State { return Padding( padding: const EdgeInsets.symmetric(horizontal: 1.0, vertical: 1.0), child: InkWell( + onTap: () { + if (widget.onSelect != null) { + widget.onSelect(media); + } + }, child: Stack( children: [ AspectRatio( @@ -125,11 +130,6 @@ class _MediaListViewState extends State { ] ], ), - onTap: () { - if (widget.onSelect != null) { - widget.onSelect(media); - } - }, ), ); }, diff --git a/packages/stream_chat_flutter/lib/src/message_input.dart b/packages/stream_chat_flutter/lib/src/message_input.dart index bb7094f0..21dda0f4 100644 --- a/packages/stream_chat_flutter/lib/src/message_input.dart +++ b/packages/stream_chat_flutter/lib/src/message_input.dart @@ -417,8 +417,8 @@ class MessageInputState extends State { Widget _animateSendButton(BuildContext context) { final sendButton = widget.activeSendButton != null ? InkWell( - child: widget.activeSendButton, onTap: sendMessage, + child: widget.activeSendButton, ) : _buildSendButton(context); return Padding( @@ -1083,81 +1083,81 @@ class MessageInputState extends State { switch (iconType) { case 'giphy': return CircleAvatar( + radius: 12, child: StreamSvgIcon.giphyIcon( size: 24.0, ), - radius: 12, ); break; case 'ban': return CircleAvatar( backgroundColor: StreamChatTheme.of(context).colorTheme.accentBlue, + radius: 12, child: StreamSvgIcon.iconUserDelete( size: 16.0, color: Colors.white, ), - radius: 12, ); break; case 'flag': return CircleAvatar( backgroundColor: StreamChatTheme.of(context).colorTheme.accentBlue, + radius: 12, child: StreamSvgIcon.flag( size: 14.0, color: Colors.white, ), - radius: 12, ); break; case 'imgur': return CircleAvatar( backgroundColor: StreamChatTheme.of(context).colorTheme.accentBlue, + radius: 12, child: ClipOval( child: StreamSvgIcon.imgur( size: 24.0, ), ), - radius: 12, ); break; case 'mute': return CircleAvatar( backgroundColor: StreamChatTheme.of(context).colorTheme.accentBlue, + radius: 12, child: StreamSvgIcon.mute( size: 16.0, color: Colors.white, ), - radius: 12, ); break; case 'unban': return CircleAvatar( backgroundColor: StreamChatTheme.of(context).colorTheme.accentBlue, + radius: 12, child: StreamSvgIcon.userAdd( size: 16.0, color: Colors.white, ), - radius: 12, ); break; case 'unmute': return CircleAvatar( backgroundColor: StreamChatTheme.of(context).colorTheme.accentBlue, + radius: 12, child: StreamSvgIcon.volumeUp( size: 16.0, color: Colors.white, ), - radius: 12, ); break; default: return CircleAvatar( backgroundColor: StreamChatTheme.of(context).colorTheme.accentBlue, + radius: 12, child: StreamSvgIcon.lightning( size: 16.0, color: Colors.white, ), - radius: 12, ); break; } @@ -1677,8 +1677,8 @@ class MessageInputState extends State { ); default: return Container( - child: Icon(Icons.insert_drive_file), color: Colors.black26, + child: Icon(Icons.insert_drive_file), ); } } @@ -2147,6 +2147,9 @@ class MessageInputState extends State { mainAxisAlignment: MainAxisAlignment.center, children: [ TextButton( + onPressed: () { + Navigator.of(context).pop(); + }, child: Text( 'OK', style: StreamChatTheme.of(context) @@ -2157,9 +2160,6 @@ class MessageInputState extends State { .colorTheme .accentBlue), ), - onPressed: () { - Navigator.of(context).pop(); - }, ), ], ), @@ -2298,6 +2298,7 @@ class __PickerWidgetState extends State<_PickerWidget> { child: Container( constraints: BoxConstraints.expand(), color: StreamChatTheme.of(context).colorTheme.whiteSmoke, + alignment: Alignment.center, child: Text( 'Add more files', style: TextStyle( @@ -2305,7 +2306,6 @@ class __PickerWidgetState extends State<_PickerWidget> { fontWeight: FontWeight.bold, ), ), - alignment: Alignment.center, ), ); } diff --git a/packages/stream_chat_flutter/lib/src/message_list_view.dart b/packages/stream_chat_flutter/lib/src/message_list_view.dart index 31d95f20..e6c1e93b 100644 --- a/packages/stream_chat_flutter/lib/src/message_list_view.dart +++ b/packages/stream_chat_flutter/lib/src/message_list_view.dart @@ -624,9 +624,6 @@ class _MessageListViewState extends State { children: [ FloatingActionButton( backgroundColor: StreamChatTheme.of(context).colorTheme.white, - child: StreamSvgIcon.down( - color: StreamChatTheme.of(context).colorTheme.black, - ), onPressed: () { if (unreadCount > 0) { streamChannel.channel.markRead(); @@ -644,6 +641,9 @@ class _MessageListViewState extends State { ); } }, + child: StreamSvgIcon.down( + color: StreamChatTheme.of(context).colorTheme.black, + ), ), if (showUnreadCount) Positioned( @@ -1045,10 +1045,6 @@ class _MessageListViewState extends State { end: colorTheme.white.withOpacity(0), ), duration: const Duration(seconds: 3), - child: Padding( - padding: const EdgeInsets.only(top: 4.0), - child: child, - ), onEnd: () => initialMessageHighlightComplete = true, builder: (_, color, child) { return Container( @@ -1056,6 +1052,10 @@ class _MessageListViewState extends State { child: child, ); }, + child: Padding( + padding: const EdgeInsets.only(top: 4.0), + child: child, + ), ); } return child; diff --git a/packages/stream_chat_flutter/lib/src/message_reactions_modal.dart b/packages/stream_chat_flutter/lib/src/message_reactions_modal.dart index 61da96b7..a9e55a0a 100644 --- a/packages/stream_chat_flutter/lib/src/message_reactions_modal.dart +++ b/packages/stream_chat_flutter/lib/src/message_reactions_modal.dart @@ -238,6 +238,9 @@ class MessageReactionsModal extends StatelessWidget { borderRadius: BorderRadius.circular(32), ), Positioned( + bottom: 6, + left: isCurrentUser ? -3 : null, + right: isCurrentUser ? -3 : null, child: Align( alignment: reverse ? Alignment.centerRight : Alignment.centerLeft, @@ -251,9 +254,6 @@ class MessageReactionsModal extends StatelessWidget { highlightOwnReactions: false, ), ), - bottom: 6, - left: isCurrentUser ? -3 : null, - right: isCurrentUser ? -3 : null, ), ], ), diff --git a/packages/stream_chat_flutter/lib/src/message_widget.dart b/packages/stream_chat_flutter/lib/src/message_widget.dart index a56a60ff..7f2c83eb 100644 --- a/packages/stream_chat_flutter/lib/src/message_widget.dart +++ b/packages/stream_chat_flutter/lib/src/message_widget.dart @@ -377,9 +377,9 @@ class _MessageWidgetState extends State portal: Container( transform: Matrix4.translationValues(-12, 0, 0), - child: _buildReactionIndicator(context), constraints: BoxConstraints(maxWidth: 22 * 6.0), + child: _buildReactionIndicator(context), ), portalAnchor: Alignment(-1.0, -1.0), childAnchor: Alignment(1, -1.0), diff --git a/packages/stream_chat_flutter/lib/src/reaction_picker.dart b/packages/stream_chat_flutter/lib/src/reaction_picker.dart index b0aa51ce..a33e7b52 100644 --- a/packages/stream_chat_flutter/lib/src/reaction_picker.dart +++ b/packages/stream_chat_flutter/lib/src/reaction_picker.dart @@ -94,6 +94,19 @@ class _ReactionPickerState extends State height: 24, width: 24, ), + onPressed: () { + if (ownReactionIndex != -1) { + removeReaction( + context, + widget.message.ownReactions[ownReactionIndex], + ); + } else { + sendReaction( + context, + reactionIcon.type, + ); + } + }, child: AnimatedBuilder( animation: animations[index], builder: (context, val) { @@ -121,19 +134,6 @@ class _ReactionPickerState extends State ), ); }), - onPressed: () { - if (ownReactionIndex != -1) { - removeReaction( - context, - widget.message.ownReactions[ownReactionIndex], - ); - } else { - sendReaction( - context, - reactionIcon.type, - ); - } - }, ), ); }) diff --git a/packages/stream_chat_flutter/lib/src/stream_chat.dart b/packages/stream_chat_flutter/lib/src/stream_chat.dart index 5ad69f5a..66b49d88 100644 --- a/packages/stream_chat_flutter/lib/src/stream_chat.dart +++ b/packages/stream_chat_flutter/lib/src/stream_chat.dart @@ -92,9 +92,9 @@ class StreamChatState extends State { ), child: StreamChatCore( client: client, - child: widget.child, onBackgroundEventReceived: widget.onBackgroundEventReceived, backgroundKeepAlive: widget.backgroundKeepAlive, + child: widget.child, ), ); }, diff --git a/packages/stream_chat_flutter/lib/src/stream_neumorphic_button.dart b/packages/stream_chat_flutter/lib/src/stream_neumorphic_button.dart index bf3e8e97..35e98960 100644 --- a/packages/stream_chat_flutter/lib/src/stream_neumorphic_button.dart +++ b/packages/stream_chat_flutter/lib/src/stream_neumorphic_button.dart @@ -13,7 +13,6 @@ class StreamNeumorphicButton extends StatelessWidget { @override Widget build(BuildContext context) { return Container( - child: child, margin: EdgeInsets.all(8.0), height: 40, width: 40, @@ -35,6 +34,7 @@ class StreamNeumorphicButton extends StatelessWidget { ), ], ), + child: child, ); } } diff --git a/packages/stream_chat_flutter/lib/src/url_attachment.dart b/packages/stream_chat_flutter/lib/src/url_attachment.dart index b0584bce..9dc5cdc8 100644 --- a/packages/stream_chat_flutter/lib/src/url_attachment.dart +++ b/packages/stream_chat_flutter/lib/src/url_attachment.dart @@ -28,6 +28,9 @@ class UrlAttachment extends StatelessWidget { Container( clipBehavior: Clip.antiAliasWithSaveLayer, margin: EdgeInsets.symmetric(horizontal: 8.0), + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(8.0), + ), child: Stack( children: [ CachedNetworkImage( @@ -39,6 +42,12 @@ class UrlAttachment extends StatelessWidget { left: 0.0, bottom: -1, child: Container( + decoration: BoxDecoration( + borderRadius: BorderRadius.only( + topRight: Radius.circular(16.0), + ), + color: StreamChatTheme.of(context).colorTheme.blueAlice, + ), child: Padding( padding: const EdgeInsets.only( top: 8.0, @@ -57,19 +66,10 @@ class UrlAttachment extends StatelessWidget { ), ), ), - decoration: BoxDecoration( - borderRadius: BorderRadius.only( - topRight: Radius.circular(16.0), - ), - color: StreamChatTheme.of(context).colorTheme.blueAlice, - ), ), ), ], ), - decoration: BoxDecoration( - borderRadius: BorderRadius.circular(8.0), - ), ), Padding( padding: textPadding, diff --git a/packages/stream_chat_flutter/pubspec.yaml b/packages/stream_chat_flutter/pubspec.yaml index c42849d9..4d480154 100644 --- a/packages/stream_chat_flutter/pubspec.yaml +++ b/packages/stream_chat_flutter/pubspec.yaml @@ -1,7 +1,7 @@ name: stream_chat_flutter homepage: https://github.com/GetStream/stream-chat-flutter description: Stream Chat official Flutter SDK. Build your own chat experience using Dart and Flutter. -version: 1.3.2-beta +version: 1.4.0-beta repository: https://github.com/GetStream/stream-chat-flutter issue_tracker: https://github.com/GetStream/stream-chat-flutter/issues diff --git a/packages/stream_chat_flutter_core/CHANGELOG.md b/packages/stream_chat_flutter_core/CHANGELOG.md index ff7160ac..0bad0c4e 100644 --- a/packages/stream_chat_flutter_core/CHANGELOG.md +++ b/packages/stream_chat_flutter_core/CHANGELOG.md @@ -1,3 +1,8 @@ +## 1.4.0-beta + +* Added `MessageListCore.messageFilter` to filter messages locally +* Minor fixes and improvements + ## 1.3.2-beta * Update llc dependency diff --git a/packages/stream_chat_flutter_core/pubspec.yaml b/packages/stream_chat_flutter_core/pubspec.yaml index f3659b4e..93547384 100644 --- a/packages/stream_chat_flutter_core/pubspec.yaml +++ b/packages/stream_chat_flutter_core/pubspec.yaml @@ -1,7 +1,7 @@ name: stream_chat_flutter_core homepage: https://github.com/GetStream/stream-chat-flutter description: Stream Chat official Flutter SDK Core. Build your own chat experience using Dart and Flutter. -version: 1.3.2-beta +version: 1.4.0-beta repository: https://github.com/GetStream/stream-chat-flutter issue_tracker: https://github.com/GetStream/stream-chat-flutter/issues diff --git a/packages/stream_chat_persistence/CHANGELOG.md b/packages/stream_chat_persistence/CHANGELOG.md index fab0e874..161f2d59 100644 --- a/packages/stream_chat_persistence/CHANGELOG.md +++ b/packages/stream_chat_persistence/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.4.0-beta + +* Update llc dependency + ## 1.3.0-beta * Update llc dependency diff --git a/packages/stream_chat_persistence/example/pubspec.yaml b/packages/stream_chat_persistence/example/pubspec.yaml index f70d9d93..faa4fcd4 100644 --- a/packages/stream_chat_persistence/example/pubspec.yaml +++ b/packages/stream_chat_persistence/example/pubspec.yaml @@ -11,7 +11,7 @@ dependencies: flutter: sdk: flutter cupertino_icons: ^1.0.0 - stream_chat: ^1.3.0 + stream_chat: ^1.4.0 stream_chat_persistence: path: ../ diff --git a/packages/stream_chat_persistence/pubspec.yaml b/packages/stream_chat_persistence/pubspec.yaml index 99a780fa..ea7f4e01 100644 --- a/packages/stream_chat_persistence/pubspec.yaml +++ b/packages/stream_chat_persistence/pubspec.yaml @@ -1,7 +1,7 @@ name: stream_chat_persistence homepage: https://github.com/GetStream/stream-chat-flutter description: Official Stream Chat Persistence library. Build your own chat experience using Dart and Flutter. -version: 1.3.0-beta +version: 1.4.0-beta repository: https://github.com/GetStream/stream-chat-flutter issue_tracker: https://github.com/GetStream/stream-chat-flutter/issues