Skip to content

fix(ui): don't save a draft into a disposed channel - #3108

Merged
xsahil03x merged 24 commits into
masterfrom
sahil/flu-1101-the-composer-throws-when-its-channel-is-disposed-while-it
Oct 28, 2026
Merged

xsahil03x merged 24 commits into
masterfrom
sahil/flu-1101-the-composer-throws-when-its-channel-is-disposed-while-it

Conversation

@xsahil03x

@xsahil03x xsahil03x commented Oct 26, 2026 •

Copy link
Copy Markdown
Member

What

StreamMessageComposer saves its text as a draft when it is unmounted. If its channel had already been disposed (for example, the user was disconnected while a channel page with unsent text was still open), saving threw Bad state: Channel … has been disposed from deactivate(). That interrupted the unmount and turned the screen into Flutter's error widget.

The composer now skips saving the draft when the channel has no state.

Fixes FLU-1101.

Stacked on #3105 (the e2e suite); GitHub retargets it to master once that merges.

Verification

  • Widget tests in message_composer_draft_test.dart: unmounting with unsent text saves a draft on a usable channel, and doesn't throw once the channel is disposed. The second test fails without the fix.
  • On an Android emulator (sample app, drafts enabled): leaving a channel with unsent text still saves the draft (Draft: … in the channel list).

v11: see the "Merging master into v11" comment on FLU-1101.

🤖 Generated with Claude Code

Summary by CodeRabbit

  • Bug Fixes
    • Fixed an issue that could cause the message composer to throw an error when its channel was disposed while unsent text remained, including when disconnecting with the channel open.
    • The composer now safely avoids draft updates when channel state is unavailable, preventing errors during disposal.
    • Failed message sends, edits, and deletions no longer hide the preceding message’s timestamp and delivery status.

testableapple and others added 19 commits October 23, 2026 14:55
The composer saved its text as a draft when it was unmounted, even when
its channel had already been disposed (e.g. the user was disconnected
with a channel page open). Saving into the disposed channel threw and
interrupted the unmount.

Fixes FLU-1101.

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

coderabbitai Bot commented Oct 26, 2026 •

Copy link
Copy Markdown
Contributor

Review in Change Stack →

Warning

Review limit reached

You've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository.

Next included review available in 59 minutes.

Check out review usage here.

View limit details

Limit details: You’ve used all 4 included reviews currently available.

Learn how review limits work.

Review configuration:

Run configuration
  • Source mode: Auto
  • Repository: Unavailable
  • Branch: Unavailable
  • File: No configuration file from this repository applied
  • Commit: Unavailable
  • Layers: defaults
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: 8d91daac-cf25-4850-bc1e-21c912bbb28e
Commits

Reviewing files that changed from the base of the PR and between dc51a77 and 226bce3.

Files selected for processing: 3
  • packages/stream_chat_flutter/CHANGELOG.md
  • packages/stream_chat_flutter/lib/src/message_input/stream_message_composer.dart
  • packages/stream_chat_flutter/test/src/message_input/message_composer_draft_test.dart

No actionable comments were generated in the recent review.

Recent review info
Run configuration
  • Source mode: Auto
  • Repository: Unavailable
  • Branch: Unavailable
  • File: No configuration file from this repository applied
  • Commit: Unavailable
  • Layers: defaults
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: 75a1cd56-1c31-465e-85cb-325b956bc1a6
Commits

Reviewing files that changed from the base of the PR and between ae9cd85 and dc51a77.

Files ignored due to path filters: 27
  • e2e_app/Gemfile.lock is excluded by !**/*.lock
  • e2e_app/android/app/src/main/res/mipmap-hdpi/ic_launcher.png is excluded by !**/*.png
  • e2e_app/android/app/src/main/res/mipmap-mdpi/ic_launcher.png is excluded by !**/*.png
  • e2e_app/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png is excluded by !**/*.png
  • e2e_app/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png is excluded by !**/*.png
  • e2e_app/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png is excluded by !**/*.png
  • e2e_app/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata is excluded by !**/*.xcworkspace/contents.xcworkspacedata
  • e2e_app/ios/Runner.xcworkspace/contents.xcworkspacedata is excluded by !**/*.xcworkspace/contents.xcworkspacedata
  • e2e_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png is excluded by !**/*.png
  • e2e_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png is excluded by !**/*.png
  • e2e_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png is excluded by !**/*.png
  • e2e_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png is excluded by !**/*.png
  • e2e_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png is excluded by !**/*.png
  • e2e_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png is excluded by !**/*.png
  • e2e_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png is excluded by !**/*.png
  • e2e_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png is excluded by !**/*.png
  • e2e_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png is excluded by !**/*.png
  • e2e_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png is excluded by !**/*.png
  • e2e_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png is excluded by !**/*.png
  • e2e_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png is excluded by !**/*.png
  • e2e_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png is excluded by !**/*.png
  • e2e_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png is excluded by !**/*.png
  • e2e_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png is excluded by !**/*.png
  • e2e_app/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png is excluded by !**/*.png
  • e2e_app/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png is excluded by !**/*.png
  • e2e_app/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png is excluded by !**/*.png
  • sample_app/Gemfile.lock is excluded by !**/*.lock
Files selected for processing: 135
  • .claude/skills/flutter-version-bump/SKILL.md
  • .github/actions/allure-launch/action.yml
  • .github/actions/setup-ios-runtime/action.yml
  • .github/actions/setup-ruby/action.yml
  • .github/workflows/e2e_test.yml
  • .github/workflows/e2e_test_cron.yml
  • .gitignore
  • e2e_app/.gitignore
  • e2e_app/.metadata
  • e2e_app/Gemfile
  • e2e_app/README.md
  • e2e_app/analysis_options.yaml
  • e2e_app/android/.gitignore
  • e2e_app/android/app/build.gradle.kts
  • e2e_app/android/app/src/debug/AndroidManifest.xml
  • e2e_app/android/app/src/main/AndroidManifest.xml
  • e2e_app/android/app/src/main/kotlin/io/getstream/chat/e2e_app/MainActivity.kt
  • e2e_app/android/app/src/main/res/drawable-v21/launch_background.xml
  • e2e_app/android/app/src/main/res/drawable/launch_background.xml
  • e2e_app/android/app/src/main/res/values-night/styles.xml
  • e2e_app/android/app/src/main/res/values/styles.xml
  • e2e_app/android/app/src/profile/AndroidManifest.xml
  • e2e_app/android/build.gradle.kts
  • e2e_app/android/gradle.properties
  • e2e_app/android/gradle/wrapper/gradle-wrapper.properties
  • e2e_app/android/settings.gradle.kts
  • e2e_app/fastlane/Allurefile
  • e2e_app/fastlane/Fastfile
  • e2e_app/fastlane/Pluginfile
  • e2e_app/fastlane/README.md
  • e2e_app/fastlane/e2e_log.rb
  • e2e_app/fastlane/e2e_tests.rb
  • e2e_app/integration_test/allure/allure.dart
  • e2e_app/integration_test/attachments_test.dart
  • e2e_app/integration_test/authentication_test.dart
  • e2e_app/integration_test/channel_actions_test.dart
  • e2e_app/integration_test/channel_list_test.dart
  • e2e_app/integration_test/channel_search_test.dart
  • e2e_app/integration_test/connection_test.dart
  • e2e_app/integration_test/draft_messages_test.dart
  • e2e_app/integration_test/giphy_test.dart
  • e2e_app/integration_test/hyper_links_test.dart
  • e2e_app/integration_test/message_actions_test.dart
  • e2e_app/integration_test/message_delivery_status_test.dart
  • e2e_app/integration_test/message_list_test.dart
  • e2e_app/integration_test/mock_server/data_types.dart
  • e2e_app/integration_test/mock_server/mock_server.dart
  • e2e_app/integration_test/moderation_test.dart
  • e2e_app/integration_test/pages/channel_list_page.dart
  • e2e_app/integration_test/pages/message_list_page.dart
  • e2e_app/integration_test/pinned_messages_test.dart
  • e2e_app/integration_test/polls_test.dart
  • e2e_app/integration_test/quoted_reply_test.dart
  • e2e_app/integration_test/reactions_test.dart
  • e2e_app/integration_test/reminders_test.dart
  • e2e_app/integration_test/robots/backend_robot.dart
  • e2e_app/integration_test/robots/participant_robot.dart
  • e2e_app/integration_test/robots/user_robot.dart
  • e2e_app/integration_test/robots/user_robot_channel_list_asserts.dart
  • e2e_app/integration_test/robots/user_robot_message_list_asserts.dart
  • e2e_app/integration_test/search_test.dart
  • e2e_app/integration_test/slow_mode_test.dart
  • e2e_app/integration_test/support/failure_artifacts.dart
  • e2e_app/integration_test/support/fake_url_launcher.dart
  • e2e_app/integration_test/support/predefined_users.dart
  • e2e_app/integration_test/support/step.dart
  • e2e_app/integration_test/support/stream_test_case.dart
  • e2e_app/integration_test/support/stream_test_env.dart
  • e2e_app/integration_test/support/widget_test_extensions.dart
  • e2e_app/integration_test/thread_list_test.dart
  • e2e_app/integration_test/unread_counts_test.dart
  • e2e_app/integration_test/unread_messages_test.dart
  • e2e_app/ios/.gitignore
  • e2e_app/ios/Flutter/AppFrameworkInfo.plist
  • e2e_app/ios/Flutter/Debug.xcconfig
  • e2e_app/ios/Flutter/Release.xcconfig
  • e2e_app/ios/Runner.xcodeproj/project.pbxproj
  • e2e_app/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
  • e2e_app/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings
  • e2e_app/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme
  • e2e_app/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
  • e2e_app/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings
  • e2e_app/ios/Runner/AppDelegate.swift
  • e2e_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json
  • e2e_app/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json
  • e2e_app/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md
  • e2e_app/ios/Runner/Base.lproj/LaunchScreen.storyboard
  • e2e_app/ios/Runner/Base.lproj/Main.storyboard
  • e2e_app/ios/Runner/Info.plist
  • e2e_app/ios/Runner/Runner-Bridging-Header.h
  • e2e_app/ios/Runner/SceneDelegate.swift
  • e2e_app/ios/RunnerTests/RunnerTests.swift
  • e2e_app/lib/app.dart
  • e2e_app/lib/auth/auth_controller.dart
  • e2e_app/lib/auth/users.dart
  • e2e_app/lib/main.dart
  • e2e_app/lib/navigation.dart
  • e2e_app/lib/pages/channel_actions_sheet.dart
  • e2e_app/lib/pages/channel_list_tab.dart
  • e2e_app/lib/pages/choose_user_page.dart
  • e2e_app/lib/pages/group_info_page.dart
  • e2e_app/lib/pages/home_page.dart
  • e2e_app/lib/pages/pinned_messages_page.dart
  • e2e_app/lib/pages/reminders_tab.dart
  • e2e_app/lib/pages/thread_list_tab.dart
  • e2e_app/lib/widgets/e2e_message_actions.dart
  • e2e_app/lib/widgets/search_text_field.dart
  • e2e_app/pubspec.yaml
  • e2e_app/scripts/install_ios_runtime.sh
  • melos.yaml
  • packages/stream_chat_flutter/CHANGELOG.md
  • packages/stream_chat_flutter/lib/src/message_input/stream_message_composer.dart
  • packages/stream_chat_flutter/lib/src/message_list_view/message_list_view.dart
  • packages/stream_chat_flutter/lib/src/message_list_view/mlv_utils.dart
  • packages/stream_chat_flutter/test/src/message_input/message_composer_draft_test.dart
  • packages/stream_chat_flutter/test/src/message_list_view/message_list_failed_message_grouping_test.dart
  • sample_app/Gemfile
  • sample_app/android/fastlane/Fastfile
  • sample_app/e2e_stubs/firebase_core/lib/firebase_core.dart
  • sample_app/e2e_stubs/firebase_core/pubspec.yaml
  • sample_app/e2e_stubs/firebase_crashlytics/lib/firebase_crashlytics.dart
  • sample_app/e2e_stubs/firebase_crashlytics/pubspec.yaml
  • sample_app/e2e_stubs/firebase_messaging/lib/firebase_messaging.dart
  • sample_app/e2e_stubs/firebase_messaging/pubspec.yaml
  • sample_app/fastlane/Fastfile
  • sample_app/integration_test/message_list_test.dart
  • sample_app/integration_test/robots/backend_robot.dart
  • sample_app/integration_test/robots/user_robot.dart
  • sample_app/integration_test/robots/user_robot_message_list_asserts.dart
  • sample_app/integration_test/support/predefined_users.dart
  • sample_app/ios/fastlane/Fastfile
  • sample_app/lib/app.dart
  • sample_app/lib/auth/auth_controller.dart
  • sample_app/pubspec.yaml
  • sample_app/pubspec_overrides.e2e.yaml
Files with no reviewable changes: 26
  • sample_app/e2e_stubs/firebase_core/pubspec.yaml
  • sample_app/e2e_stubs/firebase_crashlytics/lib/firebase_crashlytics.dart
  • .claude/skills/flutter-version-bump/SKILL.md
  • sample_app/e2e_stubs/firebase_crashlytics/pubspec.yaml
  • sample_app/Gemfile
  • sample_app/pubspec.yaml
  • e2e_app/integration_test/allure/allure.dart
  • sample_app/e2e_stubs/firebase_messaging/pubspec.yaml
  • sample_app/integration_test/robots/backend_robot.dart
  • sample_app/android/fastlane/Fastfile
  • e2e_app/integration_test/support/step.dart
  • e2e_app/fastlane/Allurefile
  • e2e_app/scripts/install_ios_runtime.sh
  • sample_app/integration_test/robots/user_robot.dart
  • e2e_app/fastlane/e2e_tests.rb
  • e2e_app/integration_test/mock_server/mock_server.dart
  • sample_app/e2e_stubs/firebase_core/lib/firebase_core.dart
  • e2e_app/integration_test/support/failure_artifacts.dart
  • sample_app/ios/fastlane/Fastfile
  • sample_app/integration_test/support/predefined_users.dart
  • sample_app/pubspec_overrides.e2e.yaml
  • sample_app/integration_test/robots/user_robot_message_list_asserts.dart
  • e2e_app/integration_test/support/fake_url_launcher.dart
  • sample_app/e2e_stubs/firebase_messaging/lib/firebase_messaging.dart
  • sample_app/fastlane/Fastfile
  • sample_app/integration_test/message_list_test.dart
Files skipped from review as they are similar to previous changes: 1
  • packages/stream_chat_flutter/CHANGELOG.md

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 pull request adds a standalone Flutter E2E app and moves its integration-test support and Fastlane workflows from sample_app. CI and workspace configuration now target e2e_app. The Flutter package also guards draft processing when channel state is absent and separates failed messages from non-failed messages during grouping.

Changes: E2E app and test pipeline

Layer / File(s) Summary
E2E app and platform projects
e2e_app/lib/*, e2e_app/android/*, e2e_app/ios/*, e2e_app/pubspec.yaml
Adds the E2E app, authentication, navigation, channel and message screens, and Android and iOS project configuration.
Test support and integration scenarios
e2e_app/integration_test/*
Adds test robots, assertions, environment setup, page finders, and integration tests for authentication, messages, channels, attachments, delivery states, polls, reminders, and other app behavior.
Fastlane and CI migration
e2e_app/fastlane/*, .github/actions/*, .github/workflows/e2e_test*.yml, melos.yaml, .gitignore, sample_app/fastlane/*, sample_app/e2e_stubs/*, sample_app/Gemfile, sample_app/pubspec*, .claude/skills/flutter-version-bump/SKILL.md
Adds E2E selection, batching, retries, coverage, and artifact handling in Fastlane. Updates CI paths and adds a coverage-map job. Removes the former E2E support and Firebase stubs from sample_app.

Message composer and failed-message grouping

Layer / File(s) Summary
Guard draft processing and separate failed-message groups
packages/stream_chat_flutter/lib/src/message_input/stream_message_composer.dart, packages/stream_chat_flutter/lib/src/message_list_view/*, packages/stream_chat_flutter/test/src/message_input/message_composer_draft_test.dart, packages/stream_chat_flutter/test/src/message_list_view/message_list_failed_message_grouping_test.dart, packages/stream_chat_flutter/CHANGELOG.md
The composer skips draft processing when channel state is absent. Message grouping now treats adjacent messages with different failed states as separate groups. Tests cover both changes.

Priority: Low

Estimated code review effort: 5 (Critical) | ~120 minutes

Change: Other · Severity of issue fixed: Low

Suggested reviewers: velikovpetar

Merge Risk: Minimal · previous review dc51a

The fix prevents an exception when a composer is unmounted after its channel is disposed, and draft saving still works on a usable channel. The move of E2E tooling into a dedicated app is consistent across CI and workspace configuration. No merge-blocking risk remains.

Pre-merge checks: Passed 4 · Failed 1

Failed Failed checks: 1 warning

Check name Status Explanation Resolution
Docstring Coverage Warning Docstring coverage is 25.00% which is insufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Documentation-only edits and deletions within surv… Write docstrings for the functions missing them to satisfy the coverage threshold.
Passed Passed checks: 4 passed
Check name Status Explanation
Description Check Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check Passed The title clearly and concisely describes the primary reported fix: preventing draft saving when the channel is disposed.
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.
Full details: Docstring Coverage

Explanation

Docstring coverage is 25.00% which is insufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Documentation-only edits and deletions within surviving functions are included; unchanged diff context and fully deleted functions are excluded. Analyzed 4 functions across 9 files. (100 skipped: 100 unsupported.)

Resolution

Write docstrings for the functions missing them to satisfy the coverage threshold.

Finishing Touches: 💡 3
📝 Generate docstrings: 💡
  • Commit to this branch
  • Create a new PR
⚔️ Resolve merge conflicts: 💡
  • Resolve merge conflict in branch sahil/flu-1101-the-composer-throws-when-its-channel-is-disposed-while-it
🛠️ Fix failing CI checks: 💡
  • Commit to this branch
  • Create a new PR
🧪 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 26, 2026 •

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 80.32%. Comparing base (018b487) to head (226bce3).
⚠️ Report is 3 commits behind head on master.

Additional details and impacted files
@@            Coverage Diff             @@
##           master    #3108      +/-   ##
==========================================
+ Coverage   80.28%   80.32%   +0.04%     
==========================================
  Files         455      455              
  Lines       29614    29615       +1     
==========================================
+ Hits        23775    23788      +13     
+ Misses       5839     5827      -12     

☔ 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.

flu-1101-the-composer-throws-when-its-channel-is-disposed-while-it
@xsahil03x
xsahil03x changed the base branch from master to test/e2e-native-parity October 26, 2026 13:58
xsahil03x and others added 3 commits October 27, 2026 12:34
* test(repo): assert the token date and signature policy (FLU-1083)

The SDK refreshes the token on code 40 only. A token used before its
issue date (42) is reconnected as-is until the server's clock catches
up, and a bad signature (43) is not retried with a new token. The four
tests now assert that instead of a refresh.

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

* test(repo): tighten the token date and signature tests (FLU-1083)

Keep the invalid window open past the refresh so the refreshed token is
always rejected, count token requests through an env assertion, and fix
the step and file comments to match what the tests assert.

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

* test(repo): drop the token signature after login test (FLU-1083)

A signing secret doesn't go bad mid-session, and the test only timed the
SDK's reconnect backoff.

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

* test(repo): keep the login error across the loading screen (FLU-1083)

The chooser page is replaced while connecting, so an error it stored
itself was gone by the time the login failed. The auth state now carries
it, and the rebuilt page shows it.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012vTgFwqhUc2wKCWrw635yC

---------

Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
* fix(ui): keep the footer of a sent message before a failed one (FLU-1090)

A message that failed now starts its own group, so the sent message
before it keeps its timestamp and delivery status. Consecutive failed
messages still group together.

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

* docs(ui): describe every failed message in the changelog (FLU-1090)

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012vTgFwqhUc2wKCWrw635yC

---------

Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
flu-1101-the-composer-throws-when-its-channel-is-disposed-while-it

# Conflicts:
#	packages/stream_chat_flutter/CHANGELOG.md
Base automatically changed from test/e2e-native-parity to master October 27, 2026 17:37
…composer-throws-when-its-channel-is-disposed-while-it

# Conflicts:
#	e2e_app/README.md
#	e2e_app/fastlane/Fastfile
#	e2e_app/integration_test/authentication_test.dart
#	e2e_app/integration_test/giphy_test.dart
#	e2e_app/integration_test/hyper_links_test.dart
#	e2e_app/integration_test/message_actions_test.dart
#	e2e_app/integration_test/message_delivery_status_test.dart
#	e2e_app/integration_test/message_list_test.dart
#	e2e_app/integration_test/pages/channel_list_page.dart
#	e2e_app/integration_test/robots/backend_robot.dart
#	e2e_app/integration_test/robots/participant_robot.dart
#	e2e_app/integration_test/robots/user_robot.dart
#	e2e_app/integration_test/robots/user_robot_message_list_asserts.dart
#	e2e_app/integration_test/support/stream_test_env.dart
#	e2e_app/lib/auth/auth_controller.dart
#	e2e_app/lib/pages/channel_list_tab.dart
#	e2e_app/lib/pages/home_page.dart
#	e2e_app/lib/pages/thread_list_tab.dart
#	e2e_app/lib/widgets/e2e_message_actions.dart
#	e2e_app/lib/widgets/search_text_field.dart
#	e2e_app/pubspec.yaml
#	packages/stream_chat_flutter/CHANGELOG.md
#	packages/stream_chat_flutter/test/src/message_list_view/message_list_failed_message_grouping_test.dart
@xsahil03x
xsahil03x merged commit 17e7a1b into master Oct 28, 2026
36 checks passed
@xsahil03x
xsahil03x deleted the sahil/flu-1101-the-composer-throws-when-its-channel-is-disposed-while-it branch October 28, 2026 12:29
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.

3 participants