NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
pub.dev · #1074 most downloaded on pub.dev
Stream Chat official Flutter SDK. Build your own chat experience using Dart and Flutter.
Last release 8 days ago
30 Sep 2026
Ships fairly regularly
a new release about every 3 weeks
Nearly every release is documented
notes for 57 of the last 60 stable releases
1 version withdrawn
withdrawn after publishing
7 years old
269 releases · first in 2020
One column per quarter.
chore(ui): deprecate AI assistant components moved to stream_chat_flutter_ai by @renefloor in #2988
channel.dart into focused files by @VelikovPetar in #2930StreamChannelPage by @VelikovPetar in #2916Full Changelog: v10.4.0...v10.5.0
✅ Added
StreamMessageItem.semanticsLabel and StreamMessageItem.excludeFromSemantics to override or remove a message row's screen-reader announcement.StreamQuotedMessage.replyMessage, the message doing the quoting, which lets a quoted preview announce who replied to whom.StreamMessageContent.excludeTextFromSemantics and StreamMessageFooter.excludeFromSemantics to keep the text and metadata out of the semantics tree.StreamMessageComposer, via contentInsertionConfiguration.Translations.unreadMessagesSeparatorLabel, which shows an unread count in the divider.UnreadMessagesSeparator, the divider widget StreamMessageListView renders at the unread boundary.unreadCount to UnreadIndicatorButton to show a count the caller controls.🔄 Changed
file_picker to >=12.0.0 <14.0.0.PlatformFileX.toAttachmentFile and PlatformFileX.toAttachment are now async.stream_thumbnail on every platform, and the thumblr dependency is gone.libavcodec-dev libavformat-dev libavutil-dev libswscale-dev libwebp-dev.AccessibleMessagePreviewFormatter.formatMessageSemanticsLabel must now omit the speaker prefix when channel is omitted.StreamImageCDN.resolveUrl no longer overrides a size already set on the URL.shimmer dependency.implements Translations must add unreadMessagesSeparatorLabel; forward it to unreadMessagesSeparatorText() to keep the old copy.StreamMessageListView no longer marks a channel read until the unread boundary has been seen, or while it is manually marked unread.⚠️ Deprecated
withData and withReadStream on StreamAttachmentHandler.pickFile and StreamFilePicker; they no longer have any effect.Translations.unreadMessagesSeparatorText in favor of unreadMessagesSeparatorLabel.AITypingIndicatorView, AnimatedDots, StreamingMessageView, StreamTypewriterBuilder, TypewriterController, TypewriterValue, TypewriterState and TypewriterWidgetBuilder; they moved to stream_chat_flutter_ai, where StreamTypewriterBuilder is TypewriterBuilder. Add that package and update your imports.🐞 Fixed
StreamAttachmentValidator disagreeing with the server on compound extensions like .tar.gz.StreamAttachmentHandler.pickFile throwing on an empty selection; it now returns null.stream_core_flutter adds an avatar size.StreamAttachmentHandler throwing UnimplementedError on WebAssembly builds.stream-io-cdn.com being treated as Stream's CDN.StreamBackButton (the channel header's back button) doing nothing; it now presses the button.chore(llc): deprecate StreamChatClient.unflagMessage and unflagUser by @VelikovPetar in #2923
StreamChatClient.unflagMessage and unflagUser by @VelikovPetar in #2923ready future on connect by @xsahil03x in #2927Full Changelog: v10.3.0...v10.4.0
✅ Added
onReactionLongPress to StreamMessageItem and StreamMessageListView, reporting the long-pressed message's BuildContext and a ReactionLongPressDetails with the message and reaction (the reaction is null for a clustered or overflow chip that maps to no single reaction).StreamMessageContent, which was previously unreachable from package:stream_chat_flutter/stream_chat_flutter.dart.StreamChatConfigurationData.messageTranslation, a StreamMessageTranslationConfiguration with enabled (default true) to display translations from Message.i18n and annotationEnabled (default false) to opt into a "Translated"/"Original" annotation with a toggle link.StreamMessageTranslationStore, tracking which messages show their original text instead of their translation. StreamChat owns one and provides it through a StreamMessageTranslations scope, so every message list agrees on which text a message shows. Also drivable per widget via showTranslatedText and onToggleTranslatedText.⚠️ Changed
onReactionLongPress defaults to opening the ReactionDetailSheet.ReactionDetailSheet pre-filtered to that reaction; it previously opened unfiltered. Clustered and overflow chips map to no single reaction, so they still open unfiltered.🔄 Changed
>=3.44.0 and Dart SDK to ^3.12.0.🐞 Fixed
User.language set; they now show the original text.chore(samples): migrate from flutter_app_badger to app_badge_plus by @xsahil03x in #2836
onReactionPicked by @w830207 in #2823StreamBackButton unread count by @VelikovPetar in #2816pinned_at and last_message_at channel sorts by @VelikovPetar in #2878last_updated sort by @VelikovPetar in #2880Full Changelog: v10.2.0...v10.3.0
⚠️ Changed
StreamMediaGallery no longer applies its own outer padding or strips the ambient MediaQuery padding; pass padding to inset the grid.StreamMessageListView.config is now nullable; reading it off an instance yields StreamMessageListViewConfiguration? rather than a default instance.StreamMediaGalleryPreview chrome now follows the app style — floating over full-bleed media, or docked with the media inset between the bars.showScrollToBottom from the effective StreamMessageListViewConfiguration; set it to false to hide it.✅ Added
resolveSurfaceStyle to StreamMessageComposer, StreamChannelHeader, StreamChannelListHeader, and StreamThreadHeader, reporting the surface style each renders with so a page can lay its scaffold slot out to match.StreamChannelPage — a ready-to-use channel page wiring up StreamChannelHeader, StreamMessageListView, and StreamMessageComposer with floating or docked layout.StreamThreadPage — the thread equivalent, plus an onBackPressed that replaces the header back button's default pop.onBackPressed to StreamChannelHeader and StreamThreadHeader, replacing the default back button's pop without rebuilding leading. Ignored when leading is supplied.MessageComposerProps.surfaceStyle, selecting whether StreamMessageComposer renders floating or regular. Falls back to StreamMessageComposerThemeData.surfaceStyle, then the ambient StreamSurfaceStyle.StreamMessageComposerTheme and StreamMessageComposerThemeData — a component theme for the composer, also available globally as StreamChatThemeData.messageComposerTheme.StreamMessageListView.config — an explicit StreamMessageListViewConfiguration per widget, falling back to StreamChatConfigurationData.messageListViewConfiguration.StreamChatConfigurationData.messageListViewConfiguration — an app-wide StreamMessageListViewConfiguration default, passed via StreamChat.configData.StreamChannelHeader, StreamChannelListHeader, and StreamThreadHeader — each resolves the surface style from its per-header theme and republishes it to every slot, including the new StreamBackButton.isFloating.StreamMessageListViewConfiguration.autoScrollPolicy to control whether and how StreamMessageListView scrolls to the newest message when a new message arrives. Use StreamAutoScrollPolicy.disabled to fully control scrolling yourself.onReactionSelected to StreamMessageReactionPicker, a context-aware callback that provides the BuildContext for navigation.errorSubtitle to StreamScrollViewErrorWidget, which now falls back to the design's generic error copy (title, description, and a "Try Again" retry label) when values aren't provided.size (StreamLoadingSpinnerSize) parameter to StreamScrollViewLoadingWidget.onReactionTap to StreamMessageItem and StreamMessageListView, reporting the tapped message's BuildContext and a ReactionTapDetails with the tapped message and reaction (the reaction is null for a clustered or overflow chip that maps to no single reaction).StreamEphemeralMessage, the row StreamMessageListView builds for ephemeral messages, matching its already-exported StreamSystemMessage and StreamModeratedMessage siblings.unreadIndicator parameter to StreamBackButton that overlays a widget (typically a StreamUnreadIndicator) on the button's top-end corner. Pass StreamUnreadIndicator(excludeCid: cid) to show the total unread count of other channels, or StreamUnreadIndicator.channels(cid: cid) for a single channel's count.⚠️ Deprecated
StreamMessageReactionPicker.onReactionPicked in favor of onReactionSelected.onReactionsTap (and the OnReactionsTap typedef) on StreamMessageItem and StreamMessageListView in favor of onReactionTap.height/width of StreamScrollViewLoadingWidget in favor of size.StreamBackButton.showUnreadCount and StreamBackButton.channelId in favor of unreadIndicator.🐞 Fixed
StreamMessageComposer has no onError; it is now reported through FlutterError.reportError.StreamChannel loading and error states not being themed or localized; StreamChat now installs themed, connection-aware defaults, overridable per StreamChannel or via DefaultStreamChannelBuilders.StreamTypingIndicator briefly showing typing users from a different context (main channel vs. thread) on its first frame.Tooltip assertion error when a custom TabbedAttachmentPickerOption is added without a title; the tooltip is now only shown when a title is provided.StreamBackButton unread badge including the currently open channel in its total count.threadReplyCountText, which is localized and correctly singularized.ChannelLastMessageDate now reads the date off the message the preview actually shows instead of Channel.lastMessageAt, which cannot be cleared once a truncation removes every message.StreamMessageListView jumping several screens when selecting text in a message on desktop or web. The ScrollablePositionedList viewports now account for their anchor in getOffsetToReveal, so implicit reveals (Scrollable.ensureVisible, RenderObject.showOnScreen) no longer overshoot. #2862StreamSendingIndicator.color to override the indicator's icon color.🔄 Changed
chore(deps): bump actions/checkout from 6 to 7 in the all-actions group by @dependabot [bot] in #2784
StreamChannelListController not handling notificaton.channel_deleted event by @VelikovPetar in #2791X-Stream-Client to prevent customers overriding internal values by @VelikovPetar in #2790shadowed messages not hidden in the channel list by @VelikovPetar in #2787message.updated/message.deleted events by @VelikovPetar in #2794Full Changelog: v10.1.0...v10.2.0
⚠️ Changed
media_kit and media_kit_video. When running the VideoPlayer on Windows or Linux platforms, you need to add media_kit dependency to your pubspec.yaml file and create a custom StreamVideoPlayer implementation in the streamChatComponentBuilders. (#2828)✅ Added
AccessibilityTranslations on Translations (accessed via context.translations.accessibility) — screen-reader labels, tooltips, hints, and live-region announcements. Includes formatDateTime, formatDuration, and formatRecentDateTime formatters.AccessibleMessagePreviewFormatter — an optional interface extending MessagePreviewFormatter with formatMessageSemanticsLabel and formatDraftMessageSemanticsLabel. StreamMessagePreviewText, StreamDraftMessagePreviewText, and StreamSendingIndicator now emit natural-language screen-reader labels for the channel list.semanticsLabel to StreamChannelAvatar. Group channels emit a default "Group" label; direct-message avatars stay silent.semanticsLabel to StreamTimestamp. Defaults to a bucketed natural-language phrasing via AccessibilityTranslations.formatRecentDateTime.LastMessagePredicate typedef for the ChannelLastMessageText.lastMessagePredicate filter.semanticsLabel to StreamUserAvatar, StreamUserAvatarGroup, and StreamUserAvatarStack.StreamVideoPlayer overridable via the StreamComponentFactory (streamChatComponentBuilders(videoPlayer: ...)), with the previous implementation now available as DefaultStreamVideoPlayer.🐞 Fixed
HTTPS://) by normalizing the scheme before enriching.StreamMessageListView firing markThreadRead on a reply-less parent, which produced a guaranteed 404 every time the thread view was opened before the first reply.StreamMessageListView unread indicator being ignored while a channel is receiving a rapid burst of messages.StreamTypingIndicator rebuilding on every typing event by comparing the typing users by id, so it only rebuilds when the set of typing users changes.StreamChannelListTile announcing avatar initials and unlabeled fragments — now merges into a single accessible row summary with labeled avatar, muted / pinned icons, and unread badge.StreamThreadListTile announcing content as flat comma-separated fragments — now merges into a single accessible row summary and labels the unread badge with the localized "N unread messages" phrasing.attachmentPickerTooltip to state-agnostic "Toggle attachment picker" so screen readers no longer announce "Open attachment picker" while the picker is already expanded.voiceRecordingText casing to sentence case ("Voice recording").formatRecentDateTime hardcoding 24-hour time — displayed and announced timestamps now follow the locale's convention (e.g. 24-hour in Germany, 12-hour in India).get_thumbnail_video dependency with Stream's own stream_thumbnail plugin, resolving the iOS duplicate-VideoThumbnailPlugin-symbol crash when an app also uses video_thumbnail/video_editor (#2360).fix(ui): wire onUserAvatarTap on StreamMessageItem by @xsahil03x in #2743
PredefinedFilters on QueryChannels by @VelikovPetar in #2709message.read events delivered for threads by @VelikovPetar in #2780Full Changelog: v10.0.1...v10.1.0
🐛 Fixed
StreamAttachmentPickerController, StreamAudioRecorderController, and StreamAudioPlaylistController: async methods could write value after dispose(), causing a notifyListeners() assertion throw in debug mode. All three now use the DisposeAwareValueNotifier mixin from stream_chat_flutter_core.✅ Added
@channel, @here, role, and user-group mentions — parsed on incoming messages, rendered as styled tappable spans in message text, and selectable from the composer's @ autocomplete.mentionItemBuilder on StreamMessageComposer and StreamMentionAutocompleteOptions that receives StreamMentionItemProps and covers every mention kind. Customise globally via streamChatComponentBuilders(mentionItem: ...) or per-instance via the new constructor parameter. Defaults are rendered by DefaultStreamMentionItem. Also added onMention*Tap callbacks on StreamMentionAutocompleteOptions.StreamMessageListView.onMentionTap and StreamMessageItem.onMentionTap — receives a typed StreamMention (StreamUserMention, StreamChannelMention, StreamHereMention, StreamRoleMention, or StreamGroupMention).StreamMessageComposer now surfaces the hold-to-record hint through StreamSnackbar anchored above the composer, and StreamChat provides an app-wide StreamSnackbarScope fallback.commandValidator prop on StreamCommandAutocompleteOptions and StreamCommandPicker for marking rows as unavailable; disabled rows remain tappable so the caller can surface feedback.StreamMessageComposer now surfaces a StreamSnackbar when the user taps a disabled slash command in the picker or autocomplete, explaining why it's blocked.⚠️ Deprecated
StreamAudioRecorderController.showInfo is now deprecated. Show your own snackbar via StreamSnackbarMessenger.of(context).show(StreamSnackbar(...)) instead.RecordStateIdle.message is now deprecated; the composer no longer reads it.userMentionsTileBuilder on StreamMessageComposer and mentionsTileBuilder on StreamMentionAutocompleteOptions in favor of mentionItemBuilder.StreamMessageListView.onUserMentionTap and StreamMessageItem.onUserMentionTap in favor of onMentionTap.UserListX.search.🔄 Changed
🐞 Fixed
StreamMessageItem.onUserAvatarTap now fires when the author avatar is tapped. (#2741)MessageComposerProps.copyWith so factory overrides can tweak individual props (e.g. useSystemAttachmentPicker) without re-specifying every field. (#2742)StreamMessageContent no longer re-runs setState on every inherited-widget change when the measured attachment width has not changed. (#2761)chore(repo): remove deprecated classes, methods, and properties by @xsahil03x in #2306
attachmentPickerOptionsBuilder by @xsahil03x in #2415SampleAppConfig and modernize UI architechture by @xsahil03x in #2614messageLimit is respected in getChannelStates by @VelikovPetar in #2717master to v10.0.0 (08.06.2026) by @VelikovPetar in #2731Full Changelog: v9.25.0...v10.0.1
🐞 Fixed
colorScheme.textDisabled) when a cooldown is active, matching the rest of the composer.StreamUserAvatar with StreamAvatarSize.xxl now uses StreamOnlineIndicatorSize.xxl (20px) instead of xl (16px), matching the Chat SDK design system spec.Bad state: No element on every channel state update when the parent message wasn't in the channel's loaded window.StreamMessageComposer no longer clobbers pre-populated composer state (text, quoted message, attachments) when the channel's draft stream emits its initial null (no draft on server). The reset now fires only on an actual non-null → null transition, distinguishing "no draft yet" from "draft was removed".✅ Added
StreamMessageComposer now validates attachments against the app's AppSettings (configured in the Stream Dashboard) — enforcing size, extension/MIME, and count rules. Pass onError to handle the typed AttachmentLimitReachedError, AttachmentTooLargeError, or AttachmentBlockedError instead of the default error sheet.Translations.fileTypeNotSupportedError(String? extension) — surfaced by the composer when an attachment's extension or MIME type is rejected.BlockUser / UnblockUser default message actions, dispatching to StreamChatClient.blockUser / unblockUser.🔄 Internal / Non-breaking
Reordered the default message actions to match the design system.
Renamed default English threadReplyLabel ('Thread' → 'Thread Reply') and markAsUnreadLabel ('Mark as Unread' → 'Mark Unread').
StreamThreadHeader default title now sources from the new threadLabel translation key instead of threadReplyLabel, restoring the short 'Thread' header.
ReactionIconResolver.supportedReactions is now wired to the full emoji picker sheet opened by the "+" button in StreamMessageReactionPicker and the add-emoji chip in ReactionDetailSheet. Override supportedReactions on a custom resolver to control which reactions appear in the full picker grid.
Composer UI primitives (StreamMessageComposerInputField, VoiceRecordingCallback, and the outer/inner layout containers) are now owned by stream_chat_flutter and exported from this package. They were previously supplied by stream_core_flutter. The public API of StreamMessageComposer / StreamChatMessageInput and its sub-components is unchanged.
Re-export StreamAvatarTheme and StreamAvatarThemeData from stream_core_flutter so consumers can theme avatars without adding a separate stream_core_flutter import.
Added messageLeading, messageHeader, and messageFooter factory slots to streamChatComponentBuilders for overriding the message item's avatar, annotations, or metadata row without replacing the whole messageItem.
Bumped jiffy to ^6.4.5 to pick up cached locale and DateFormat lookups for cheaper relative-time formatting.
Raised minimum Flutter to >=3.41.0 and Dart SDK to ^3.11.0.
🛑️ Breaking
StreamChatConfigurationData.draftMessagesEnabled now defaults to true. Draft messages are enabled out of the box; pass draftMessagesEnabled: false to opt out.StreamChatConfigurationData.enforceUniqueReactions now defaults to false. Users can add multiple distinct reaction types to a message by default; pass enforceUniqueReactions: true to restore the previous behaviour.StreamMessageComposer.enableVoiceRecording now defaults to true. The voice recording button is shown out of the box; pass enableVoiceRecording: false to opt out.StreamMessageListView had its large set of configuration and builder parameters reorganized. Behavior flags (e.g. swipeToReply, markReadWhenAtTheBottom, showScrollToBottom, reverse, paginationLimit, scrollPhysics, etc.) moved to StreamMessageListViewConfiguration, passed directly as StreamMessageListView.config. Custom builder callbacks (headerBuilder, footerBuilder, loadingBuilder, emptyBuilder, errorBuilder, messageListBuilder, parentMessageBuilder, dateDividerBuilder, floatingDateDividerBuilder, threadSeparatorBuilder, unreadMessagesSeparatorBuilder, scrollToBottomBuilder, paginationLoadingIndicatorBuilder, spacingWidgetBuilder, systemMessageBuilder, ephemeralMessageBuilder, moderatedMessageBuilder) moved to StreamMessageListViewBuilders, passed directly as StreamMessageListView.builders. The messageBuilder parameter is back at the root of the constructor as before.file_picker to ^11.0.0 to resolve #2599. Apps depending on file_picker directly must also upgrade past 11.0.0, which replaces the instance-based FilePicker.platform.* API with static FilePicker.* methods.StreamChat.streamChatThemeData → StreamChat.themeData and StreamChat.streamChatConfigData → StreamChat.configData. The StreamChatState.streamChatConfigData getter is now StreamChatState.configData.StreamMessageComposer.messageInputController parameter to messageComposerController.StreamDraftListView, StreamDraftListTile, StreamDraftListTileTheme, and StreamDraftListTileThemeData from the SDK. Also removed StreamChatThemeData.draftListTileTheme. Refer to the sample app for a reference implementation using StreamDraftListController and PagedValueListView.StreamMessageComposerInput → StreamMessageComposerInputCenter (and DefaultStreamMessageComposerInput → DefaultStreamMessageComposerInputCenter). The name StreamMessageComposerInput is now the input container widget (assembles header, leading, center, trailing).MessageComposerInputProps → MessageComposerInputCenterProps. The name MessageComposerInputProps now refers to the new container widget's props.messageComposerInput builder key in streamChatComponentBuilders → messageComposerInputCenter. The name messageComposerInput now overrides the whole input container.StreamMessageInput.hintGetter with placeholderBuilder over a sealed MessageInputPlaceholder.
See migrations/redesign/message_composer.md.StreamMessageListView.unreadIndicatorBuilder; use StreamComponentFactory.jumpToUnreadButton.UnreadIndicatorButton.onTap → onJumpTap.StreamAttachmentUploadStateBuilder.successBuilder and the SuccessBuilder typedef (unreachable).StreamFileAttachmentThumbnail; use StreamImageAttachmentThumbnail / StreamVideoAttachmentThumbnail or StreamFileTypeIcon.fromMimeType(...).StreamMessageThemeData (ownMessageTheme / otherMessageTheme) and StreamMessageInputThemeData (messageInputTheme).StreamChannelPreviewThemeData (channelPreviewTheme).MessageDetails class. The new messageBuilder signature no longer receives it — use StreamChat.of(context).currentUser and StreamMessageLayout.of(context) instead. See migrations/redesign/message_list.md.StreamPollOptionsDialog / StreamPollResultsDialog / StreamPollOptionVotesDialog / StreamPollCommentsDialog (and their show* helpers and ...DialogThemeData types) → ...Sheet. They now render as modal bottom sheets.StreamPollCreatorDialog / StreamPollCreatorFullScreenDialog (and showStreamPollCreatorDialog) with a single StreamPollCreatorSheet (showStreamPollCreatorSheet) that renders as a modal bottom sheet, matching the other poll sheets. StreamPollCreatorWidget gained an optional scrollController parameter.primaryActionStyle and secondaryActionStyle from StreamPollCreatorThemeData. Use the new sheetHeaderStyle.trailingStyle / sheetHeaderStyle.leadingStyle instead — see migrations/redesign/attachments_and_polls.md.StreamPollOptionsSheetThemeData, StreamPollResultsSheetThemeData, StreamPollOptionVotesSheetThemeData and StreamPollCommentsSheetThemeData — see migrations/redesign/attachments_and_polls.md.Translations.questionsLabel getter → questionLabel({bool isPlural = false}) method.Translations.endVoteConfirmationText → endVoteConfirmationTitle; English default changed to 'End This Poll?'.Translations.slowModeOnLabel getter → slowModeOnLabel(int cooldownTimeOut) method; English default changed from 'Slow mode ON' to 'Slow mode, wait ${cooldownTimeOut}s\u2026'. While slow mode is active for the current user the composer text input is now disabled and the trailing send button is replaced by a disabled countdown button showing the remaining seconds, matching the redesigned Figma. See migrations/redesign/message_composer.md.Translations.endVoteLabel English default to 'End Poll'.AttachmentButton, StreamQuotedMessageWidget, EditMessageSheet, StreamMessageSendButton and DesktopReactionsBuilder.StreamChannelGridView, StreamChannelGridTile and StreamMessageSearchGridView.StreamMessageActionConfirmationModal.cancelActionTitle / confirmActionTitle are now nullable and fall back to Translations.cancelLabel / confirmLabel.Translations.attachmentsUploadProgressText parameter remaining → completed.Translations default strings and added new abstract members — see migrations/redesign/localizations.md.MuteIconPosition → AttributePosition (values title → inlineTitle, subtitle → trailingBottom) and StreamChannelListItemThemeData.muteIconPosition → attributePosition. Now controls both mute and pin icons in StreamChannelListTile.AttachmentModalSheet, ErrorAlertSheet and StreamChannelInfoBottomSheet.StreamMarkdownMessage; use StreamMessageText (re-exported from stream_core_flutter) instead.StreamMessageWidget → StreamMessageItem (file moved to message_item.dart).DefaultStreamMessage → DefaultStreamMessageItem.StreamMessageWidgetProps → StreamMessageItemProps.StreamMessageWidgetBuilder typedef → StreamMessageItemBuilder.StreamMessageAnnotations → StreamMessageHeader.StreamMessageMetadata → StreamMessageFooter.ParseAttachments → StreamMessageAttachments.streamChatComponentBuilders(messageWidget: ...) → messageItem: ....StreamMessageContent(annotation: ..., metadata: ...) → header: ..., footer: ....
See migrations/redesign/message_widget.md.StreamFullScreenMedia (and its StreamFullScreenMediaBuilder / FullScreenMediaWidget / FullScreenMediaDesktop / fsm_stub variants) with a single cross-platform StreamMediaGalleryPreview. Renamed mediaAttachmentPackages → attachments, startIndex → initialIndex; dropped userName, sentAt, onReplyMessage, onShowMessage and attachmentActionsModalBuilder from its surface.StreamGalleryHeader → StreamMediaGalleryPreviewHeader and StreamGalleryFooter → StreamMediaGalleryPreviewFooter, rebuilt on StreamAppBar / StreamBottomAppBar. Both shrank to a title (+ optional subtitle) and minimal action callbacks; the more-actions overflow header was removed.StreamAttachmentPackage → StreamMediaGalleryAttachment and added a Message.toMediaGalleryAttachments({filter}) extension.VideoPackage, DesktopVideoPackage and GalleryNavigationItem from the public API — each preview page now owns its own player state internally.StreamMessageItem.onShowMessage / attachmentActionsModalBuilder and the matching StreamMessageListView / StreamMessageContent props; those callbacks no longer have a destination after the gallery overflow was removed.StreamChatThemeData.galleryHeaderTheme, StreamChatThemeData.galleryFooterTheme (and the imageFooterTheme: constructor parameter) and the StreamGalleryFooterThemeData class. Header / footer chrome now flows through StreamAppBarThemeData / StreamBottomAppBarThemeData.StreamAvatarThemeData.
See migrations/redesign/media_viewer.md.StreamMessageComposer.maxAttachmentSize (and the kDefaultMaxAttachmentSize constant). Per-type size limits come from StreamChatClient.appSettings (configured in the Stream Dashboard).StreamMessageComposer.onAttachmentLimitExceed and the AttachmentLimitExceedListener typedef. Use onError for custom error handling.StreamMessageComposer.attachmentLimit is now a non-nullable int defaulting to 30 (the per-message attachment cap). Previously int? defaulting to null ("no limit").StreamAttachmentPickerController constructor now takes a single validator: StreamAttachmentValidator parameter (replaces the previous size / limit / config parameters).✅ Added
StreamVideoPlayIndicator for the play-button overlay.StreamSystemMessage / StreamModeratedMessage with a pill-shaped style and visual customisation props.ThreadSeparator and UnreadMessagesSeparator.StreamUnsupportedAttachment and UnsupportedAttachmentBuilder for unrecognised attachment types.StreamMediaGallery — a 3-up thumbnail grid that pairs with StreamMediaGalleryPreview. Each tile surfaces the sender's avatar (StreamUserAvatar) plus a video duration badge for video attachments. Used by StreamMediaGalleryPreviewFooter's gallery-grid sheet and ready to drop into channel-level media listings. Customisable via streamChatComponentBuilders(mediaGallery: ...).StreamMediaGalleryPreview — the redesigned full-screen swipeable viewer. Built on the design system's StreamMediaViewer, StreamAppBar and StreamBottomAppBar. Customisable via streamChatComponentBuilders(mediaGalleryPreview: ...). Exposes StreamMediaGalleryPreviewScope so per-page widgets (e.g. videos) can react to the active page.StreamVideoPlayer — the platform-aware video backend used by StreamMediaGalleryPreview. Pauses itself when its page is no longer active and resumes on return.Translations.photosAndVideosLabel — used by the footer's thumbnail-grid sheet header.StreamQuotedMessage and StreamQuotedMessageThemeData for the quoted message preview.MessagePreviewFormatter now renders AttachmentType.urlPreview messages with a link icon and caption / OG title / linkAttachmentText fallback.StreamPollCardStyle, StreamPollQuestionStyle and StreamPollOptionVotesStyle shared style classes for the poll sheets.StreamPollResultsSheet.sheetHeaderStyle field to each poll sheet theme data (including StreamPollCreatorThemeData).StreamSheetHeader, StreamSheetHeaderStyle, StreamSheetHeaderTheme and StreamSheetHeaderThemeData from stream_core_flutter.showStreamSheet, StreamSheet, StreamSheetDragHandle, StreamSheetRoute, StreamSheetTransition, StreamSheetScrollableWidgetBuilder, StreamSheetTheme and StreamSheetThemeData from stream_core_flutter. Poll sheets (StreamPollOptionsSheet, StreamPollResultsSheet, StreamPollOptionVotesSheet, StreamPollCommentsSheet, StreamPollCreatorSheet) now present as Stream-styled modal bottom sheets via showStreamSheet. See migrations/redesign/attachments_and_polls.md.StreamMessageAttachment and StreamMessageAttachmentStyle from stream_core_flutter.BoxFit? fit parameter to ThumbnailSizeCalculator.calculate (null defaults to BoxFit.scaleDown, matching paintImage) so callers using cover / fill get a bitmap large enough to render without upscale blur.Translations.totalVoteCountLabel({int? count}), viewAllLabel, pollVotesLabel, endVoteConfirmationMessage and questionLabel({bool isPlural = false}).Translations.reactionsCountText(int count) for the reaction-detail sheet header.StreamChannelListTile.isPinned — renders a pin icon alongside the existing mute icon for pinned channels.StreamScrollViewLoadMoreError and StreamScrollViewLoadMoreIndicator from the public API.StreamTimestamp, DateFormatter, formatDate and formatRecentDateTime from the public API.DateTimeComparisonUtils extension on DateTime (isToday, isYesterday, isWithinLastMinute, isWithinLastWeek, isInSameYear, isSame(other, unit:)) and the DateTimeUnit enum (year / month / day / hour / minute / second / millisecond / microsecond). All getters compare in local time and read the current instant via package:clock, so they're testable under withClock(...).🔄 Changed
share_plus to >=12.0.2 <14.0.0 so apps can adopt the latest major. Raised minimum versions of bundled UI/media dependencies (cached_network_image, chewie, desktop_drop, diacritic, file_selector, flutter_markdown, flutter_svg, gal, image_picker, image_size_getter, jiffy, just_audio, lottie, media_kit, media_kit_video, photo_manager, url_launcher, video_player) to current resolved versions.StreamChat.backgroundKeepAlive from 1 minute to 15 seconds,
matching StreamChatCore. See stream_chat_flutter_core changelog for rationale.StreamPhotoGalleryTile now auto-sizes the platform thumbnail request from the tile's layout × DPR (132px fallback) instead of always asking for 400×400, so cells decode only what they paint. Pass an explicit thumbnailSize to override.formatRecentDateTime reworked to a five-state cascade matching the Figma design system: Just now (< 1 min) / Today at H:mm / Yesterday at H:mm / Weekday at H:mm (within the last week) / MMM do at H:mm (older). Previously emitted formatDate-style output with the time appended.🐞 Fixed
stream_core_flutter.StreamCommandAutocompleteOptions and StreamMentionAutocompleteOptions expanding to half the screen height — both now cap at a fixed max height (208px / 176px) and scroll internally so the list can't dominate the screen or overlap the header.updateMessage instead of sendMessage.EndOfFrameCallbackWidget showing a generic error string when its callback throws.StreamPhotoGalleryTile missing rounded corners and its badges not mirroring in RTL.StreamVoiceRecordingAttachmentPlaylist.didUpdateWidget now compares the projected playlist (content-based equality on track uri / title / duration / waveform) instead of the raw Attachment list, so re-syncs that mint fresh client-side Attachment UUIDs no longer trip a needless updatePlaylist() mid-playback.PollAddCommentDialog and PollSuggestOptionDialog accepting whitespace-only or unchanged submissions; the confirm action now disables when the trimmed text is empty or matches the initial value.StreamPhotoGalleryTile using a hand-rolled icon as its loading placeholder and silently rendering nothing on decode failure. Now uses the shared StreamImageLoadingPlaceholder while loading and StreamImageErrorPlaceholder if the thumbnail fails to load.CANCEL, SEND, FLAG, DELETE); they now use the localized labels as-is so they match the rest of the system.loadChannelAtMessage.Nothing published for this version
feat(repo)!: design refresh by @xsahil03x in #2503
Full Changelog: v10.0.0-beta.12...v10.0.0-beta.13
🛑️ Breaking
Fixed regression in emoji_code support for reactions.
🐞 Fixed
emoji_code support for reactions.🛑️ Breaking
ArgumentError with typed errors in StreamAttachmentPickerController:
AttachmentTooLargeError (file size exceeds limit) and AttachmentLimitReachedError
(attachment count exceeds limit). [#2476]For more details, please refer to the migration guide.
9.23.0.Included the changes from version `9.22.0`.
9.22.0.Included the changes from version `9.21.0`.
9.21.0.Added reactionIndicatorBuilder parameter to StreamMessageWidget for customizing reaction indicators. Users can now display reaction counts alongside e
✅ Added
Added reactionIndicatorBuilder parameter to StreamMessageWidget for customizing reaction
indicators. Users can now display reaction counts alongside emojis on mobile, matching desktop/web
behavior. Fixes #2434.
// Example: Show reaction count next to emoji
StreamMessageWidget(
message: message,
reactionIndicatorBuilder: (context, message, onTap) {
return StreamReactionIndicator(
message: message,
onTap: onTap,
reactionIcons: StreamChatConfiguration.of(context).reactionIcons,
reactionIconBuilder: (context, icon) {
final count = message.reactionGroups?[icon.type]?.count ?? 0;
return Row(
children: [
icon.build(context),
const SizedBox(width: 4),
Text('$count'),
],
);
},
);
},
)
Added reactionIconBuilder and backgroundColor parameters to StreamReactionPicker.
Exported StreamReactionIndicator and related components (ReactionIndicatorBuilder,
ReactionIndicatorIconBuilder, ReactionIndicatorIcon, ReactionIndicatorIconList).
🛑️ Breaking
onAttachmentTap callback signature changed to include BuildContext as first parameter and
returns FutureOr<bool> to indicate if handled.
// Before
StreamMessageWidget(
message: message,
onAttachmentTap: (message, attachment) {
// Could only override - no way to fallback to default behavior
if (attachment.type == 'location') {
showLocationDialog(context, attachment);
}
// Other attachment types lost default behavior
},
)
// After
StreamMessageWidget(
message: message,
onAttachmentTap: (context, message, attachment) async {
if (attachment.type == 'location') {
await showLocationDialog(context, attachment);
return true; // Handled by custom logic
}
return false; // Use default behavior for images, videos, URLs, etc.
},
)
ReactionPickerIconList constructor changed: removed message parameter, changed reactionIcons
type to List<ReactionPickerIcon>, renamed onReactionPicked to onIconPicked.
For more details, please refer to the migration guide.
9.20.0.onCustomAttachmentPickerResult has been removed. Use onAttachmentPickerResult which returns FutureOr to indicate if the result was handled. ```dart //
🛑️ Breaking
onCustomAttachmentPickerResult has been removed. Use onAttachmentPickerResult which returns FutureOr<bool> to indicate if the result was handled.
// Before
StreamMessageInput(
onCustomAttachmentPickerResult: (result) {
// Handle custom location attachment
final location = result.data['location'];
sendLocationMessage(location);
},
)
// After
StreamMessageInput(
onAttachmentPickerResult: (result) {
if (result is CustomAttachmentPickerResult) {
// Handle custom location attachment
final location = result.data['location'];
sendLocationMessage(location);
return true; // Skip default handling
}
return false; // Use default handling for built-in types
},
)
customAttachmentPickerOptions has been removed. Use attachmentPickerOptionsBuilder to modify, reorder, or extend default options.
// Before - could only add custom options
StreamMessageInput(
customAttachmentPickerOptions: [
TabbedAttachmentPickerOption(
key: 'location',
icon: Icon(Icons.location_on),
// ...
),
],
)
// After - can now modify, filter, or extend default options
StreamMessageInput(
attachmentPickerOptionsBuilder: (context, defaultOptions) {
return [
...defaultOptions, // Keep all default options
TabbedAttachmentPickerOption(
key: 'location',
icon: Icon(Icons.location_on),
// ...
),
];
},
)
For more details, please refer to the migration guide.
9.19.0.Added support for StreamMessageWidget.deletedMessageBuilder to customize the deleted message UI.
✅ Added
Added support for StreamMessageWidget.deletedMessageBuilder to customize the deleted message UI.
Included the changes from version 9.18.0.
Fixed users with sendReply capability unable to send replies in threads.
🐞 Fixed
Fixed users with sendReply capability unable to send replies in threads.
Fixed delete/flag message dialogs executing action when dialog is dismissed without confirmation.
Included the changes from version 9.17.0.
Included the changes from version `9.16.0`.
9.16.0.Added emojiCode property to StreamReactionIcon to support custom emojis in reactions.
✅ Added
Added emojiCode property to StreamReactionIcon to support custom emojis in reactions.
Updated default reaction builders with standard emoji codes. (❤️, 👍, 👎, 😂, 😮)
Added StreamChatConfiguration.maybeOf() method for safe context access in async operations.
Included the changes from version 9.15.0.
Deprecated API Cleanup: Removed all deprecated classes, methods, and properties for the v10 major release:
🛑️ Breaking
DmCheckbox (use DmCheckboxListTile), StreamIconThemeSvgIcon (use StreamSvgIcon), StreamVoiceRecordingThemeData (use StreamVoiceRecordingAttachmentThemeData), StreamVoiceRecordingLoading, StreamVoiceRecordingSlider (use StreamAudioWaveformSlider), StreamVoiceRecordingPlayer (use StreamVoiceRecordingAttachment), StreamVoiceRecordingListPlayer (use StreamVoiceRecordingAttachmentPlaylist)reactionIcons and voiceRecordingTheme from StreamChatTheme, isThreadConversation from FloatingDateDivider, idleSendButton and activeSendButton from StreamMessageInput, isCommandEnabled and isEditEnabled from StreamMessageSendButton, assetName, width, and height from StreamSvgIconuseNativeAttachmentPickerOnMobile from various components, allowCompression from StreamAttachmentHandler.pickFile() and StreamFilePicker (use compressionQuality instead), cid from StreamUnreadIndicator constructorlastUnreadMessage() from message list extensions (use StreamChannel.getFirstUnreadMessage), loadBuffer() and _loadAsync() from StreamVideoThumbnailImageStreamSvgIcon(icon: StreamSvgIcons.iconName) instead of factory constructors like StreamSvgIcon.add()PollMessage widget has been removed and replaced with PollAttachment for better integration with the attachment system. Polls can now be customized through PollAttachmentBuilder or by creating custom poll attachment widgets via the attachment builder system.AttachmentPickerType enum has been replaced with a sealed class to support extensible custom types like contact and location pickers. Use built-in types like AttachmentPickerType.images or define your own via CustomAttachmentPickerType.StreamAttachmentPickerOption has been replaced with two sealed classes to support layout-specific picker options: SystemAttachmentPickerOption for system pickers (e.g. camera, files) and TabbedAttachmentPickerOption for tabbed pickers (e.g. gallery, polls, location).showStreamAttachmentPickerModalBottomSheet now returns a StreamAttachmentPickerResult instead of AttachmentPickerValue for improved type safety and clearer intent handling.StreamMobileAttachmentPickerBottomSheet has been renamed to StreamTabbedAttachmentPickerBottomSheet, and StreamWebOrDesktopAttachmentPickerBottomSheet has been renamed to StreamSystemAttachmentPickerBottomSheet to better reflect their respective layouts.For more details, please refer to the migration guide.
✅ Added
Added extraData field to AttachmentPickerValue to support storing and retrieving custom picker state (e.g. tab-specific config).
Added customAttachmentPickerOptions to StreamMessageInput to allow injecting custom picker tabs like contact and location pickers.
Added onCustomAttachmentPickerResult callback to StreamMessageInput to handle results returned by custom picker tabs.
Included the changes from version 9.14.0.
Included the changes from version `9.13.0`.
9.13.0.StreamReactionPicker now requires reactions to be explicitly handled via onReactionPicked. *(Automatic handling is no longer supported.)*
🛑️ Breaking
StreamReactionPicker now requires reactions to be explicitly handled via onReactionPicked. (Automatic handling is no longer supported.)StreamMessageAction is now generic (StreamMessageAction<T>), enhancing type safety. Individual onTap callbacks have been removed; actions are now handled centrally by widgets like StreamMessageWidget.onCustomActionTap or modals using action types.StreamMessageReactionsModal no longer requires the messageTheme parameter. The theme now automatically derives from the reverse property.StreamMessageWidget no longer requires the showReactionTail parameter. The reaction picker tail is now always shown when the reaction picker is visible.For more details, please refer to the migration guide.
✅ Added
StreamMessageActionsBuilder which provides a list of actions to be displayed in the message actions modal.StreamMessageActionConfirmationModal for confirming destructive actions like delete or flag.StreamMessageModal and showStreamMessageModal for consistent message-related modals with improved transitions and backdrop effects.showStreamMessageModal(
context: context,
...other parameters,
builder: (context) => StreamMessageModal(
...other parameters,
headerBuilder: (context) => YourCustomHeader(),
contentBuilder: (context) => YourCustomContent(),
),
);
desktopOrWeb parameter to PlatformWidgetBuilder to allow specifying a single builder for both desktop and web platforms.reactionPickerBuilder to StreamMessageActionsModal, StreamMessageReactionsModal, and StreamMessageWidget to enable custom reaction picker widgets.StreamReactionIcon.defaultReactions providing a predefined list of common reaction icons.StreamMessageActionsModal and StreamModeratedMessageActionsModal which are now based on StreamMessageModal for consistent styling and behavior.perf(llc): speed up converting models to and from JSON by @xsahil03x in #3001
Full Changelog: v9.30.0...v9.31.0
fix(llc): Fix members removed from a channel keeping their read state in the channel state (v9) by @VelikovPetar in #2967
Full Changelog: v9.29.0...v9.30.0
chore(llc): deprecate StreamChatClient.unflagMessage and unflagUser (v9) by @VelikovPetar in #2924
flutter-version-bump skill for v9 by @VelikovPetar in #2902StreamChatClient.unflagMessage and unflagUser (v9) by @VelikovPetar in #2924ready future, don't let reconnect recovery throw into the root zone by @xsahil03x in #2939Full Changelog: v9.28.0...v9.29.0
fix(ui): enrich link previews for uppercase URL schemes by @xsahil03x in #2844
last_updated sort by @VelikovPetar in #2892pinned_at and last_message_at channel sorts by @VelikovPetar in #2889Full Changelog: v9.27.0...v9.28.0
fix(llc): suppress EquatableMixin deprecation warning in StreamChatError by @VelikovPetar in #2802
PredefinedFilters on QueryChannels(v9) by @VelikovPetar in #2775EquatableMixin deprecation warning in StreamChatError by @VelikovPetar in #2802X-Stream-Client to prevent customers overriding internal values (v9) by @VelikovPetar in #2799StreamChannelListController not handling notification.channel_deleted event (v9). by @VelikovPetar in #2800shadowed messages not hidden in the channel list by @VelikovPetar in #2788message.updated/message.deleted events by @VelikovPetar in #2815Full Changelog: v9.26.0...v9.27.0
chore(ci): run pana and legacy analyze on v9 branch by @renefloor in #2756
UpsertPushPreferencesResponse null values parsing by @VelikovPetar in #2749message.read events delivered for threads [v9] by @VelikovPetar in #2781Full Changelog: v9.25.0...v9.26.0
ci(repo): centralize path/draft gating in a per-workflow gate job by @xsahil03x in #2669
ChatPersistenceClient.getChannelStates() by @VelikovPetar in #2664DateTime as ISO-8601 text in DB to preserve sub-seconds precision by @VelikovPetar in #2694Full Changelog: v9.24.0...v9.25.0
🐞 Fixed
ScrollablePositionedList.scrollTo taking the long-distance teleport path when called
immediately after mount (before itemPositions had been published). It now waits one frame
for layout, then animates the real pixel distance.StreamMessageListView not auto-scrolling to the bottom on the user's own outgoing message
until the server confirmed it.StreamMessageListView tripping A RenderViewport exceeded its maximum number of layout cycles under mid-list anchored layout. ScrollablePositionedList now preserves the scroll offset
across reanchors instead of resetting it to 0.RenderBox was not laid out thrown by MessageCard._updateWidthLimit when the attachments
subtree was detached between scheduling the post-frame callback and it firing (e.g. the list was
rebuilt or the message removed). Added a hasSize guard before reading RenderBox.size.🚀 Improved
ScrollablePositionedList.padding now accepts EdgeInsetsGeometry (resolved against
Directionality), and scrollTo lands the target at the content-area edge by adjusting for
leading padding.StreamChat.of now resolves via StreamStateScope instead of findAncestorStateOfType, replacing
an O(tree-depth) element walk with an O(1) inherited-widget lookup. Callers and behavior are
unchanged.fix(llc): bump jose floor to 0.3.5+1 for CVE-2026-34240 by @xsahil03x in #2658
pana reports by @VelikovPetar in #2656filter param in Client.queryDrafts by @VelikovPetar in #2647SortedListX.merge by @xsahil03x in #2660Full Changelog: v9.23.0...v9.24.0
✅ Added
StreamMessageListView now accepts maximumMessageLimit to cap the loaded message list. See
MessageListCore for the trim semantics.🐞 Fixed
StreamMessageListView thread page crashing with StateError when the parent message was no
longer present in the channel's loaded messages (e.g. filtered, shadowed, or paginated out). The
thread now falls back to the captured parent message in that case.🚀 Improved
StreamMessageListView's markRead / markThreadRead now fire on the leading edge of their 1s
debounce window, so the first read receipt after entering a channel or sending a message hits the
server immediately instead of waiting for the trailing edge. The redundant local unreadCount = 0
short-circuit on own-message send was removed — the leading-edge mark plus readStream updates
now keep the unread badge in sync without an extra setState.Fixed StreamChannelAvatar crashing with RangeError when user/channel name is empty.
🐞 Fixed
StreamChannelAvatar crashing with RangeError when user/channel name is empty.Added haptic and system sound feedback for voice recording interactions. Feedback can be customized by extending AudioRecorderFeedback or using AudioR
✅ Added
AudioRecorderFeedback or using AudioRecorderFeedbackWrapper with
custom callbacks. [#2463]StreamPollCreator. [#2453]🐞 Fixed
Fixed StreamGallery not respecting the safe area for fullscreen media. [[#2454]]
🐞 Fixed
Added delivered status to SendingIndicator (double grey check for delivered, double accentPrimary check for read).
✅ Added
SendingIndicator (double grey check for delivered, double accentPrimary check for read).isMessageDelivered parameter to SendingIndicator widget.MessagePreviewFormatter interface and StreamMessagePreviewFormatter implementation for
customizing message preview text formatting in channel lists and draft messages.messagePreviewFormatter property to StreamChatConfigurationData for global customization
of message preview formatting.🐞 Fixed
onLinkTap callback instead of the actual href.Added StreamMessageListView.floatingDateDividerBuilder in order to specifically customize the floating date divider.
✅ Added
StreamMessageListView.floatingDateDividerBuilder in order to specifically customize the
floating date divider.Fixed StreamMessageListView not marking thread messages as read when scrolled to the bottom of the list.
🐞 Fixed
StreamMessageListView not marking thread messages as read when scrolled to the bottom of the list.StreamMessageInput not validating draft messages before creating/updating them.Added messageBackgroundGradient property to StreamMessageThemeData for gradient message backgrounds.
✅ Added
messageBackgroundGradient property to StreamMessageThemeData for gradient message
backgrounds.🐞 Fixed
.replaceMentions not escaping special characters in the username.colorTheme.barsBg. [#2366]GradientAvatars for users with same-length IDs would have identical
colors. [#2369]Fixed context menu being truncated and scrollable on web when there was enough space to display it fully. [[#2317]]
🐞 Fixed
StreamMessageInput cooldown resume error if channel state is not yet initialized.
[#2338]✅ Added
padding and textInputMargin to StreamMessageInput to allow fine-tuning the layout.Added bottom and bottomOpacity to the StreamChannelHeader widget.
✅ Added
bottom and bottomOpacity to the StreamChannelHeader widget.StreamChat.maybeOf() method for safe context access in async operations.🐞 Fixed
StreamMessageInput crashes with "Null check operator used on a null value" when async
operations continue after widget unmounting.Fixed StreamMessageInput tries to expand to full height when used in a unconstrained environment.
🐞 Fixed
StreamMessageInput tries to expand to full height when used in a unconstrained environment.StreamCommandAutocompleteOptions to style the command name with textHighEmphasis style.Fixed FloatingDateDivider not showing the correct date when the latest message was too big and exceeded the viewport main axis size.
🐞 Fixed
FloatingDateDivider not showing the correct date when the latest message was too big and
exceeded the viewport main axis size.ScrollToBottom button always showing when the latest message was too big and exceeded the
viewport main axis size.Added support for MessageReminder feature, which allows users to bookmark or set reminders for specific messages in a channel.
✅ Added
MessageReminder feature, which allows users to bookmark or set reminders
for specific messages in a channel.Fixed StreamMessageInput throwing exception when a non-initialized Channel is used.
🐞 Fixed
StreamMessageInput throwing exception when a non-initialized Channel is used.🔄 Changed
just_audio dependency to ">=0.9.38 <0.11.0".Updated share_plus dependency to ^11.0.0.
🔄 Changed
share_plus dependency to ^11.0.0.desktop_drop dependency to ">=0.5.0 <0.7.0".Added support for Draft messages preview.
✅ Added
StreamDraftListView for displaying draft messages.🐞 Fixed
🔄 Changed
StreamQuotedMessageWidget to allow customization of quoted messages using StreamMessageWidget.quotedMessageBuilder.[[#2184]](https://github.com/GetStream/stream-chat-flutter/issues/2184) Fixed messages not being marked as read when scrolled to the bottom.
🐞 Fixed
MessageListView
scrolling back up after reaching bottom when unread indicator or scroll to bottom button is
tapped.[[#2118]](https://github.com/GetStream/stream-chat-flutter/issues/2118) Fixed invalid assertions applied on message input command and attachment butto
🐞 Fixed
StreamMessageInput
send message predicate to properly handle shift+enter for new lines and improve message text validation.✅ Added
[[#2137]](https://github.com/GetStream/stream-chat-flutter/issues/2137) Fixed message input buttons not being able to customized.
Deprecated StreamMessageInput.useNativeAttachmentPickerOnMobile in favor of StreamMessageInput.useSystemAttachmentPicker.
🐞 Fixed
StreamMessageInput not able to edit the ogAttachments.MessageWidget showing pinned background for deleted messages.✅ Added
StreamMessageInput.useSystemAttachmentPicker for system media picker support.StreamMessageThemeData.messageDeletedStyle to style the text on a deleted message.🔄 Changed
StreamMessageInput.useNativeAttachmentPickerOnMobile in favor of StreamMessageInput.useSystemAttachmentPicker.Updated minimum Flutter version to 3.27.4 for the SDK.
🔄 Changed
Deprecated PlayListItem in favor of PlaylistTrack.
✅ Added
voiceRecording type attachments.🔄 Changed
PlayListItem in favor of PlaylistTrack.StreamVoiceRecordingListPlayer in favor of StreamVoiceRecordingAttachmentPlaylist.StreamVoiceRecordingLoading as it is no longer used.StreamVoiceRecordingPlayer in favor of StreamVoiceRecordingAttachment.StreamVoiceRecordingSlider in favor of StreamAudioWaveformSlider.VoiceRecordingAttachmentBuilder in favor of VoiceRecordingAttachmentPlaylistBuilder.StreamVoiceRecordingTheme in favor of StreamVoiceRecordingAttachmentTheme.Fixed StreamChannel not available in the widget tree for various poll-related dialogs.
🐞 Fixed
StreamChannel not available in the widget tree for various poll-related dialogs.Remove untracked files from the package.
Deprecated StreamUnreadIndicator cid property in favor of StreamUnreadIndicator.channels constructor.
✅ Added
StreamThreadListView widget to load and display list of threads.StreamUnreadThreadsBanner widget to display count of unread threads.StreamUnreadIndicator.channels and StreamUnreadIndicator.threads constructors to
display unread channels and threads respectively.🔄 Changed
StreamUnreadIndicator cid property in favor of StreamUnreadIndicator.channels
constructor.The StreamAttachmentPickerController has been restructured to improve flexibility and support additional use cases like poll management.
🛑️ Breaking
StreamAttachmentPickerController has been restructured to improve flexibility and support
additional use cases like poll management.
List<Attachment> but now manages an AttachmentPickerValue object,
which includes:
attachments: A list of attachments.poll: A new field for managing polls.✅ Added
StreamPollCreator widget to facilitate poll creation within the chat interface.PollMessage widget to display poll messages within the chat interface.🔄 Changed
Added several new widgets to enhance the AI assistant features.
✅ Added
StreamingMessageView to show AI assistant messages with streaming animation.AITypingIndicatorView to show AI typing indicator.✅ Added
StreamingMessageView to show AI assistant messages with streaming animation.AITypingIndicatorView to show AI typing indicator.🐞 Fixed
video_thumbnail
Namespace not specified.Added onThreadTap parameter to MessageWidgetContent to enable thread tap action.
✅ Added
onThreadTap parameter to MessageWidgetContent to enable thread tap action.showEditedLabel to disable
this functionality.🐞 Fixed
🔄 Changed
stream_chat_flutter_core dependency to
8.2.0.Fixed enrichment errors causing some URLs to enrich twice.
🐞 Fixed
🔄 Changed
Fixed null errors in web from markdown.
🐞 Fixed
Nothing published for this version
Nothing published for this version
Nothing published for this version
Your coding agent can read these notes before it upgrades. Set up the MCP server →