Skip to content

feat(ui): show who is typing in the message list - #3063

Merged
xsahil03x merged 6 commits into
masterfrom
feat/typing-indicator
Oct 14, 2026
Merged

xsahil03x merged 6 commits into
masterfrom
feat/typing-indicator

Conversation

@xsahil03x

@xsahil03x xsahil03x commented Oct 14, 2026 •

Copy link
Copy Markdown
Member

Shows who is typing inside the message list, as an incoming message at the newest end, and fixes typing lingering after a message is sent.

Typing in the channel header and as an incoming message in the list

UI (stream_chat_flutter)

  • StreamMessageListView shows StreamMessageListTypingIndicator (avatar stack and a bubble with the typing dots) in the newer-messages loader's slot, so item indices are unchanged. Replace it with StreamMessageListViewBuilders.typingIndicator, or hide it with StreamMessageListViewConfiguration.showTypingIndicator.
  • StreamChannelPage no longer overlays a typing indicator above the composer.
  • New StreamTypingUsersBuilder: builds from the users typing in a channel or thread, and rebuilds only when that set of users changes.
  • StreamTypingIndicator (channel previews and headers) is rebuilt on it with the design system's dots. Its API is unchanged; the lottie dependency is removed.

The in-list placement matches React Native, Compose and SwiftUI, which all show typing at the newest end of the list.

Client (stream_chat)

  • A new message, or a text edit, ends its author's typing in that channel or thread, so the indicator no longer lingers when typing.stop is late or lost. Only typing that started before the message counts, and only real text edits (message_text_updated_at), not reply-count or link-preview updates.
  • sendMessage and updateMessage stop the current user's typing.
  • Switching between a thread and the channel stops typing in the previous one.

stream_core_flutter is pinned to GetStream/stream-core-flutter#197, which adds the dots.

Verified: new tests for the client typing rules, the builder, both indicators, semantics, and the list row. A golden is added for the list row. Format, analyze --fatal-infos, and the stream_chat and stream_chat_flutter suites pass. Checked on an iPhone simulator, with a second device typing and sending.

🤖 Generated with Claude Code

Summary by CodeRabbit

  • New Features
    • Typing indicators now appear at the newest end of the message list, with typing users’ avatars and animated dots. Customize the indicator or hide it through message-list options.
    • Typing indicators distinguish channel and thread conversations and include accessible labels.
  • Bug Fixes
    • Typing status now stops appropriately after sending or editing a message and when switching between a channel and its thread.

xsahil03x and others added 3 commits October 14, 2026 13:29
A new message, or a text edit, now ends its author's typing in that channel
or thread, so the indicator no longer lingers when the stop event is late or
lost. Sending or editing also stops the current user's own typing, and
switching between a thread and the channel stops typing in the previous one.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
StreamMessageListView now shows who is typing as an incoming message at the
newest end of the list, in the slot it uses for the newer-messages loader, so
item indices are unchanged. It replaces the indicator StreamChannelPage drew
above the composer, and can be replaced through
StreamMessageListViewBuilders.typingIndicator or hidden with
StreamMessageListViewConfiguration.showTypingIndicator.

StreamTypingUsersBuilder exposes the users typing in a channel or thread, and
StreamTypingIndicator is rebuilt on it with the design system's typing dots,
dropping the lottie dependency.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
@coderabbitai

coderabbitai Bot commented Oct 14, 2026 •

Copy link
Copy Markdown
Contributor

Review in Change Stack →

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration
  • Configuration used: defaults
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: 08dd83fe-68a2-4f1f-90e0-585a96fb3a90
📥 Commits

Reviewing files that changed from the base of the PR and between 2c0af16 and 8b1ec2c.

📒 Files selected for processing: 3
  • docs/docs_screenshots/pubspec.yaml
  • melos.yaml
  • packages/stream_chat_flutter/pubspec.yaml

Included review availability: This review used your included allowance. Your plan provides up to 4 included reviews per hour; 3 remain after this review.

📝 Walkthrough

The chat client now clears typing state after message sends and text edits, and when typing context changes. Flutter adds reusable typing-user selection and message-list indicators, with configurable visibility and rendering.

Changes: Typing state and indicators

Layer / File(s) Summary
Clear typing state on message and context changes
packages/stream_chat/lib/src/client/channel/*, packages/stream_chat/lib/src/client/key_stroke_handler.dart, packages/stream_chat/test/src/client/*, packages/stream_chat/CHANGELOG.md
Message sends and edits stop the current user's typing. Incoming message events clear matching typing state based on author, context, and timestamp. Context switches stop typing in the previous context.
Select and render typing users
packages/stream_chat_flutter/lib/src/misc/typing_users_builder.dart, packages/stream_chat_flutter/lib/src/indicators/typing_indicator.dart, packages/stream_chat_flutter/lib/assets/animations/*, packages/stream_chat_flutter/pubspec.yaml, packages/stream_chat_flutter/test/src/misc/*, packages/stream_chat_flutter/test/src/indicators/*, packages/stream_chat_flutter/CHANGELOG.md
StreamTypingUsersBuilder selects users by channel or parent ID. StreamTypingIndicator uses it and design-system dots instead of the Lottie animation. Tests cover user selection, display, alternatives, and semantics.
Show typing indicators at the message-list end
packages/stream_chat_flutter/lib/src/message_list_view/*, packages/stream_chat_flutter/lib/src/pages/channel_page.dart, packages/stream_chat_flutter/lib/stream_chat_flutter.dart, packages/stream_chat_flutter/test/src/message_list_view/*, packages/stream_chat_flutter/test/src/channel/channel_page_test.dart, packages/stream_chat_flutter/pubspec.yaml, packages/stream_chat_flutter/CHANGELOG.md, melos.yaml, docs/docs_screenshots/pubspec.yaml
The message list adds a configurable typing indicator at its newest end, with a default widget and custom builder option. The channel page removes its composer-area overlay. Tests cover visibility, custom rendering, semantics, and golden layouts. The pinned stream_core_flutter revision is updated.

Priority: ➖ Normal

Estimated code review effort: 3 (Moderate) | ~25 minutes

Change: Feature

Sequence Diagram(s)

sequenceDiagram
  participant StreamMessageListView
  participant StreamTypingUsersBuilder
  participant ChannelState
  participant TypingIndicatorBuilder
  StreamMessageListView->>StreamTypingUsersBuilder: Configure channel and parentId
  StreamTypingUsersBuilder->>ChannelState: Listen to typing events
  ChannelState-->>StreamTypingUsersBuilder: Provide typing events
  StreamTypingUsersBuilder-->>StreamMessageListView: Return filtered typing users
  StreamMessageListView->>TypingIndicatorBuilder: Render users with configured or default widget
Loading

Suggested reviewers: renefloor

Merge Risk: ⚪ Minimal · up to 8b1ec

The typing indicator uses the existing message-list loader slot, and typing cleanup respects message timing and context. No actionable merge-blocking risk was found.

Pre-merge checks: Passed 5
Passed Passed checks: 5 passed
Check name Status Explanation
Docstring Coverage Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check. Docstring coverage is scoped to functions touched by this diff. Analyzed 0 functions across 0…
Linked Issues check Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check Passed Check skipped because no linked issues were found for this pull request.
Description Check Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check Passed The title clearly and concisely describes the primary UI change: showing typing users in the message list.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Commit to this branch
  • Create a new PR
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@codecov

codecov Bot commented Oct 14, 2026 •

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 93.26923% with 7 lines in your changes missing coverage. Please review.
✅ Project coverage is 78.29%. Comparing base (15c4d67) to head (8b1ec2c).

Files with missing lines Patch % Lines
...e_list_view/stream_message_list_view_builders.dart 0.00% 3 Missing ⚠️
...t_view/stream_message_list_view_configuration.dart 0.00% 3 Missing ⚠️
...hat_flutter/lib/src/misc/typing_users_builder.dart 95.00% 1 Missing ⚠️
Additional details and impacted files
@@            Coverage Diff             @@
##           master    #3063      +/-   ##
==========================================
+ Coverage   78.27%   78.29%   +0.01%     
==========================================
  Files         450      452       +2     
  Lines       29350    29409      +59     
==========================================
+ Hits        22973    23025      +52     
- Misses       6377     6384       +7     

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
@xsahil03x
xsahil03x enabled auto-merge (squash) October 14, 2026 13:59
@xsahil03x
xsahil03x merged commit dd324b8 into master Oct 14, 2026
30 of 31 checks passed
@xsahil03x
xsahil03x deleted the feat/typing-indicator branch October 14, 2026 14:23
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants