Conversation
|
Important Review skippedAuto reviews are disabled on base/target branches other than the default branch. Please check the settings in the CodeRabbit UI or the ⚙️ Run configurationConfiguration used: defaults Review profile: CHILL Plan: Pro Run ID: You can disable this status message by setting the Use the checkbox below for a quick retry:
📝 WalkthroughWalkthroughThis pull request performs a comprehensive migration from StreamSvgIcon-based icons to Flutter's standard Icon widgets sourced from context.streamIcons across the stream_chat_flutter package, sample app, and associated tests. StreamSvgIcon is marked as deprecated with guidance to use Icon(context.streamIcons.*) instead. Changes
Estimated code review effort🎯 3 (Moderate) | ⏱️ ~25 minutes
🚥 Pre-merge checks | ✅ 3✅ Passed checks (3 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches🧪 Generate unit tests (beta)
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. Comment |
Codecov Report❌ Patch coverage is Additional details and impacted files@@ Coverage Diff @@
## feat/design-refresh #2519 +/- ##
=======================================================
- Coverage 64.54% 64.39% -0.15%
=======================================================
Files 433 433
Lines 25992 26114 +122
=======================================================
+ Hits 16777 16817 +40
- Misses 9215 9297 +82 ☔ View full report in Codecov by Sentry. 🚀 New features to boost your workflow:
|
|
@coderabbitai review |
✅ Actions performedReview triggered.
|
There was a problem hiding this comment.
Actionable comments posted: 3
🧹 Nitpick comments (4)
packages/stream_chat_flutter/lib/src/message_list_view/unread_indicator_button.dart (1)
98-107: Consider adding a tooltip for dismiss-button accessibility.This keeps the new icon migration while improving screen-reader and long-press discoverability.
♿ Suggested tweak
IconButton( + tooltip: MaterialLocalizations.of(context).closeButtonTooltip, iconSize: 24, icon: Icon(context.streamIcons.crossMedium), padding: const EdgeInsets.all(4), style: IconButton.styleFrom( foregroundColor: colorTheme.barsBg,🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@packages/stream_chat_flutter/lib/src/message_list_view/unread_indicator_button.dart` around lines 98 - 107, Add an accessibility tooltip to the dismiss IconButton so screen readers and long-press users can discover it: set the IconButton's tooltip (or wrap it with a Tooltip) with a short localized label like "Dismiss" (e.g., use the app's l10n/context translation helper) and also include a matching semanticsLabel if needed; update the IconButton in unread_indicator_button.dart (the IconButton that uses context.streamIcons.crossMedium and onDismissTap) to include this tooltip text.packages/stream_chat_flutter/lib/src/scroll_view/photo_gallery/stream_photo_gallery_tile.dart (1)
129-129: Set an explicit color for the video glyph for consistent contrast.Using inherited color here can reduce visibility depending on
IconTheme. Consider matching the duration text color.🎨 Proposed tweak
- child: Icon(context.streamIcons.videoSolid), + child: Icon( + context.streamIcons.videoSolid, + color: chatThemeData.colorTheme.barsBg, + ),🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@packages/stream_chat_flutter/lib/src/scroll_view/photo_gallery/stream_photo_gallery_tile.dart` at line 129, The video glyph Icon in StreamPhotoGalleryTile is using inherited color which can reduce contrast; update the Icon instantiation (child: Icon(context.streamIcons.videoSolid)) to set an explicit color that matches the duration text color (use the same TextStyle.color used for the duration label, e.g., the durationTextStyle or _durationTextStyle reference) and fall back to IconTheme.of(context).color if that color is null.sample_app/lib/pages/channel_file_display_screen.dart (1)
1-1: Remove the deprecated_member_use ignore directive.The icon migration is complete and there are no remaining usages of deprecated APIs in this file. The ignore directive at line 1 can be safely removed.
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@sample_app/lib/pages/channel_file_display_screen.dart` at line 1, Remove the top-line analyzer directive "// ignore_for_file: deprecated_member_use" since the icon migration completed and there are no deprecated APIs used; simply delete that directive so the file no longer suppresses deprecated_member_use warnings (no other code changes required).packages/stream_chat_flutter/test/src/message_input/stream_message_send_button_test.dart (1)
94-95: Scope custom-icon assertions to default-icon behavior, not globalIconabsence.Lines 94 and 114 use
find.byType(Icon)globally, which can become flaky if unrelated icons are introduced in the widget tree. Assert that the default send icons are absent instead.Proposed test adjustment
- expect(find.byType(Icon), findsNothing); + expect(find.byIcon(StreamIconData.iconPaperPlaneTopRight), findsNothing); ... - expect(find.byType(Icon), findsNothing); + expect(find.byIcon(StreamIconData.iconArrowUp), findsNothing);Also applies to: 114-115
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@packages/stream_chat_flutter/test/src/message_input/stream_message_send_button_test.dart` around lines 94 - 95, The tests currently assert global absence of Icon using find.byType(Icon) which is brittle; update the assertions in stream_message_send_button_test.dart (around the checks in the send button tests) to specifically assert absence of the default send icon instead of any Icon—for example use a finder that targets the send icon used by StreamMessageSendButton such as find.byIcon(Icons.send) or find.widgetWithIcon(IconButton, Icons.send) for both locations (the assertion at the block with expect(find.byType(Icon), findsNothing) and the similar assertion around lines 114-115) so the test only fails when the default send icon is present rather than any unrelated Icon in the widget tree.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Inline comments:
In `@packages/stream_chat_flutter/lib/src/theme/stream_chat_theme.dart`:
- Line 6: Replace the internal src import of the generated icons file (currently
importing stream_icons.g.dart via package:stream_core_flutter/src/...) with the
package's public API import that exposes the same symbol (import from
package:stream_core_flutter/... public path instead of src). Update the import
statement that references stream_icons.g.dart in stream_chat_theme.dart and the
seven test files (voice_recording_attachment_test.dart,
poll_option_reorderable_list_view_test.dart,
moderated_message_actions_modal_test.dart, message_actions_modal_test.dart,
stream_message_send_button_test.dart, stream_audio_recorder_test.dart,
sending_indicator_test.dart) so they import the public stream_core_flutter
export that provides stream_icons.g.dart (or stream_icons) rather than using the
src/ path. Ensure the import still exposes the stream_icons.g.dart symbols used
in those files (e.g., StreamIcons).
In
`@packages/stream_chat_flutter/test/src/message_modal/moderated_message_actions_modal_test.dart`:
- Line 7: Replace the internal src import with the public barrel export used by
production code: remove the import of
package:stream_core_flutter/src/theme/primitives/stream_icons.g.dart and instead
import the public package export that exposes StreamIconData (the same public
barrel used by moderated_message_actions_modal.dart). Update the import in
moderated_message_actions_modal_test.dart so the test references StreamIconData
from the public package export rather than from the internal src path.
In
`@packages/stream_chat_flutter/test/src/poll/creator/poll_option_reorderable_list_view_test.dart`:
- Line 8: The test imports a library from package:stream_core_flutter/src/...
(stream_icons.g.dart) which violates the implementation_imports lint; either (A)
expose StreamIconData and the icon constants via a public export in
stream_core_flutter (add an export for src/theme/primitives/stream_icons.g.dart
from the package's public lib so tests import
package:stream_core_flutter/stream_icons.dart or similar and update tests to use
that public symbol names), or (B) if internal import is intentional, add an
explicit ignore directive above the import in each test (// ignore:
implementation_imports) for the import of stream_icons.g.dart, ensuring you
reference StreamIconData and the icon constants consistently after the change.
---
Nitpick comments:
In
`@packages/stream_chat_flutter/lib/src/message_list_view/unread_indicator_button.dart`:
- Around line 98-107: Add an accessibility tooltip to the dismiss IconButton so
screen readers and long-press users can discover it: set the IconButton's
tooltip (or wrap it with a Tooltip) with a short localized label like "Dismiss"
(e.g., use the app's l10n/context translation helper) and also include a
matching semanticsLabel if needed; update the IconButton in
unread_indicator_button.dart (the IconButton that uses
context.streamIcons.crossMedium and onDismissTap) to include this tooltip text.
In
`@packages/stream_chat_flutter/lib/src/scroll_view/photo_gallery/stream_photo_gallery_tile.dart`:
- Line 129: The video glyph Icon in StreamPhotoGalleryTile is using inherited
color which can reduce contrast; update the Icon instantiation (child:
Icon(context.streamIcons.videoSolid)) to set an explicit color that matches the
duration text color (use the same TextStyle.color used for the duration label,
e.g., the durationTextStyle or _durationTextStyle reference) and fall back to
IconTheme.of(context).color if that color is null.
In
`@packages/stream_chat_flutter/test/src/message_input/stream_message_send_button_test.dart`:
- Around line 94-95: The tests currently assert global absence of Icon using
find.byType(Icon) which is brittle; update the assertions in
stream_message_send_button_test.dart (around the checks in the send button
tests) to specifically assert absence of the default send icon instead of any
Icon—for example use a finder that targets the send icon used by
StreamMessageSendButton such as find.byIcon(Icons.send) or
find.widgetWithIcon(IconButton, Icons.send) for both locations (the assertion at
the block with expect(find.byType(Icon), findsNothing) and the similar assertion
around lines 114-115) so the test only fails when the default send icon is
present rather than any unrelated Icon in the widget tree.
In `@sample_app/lib/pages/channel_file_display_screen.dart`:
- Line 1: Remove the top-line analyzer directive "// ignore_for_file:
deprecated_member_use" since the icon migration completed and there are no
deprecated APIs used; simply delete that directive so the file no longer
suppresses deprecated_member_use warnings (no other code changes required).
ℹ️ Review info
Configuration used: defaults
Review profile: CHILL
Plan: Pro
Disabled knowledge base sources:
- Linear integration is disabled
You can enable these sources in your CodeRabbit configuration.
⛔ Files ignored due to path filters (61)
packages/stream_chat_flutter/test/src/attachment/goldens/ci/stream_voice_recording_attachment_idle_dark.pngis excluded by!**/*.pngpackages/stream_chat_flutter/test/src/attachment/goldens/ci/stream_voice_recording_attachment_idle_light.pngis excluded by!**/*.pngpackages/stream_chat_flutter/test/src/attachment/goldens/ci/stream_voice_recording_attachment_playing_dark.pngis excluded by!**/*.pngpackages/stream_chat_flutter/test/src/attachment/goldens/ci/stream_voice_recording_attachment_playing_light.pngis excluded by!**/*.pngpackages/stream_chat_flutter/test/src/attachment/goldens/ci/stream_voice_recording_attachment_playlist_dark.pngis excluded by!**/*.pngpackages/stream_chat_flutter/test/src/attachment/goldens/ci/stream_voice_recording_attachment_playlist_light.pngis excluded by!**/*.pngpackages/stream_chat_flutter/test/src/bottom_sheets/goldens/ci/edit_message_sheet_0.pngis excluded by!**/*.pngpackages/stream_chat_flutter/test/src/bottom_sheets/goldens/ci/error_alert_sheet_0.pngis excluded by!**/*.pngpackages/stream_chat_flutter/test/src/channel/goldens/ci/channel_header_bottom_widget.pngis excluded by!**/*.pngpackages/stream_chat_flutter/test/src/gallery/goldens/ci/gallery_footer_0.pngis excluded by!**/*.pngpackages/stream_chat_flutter/test/src/gallery/goldens/ci/gallery_header_0.pngis excluded by!**/*.pngpackages/stream_chat_flutter/test/src/indicators/goldens/ci/sending_indicator_0.pngis excluded by!**/*.pngpackages/stream_chat_flutter/test/src/indicators/goldens/ci/sending_indicator_1.pngis excluded by!**/*.pngpackages/stream_chat_flutter/test/src/indicators/goldens/ci/sending_indicator_2.pngis excluded by!**/*.pngpackages/stream_chat_flutter/test/src/indicators/goldens/ci/sending_indicator_3.pngis excluded by!**/*.pngpackages/stream_chat_flutter/test/src/message_input/audio_recorder/goldens/ci/stream_audio_recorder_button_idle_dark.pngis excluded by!**/*.pngpackages/stream_chat_flutter/test/src/message_input/audio_recorder/goldens/ci/stream_audio_recorder_button_idle_light.pngis excluded by!**/*.pngpackages/stream_chat_flutter/test/src/message_input/audio_recorder/goldens/ci/stream_audio_recorder_button_recording_hold_dark.pngis excluded by!**/*.pngpackages/stream_chat_flutter/test/src/message_input/audio_recorder/goldens/ci/stream_audio_recorder_button_recording_hold_light.pngis excluded by!**/*.pngpackages/stream_chat_flutter/test/src/message_input/audio_recorder/goldens/ci/stream_audio_recorder_button_recording_locked_dark.pngis excluded by!**/*.pngpackages/stream_chat_flutter/test/src/message_input/audio_recorder/goldens/ci/stream_audio_recorder_button_recording_locked_light.pngis excluded by!**/*.pngpackages/stream_chat_flutter/test/src/message_input/audio_recorder/goldens/ci/stream_audio_recorder_button_recording_stopped_dark.pngis excluded by!**/*.pngpackages/stream_chat_flutter/test/src/message_input/audio_recorder/goldens/ci/stream_audio_recorder_button_recording_stopped_light.pngis excluded by!**/*.pngpackages/stream_chat_flutter/test/src/message_input/goldens/ci/attachment_button_0.pngis excluded by!**/*.pngpackages/stream_chat_flutter/test/src/message_input/goldens/ci/clear_input_item_0.pngis excluded by!**/*.pngpackages/stream_chat_flutter/test/src/message_input/goldens/ci/command_button_0.pngis excluded by!**/*.pngpackages/stream_chat_flutter/test/src/message_modal/goldens/ci/moderated_message_actions_modal_dark.pngis excluded by!**/*.pngpackages/stream_chat_flutter/test/src/message_modal/goldens/ci/moderated_message_actions_modal_light.pngis excluded by!**/*.pngpackages/stream_chat_flutter/test/src/message_modal/goldens/ci/stream_message_actions_modal_dark.pngis excluded by!**/*.pngpackages/stream_chat_flutter/test/src/message_modal/goldens/ci/stream_message_actions_modal_light.pngis excluded by!**/*.pngpackages/stream_chat_flutter/test/src/message_modal/goldens/ci/stream_message_actions_modal_reversed_dark.pngis excluded by!**/*.pngpackages/stream_chat_flutter/test/src/message_modal/goldens/ci/stream_message_actions_modal_reversed_light.pngis excluded by!**/*.pngpackages/stream_chat_flutter/test/src/message_modal/goldens/ci/stream_message_actions_modal_reversed_with_reactions_dark.pngis excluded by!**/*.pngpackages/stream_chat_flutter/test/src/message_modal/goldens/ci/stream_message_actions_modal_reversed_with_reactions_light.pngis excluded by!**/*.pngpackages/stream_chat_flutter/test/src/message_modal/goldens/ci/stream_message_actions_modal_with_reactions_dark.pngis excluded by!**/*.pngpackages/stream_chat_flutter/test/src/message_modal/goldens/ci/stream_message_actions_modal_with_reactions_light.pngis excluded by!**/*.pngpackages/stream_chat_flutter/test/src/message_modal/goldens/ci/stream_message_reactions_modal_dark.pngis excluded by!**/*.pngpackages/stream_chat_flutter/test/src/message_modal/goldens/ci/stream_message_reactions_modal_light.pngis excluded by!**/*.pngpackages/stream_chat_flutter/test/src/message_modal/goldens/ci/stream_message_reactions_modal_reversed_dark.pngis excluded by!**/*.pngpackages/stream_chat_flutter/test/src/message_modal/goldens/ci/stream_message_reactions_modal_reversed_light.pngis excluded by!**/*.pngpackages/stream_chat_flutter/test/src/poll/creator/goldens/ci/poll_option_reorderable_list_view_dark.pngis excluded by!**/*.pngpackages/stream_chat_flutter/test/src/poll/creator/goldens/ci/poll_option_reorderable_list_view_error_dark.pngis excluded by!**/*.pngpackages/stream_chat_flutter/test/src/poll/creator/goldens/ci/poll_option_reorderable_list_view_error_light.pngis excluded by!**/*.pngpackages/stream_chat_flutter/test/src/poll/creator/goldens/ci/poll_option_reorderable_list_view_light.pngis excluded by!**/*.pngpackages/stream_chat_flutter/test/src/poll/creator/goldens/ci/stream_poll_creator_dialog_dark.pngis excluded by!**/*.pngpackages/stream_chat_flutter/test/src/poll/creator/goldens/ci/stream_poll_creator_dialog_light.pngis excluded by!**/*.pngpackages/stream_chat_flutter/test/src/poll/creator/goldens/ci/stream_poll_creator_full_screen_dialog_dark.pngis excluded by!**/*.pngpackages/stream_chat_flutter/test/src/poll/creator/goldens/ci/stream_poll_creator_full_screen_dialog_light.pngis excluded by!**/*.pngpackages/stream_chat_flutter/test/src/poll/goldens/ci/poll_option_reorderable_list_view_dark.pngis excluded by!**/*.pngpackages/stream_chat_flutter/test/src/poll/goldens/ci/poll_option_reorderable_list_view_error.pngis excluded by!**/*.pngpackages/stream_chat_flutter/test/src/poll/goldens/ci/poll_option_reorderable_list_view_light.pngis excluded by!**/*.pngpackages/stream_chat_flutter/test/src/poll/goldens/ci/stream_poll_creator_dialog_dark.pngis excluded by!**/*.pngpackages/stream_chat_flutter/test/src/poll/goldens/ci/stream_poll_creator_dialog_light.pngis excluded by!**/*.pngpackages/stream_chat_flutter/test/src/poll/goldens/ci/stream_poll_creator_full_screen_dialog_dark.pngis excluded by!**/*.pngpackages/stream_chat_flutter/test/src/poll/goldens/ci/stream_poll_creator_full_screen_dialog_light.pngis excluded by!**/*.pngpackages/stream_chat_flutter/test/src/poll/goldens/ci/stream_poll_results_dialog_dark.pngis excluded by!**/*.pngpackages/stream_chat_flutter/test/src/poll/goldens/ci/stream_poll_results_dialog_light.pngis excluded by!**/*.pngpackages/stream_chat_flutter/test/src/poll/goldens/ci/stream_poll_results_dialog_with_show_all_dark.pngis excluded by!**/*.pngpackages/stream_chat_flutter/test/src/poll/goldens/ci/stream_poll_results_dialog_with_show_all_light.pngis excluded by!**/*.pngpackages/stream_chat_flutter/test/src/scroll_view/thread_scroll_view/goldens/ci/stream_unread_threads_banner_dark.pngis excluded by!**/*.pngpackages/stream_chat_flutter/test/src/scroll_view/thread_scroll_view/goldens/ci/stream_unread_threads_banner_light.pngis excluded by!**/*.png
📒 Files selected for processing (92)
packages/stream_chat_flutter/example/lib/main.dartpackages/stream_chat_flutter/lib/src/attachment/attachment_upload_state_builder.dartpackages/stream_chat_flutter/lib/src/attachment/file_attachment.dartpackages/stream_chat_flutter/lib/src/attachment_actions_modal/attachment_actions_modal.dartpackages/stream_chat_flutter/lib/src/autocomplete/stream_command_autocomplete_options.dartpackages/stream_chat_flutter/lib/src/bottom_sheets/edit_message_sheet.dartpackages/stream_chat_flutter/lib/src/bottom_sheets/error_alert_sheet.dartpackages/stream_chat_flutter/lib/src/bottom_sheets/stream_channel_info_bottom_sheet.dartpackages/stream_chat_flutter/lib/src/channel/channel_list_header.dartpackages/stream_chat_flutter/lib/src/fullscreen_media/full_screen_media_desktop.dartpackages/stream_chat_flutter/lib/src/gallery/gallery_footer.dartpackages/stream_chat_flutter/lib/src/gallery/gallery_header.dartpackages/stream_chat_flutter/lib/src/icons/stream_svg_icon.dartpackages/stream_chat_flutter/lib/src/indicators/sending_indicator.dartpackages/stream_chat_flutter/lib/src/message_input/attachment_button.dartpackages/stream_chat_flutter/lib/src/message_input/attachment_picker/options/stream_file_picker.dartpackages/stream_chat_flutter/lib/src/message_input/attachment_picker/options/stream_gallery_picker.dartpackages/stream_chat_flutter/lib/src/message_input/attachment_picker/options/stream_image_picker.dartpackages/stream_chat_flutter/lib/src/message_input/attachment_picker/options/stream_poll_creator.dartpackages/stream_chat_flutter/lib/src/message_input/attachment_picker/options/stream_video_picker.dartpackages/stream_chat_flutter/lib/src/message_input/attachment_picker/stream_attachment_picker.dartpackages/stream_chat_flutter/lib/src/message_input/audio_recorder/stream_audio_recorder.dartpackages/stream_chat_flutter/lib/src/message_input/clear_input_item_button.dartpackages/stream_chat_flutter/lib/src/message_input/command_button.dartpackages/stream_chat_flutter/lib/src/message_input/quoting_message_top_area.dartpackages/stream_chat_flutter/lib/src/message_input/stream_message_input.dartpackages/stream_chat_flutter/lib/src/message_input/stream_message_input_attachment_list.dartpackages/stream_chat_flutter/lib/src/message_input/stream_message_send_button.dartpackages/stream_chat_flutter/lib/src/message_list_view/message_list_view.dartpackages/stream_chat_flutter/lib/src/message_list_view/unread_indicator_button.dartpackages/stream_chat_flutter/lib/src/message_modal/moderated_message_actions_modal.dartpackages/stream_chat_flutter/lib/src/message_widget/message_widget_content.dartpackages/stream_chat_flutter/lib/src/message_widget/pinned_message.dartpackages/stream_chat_flutter/lib/src/misc/back_button.dartpackages/stream_chat_flutter/lib/src/misc/giphy_chip.dartpackages/stream_chat_flutter/lib/src/misc/reaction_icon.dartpackages/stream_chat_flutter/lib/src/misc/visible_footnote.dartpackages/stream_chat_flutter/lib/src/poll/creator/poll_option_reorderable_list_view.dartpackages/stream_chat_flutter/lib/src/poll/creator/stream_poll_creator_dialog.dartpackages/stream_chat_flutter/lib/src/poll/stream_poll_option_votes_dialog.dartpackages/stream_chat_flutter/lib/src/poll/stream_poll_results_dialog.dartpackages/stream_chat_flutter/lib/src/scroll_view/channel_scroll_view/stream_channel_grid_view.dartpackages/stream_chat_flutter/lib/src/scroll_view/channel_scroll_view/stream_channel_list_tile.dartpackages/stream_chat_flutter/lib/src/scroll_view/channel_scroll_view/stream_channel_list_view.dartpackages/stream_chat_flutter/lib/src/scroll_view/draft_scroll_view/stream_draft_list_view.dartpackages/stream_chat_flutter/lib/src/scroll_view/member_scroll_view/stream_member_grid_view.dartpackages/stream_chat_flutter/lib/src/scroll_view/member_scroll_view/stream_member_list_view.dartpackages/stream_chat_flutter/lib/src/scroll_view/message_search_scroll_view/stream_message_search_grid_view.dartpackages/stream_chat_flutter/lib/src/scroll_view/message_search_scroll_view/stream_message_search_list_view.dartpackages/stream_chat_flutter/lib/src/scroll_view/photo_gallery/stream_photo_gallery.dartpackages/stream_chat_flutter/lib/src/scroll_view/photo_gallery/stream_photo_gallery_tile.dartpackages/stream_chat_flutter/lib/src/scroll_view/poll_vote_scroll_view/stream_poll_vote_list_view.dartpackages/stream_chat_flutter/lib/src/scroll_view/stream_scroll_view_load_more_error.dartpackages/stream_chat_flutter/lib/src/scroll_view/thread_scroll_view/stream_thread_list_view.dartpackages/stream_chat_flutter/lib/src/scroll_view/thread_scroll_view/stream_unread_threads_banner.dartpackages/stream_chat_flutter/lib/src/scroll_view/user_scroll_view/stream_user_grid_view.dartpackages/stream_chat_flutter/lib/src/scroll_view/user_scroll_view/stream_user_list_tile.dartpackages/stream_chat_flutter/lib/src/scroll_view/user_scroll_view/stream_user_list_view.dartpackages/stream_chat_flutter/lib/src/theme/stream_chat_theme.dartpackages/stream_chat_flutter/lib/src/user/user_mention_tile.dartpackages/stream_chat_flutter/test/src/attachment/voice_recording_attachment_test.dartpackages/stream_chat_flutter/test/src/full_screen_media/full_screen_media_test.dartpackages/stream_chat_flutter/test/src/gallery/gallery_footer_test.dartpackages/stream_chat_flutter/test/src/gallery/gallery_header_test.dartpackages/stream_chat_flutter/test/src/indicators/sending_indicator_test.dartpackages/stream_chat_flutter/test/src/message_input/attachment_button_test.dartpackages/stream_chat_flutter/test/src/message_input/audio_recorder/stream_audio_recorder_test.dartpackages/stream_chat_flutter/test/src/message_input/clear_input_item_test.dartpackages/stream_chat_flutter/test/src/message_input/stream_message_send_button_test.dartpackages/stream_chat_flutter/test/src/message_modal/message_actions_modal_test.dartpackages/stream_chat_flutter/test/src/message_modal/moderated_message_actions_modal_test.dartpackages/stream_chat_flutter/test/src/poll/creator/poll_option_reorderable_list_view_test.dartsample_app/ios/Flutter/AppFrameworkInfo.plistsample_app/lib/pages/advanced_options_page.dartsample_app/lib/pages/channel_file_display_screen.dartsample_app/lib/pages/channel_list_page.dartsample_app/lib/pages/channel_media_display_screen.dartsample_app/lib/pages/chat_info_screen.dartsample_app/lib/pages/choose_user_page.dartsample_app/lib/pages/draft_list_page.dartsample_app/lib/pages/group_chat_details_screen.dartsample_app/lib/pages/group_info_screen.dartsample_app/lib/pages/new_chat_screen.dartsample_app/lib/pages/new_group_chat_screen.dartsample_app/lib/pages/pinned_messages_screen.dartsample_app/lib/pages/reminders_page.dartsample_app/lib/pages/user_mentions_page.dartsample_app/lib/widgets/channel_list.dartsample_app/lib/widgets/chips_input_text_field.dartsample_app/lib/widgets/location/location_picker_dialog.dartsample_app/lib/widgets/message_info_sheet.dartsample_app/lib/widgets/search_text_field.dart
💤 Files with no reviewable changes (1)
- sample_app/ios/Flutter/AppFrameworkInfo.plist
| import 'package:flutter/material.dart' hide TextTheme; | ||
| import 'package:stream_chat_flutter/src/misc/audio_waveform.dart'; | ||
| import 'package:stream_chat_flutter/stream_chat_flutter.dart'; | ||
| import 'package:stream_core_flutter/src/theme/primitives/stream_icons.g.dart'; |
There was a problem hiding this comment.
🧩 Analysis chain
🏁 Script executed:
#!/bin/bash
# Verify no implementation imports remain in package and sample code.
rg -n "package:stream_core_flutter/src/" \
packages/stream_chat_flutter/lib \
packages/stream_chat_flutter/test \
sample_app/libRepository: GetStream/stream-chat-flutter
Length of output: 1410
🏁 Script executed:
#!/bin/bash
# Check stream_core_flutter package structure and public exports
echo "=== Checking stream_core_flutter public API ==="
if [ -d "packages/stream_core_flutter" ]; then
echo "stream_core_flutter package found at packages/stream_core_flutter"
# Check main library file
if [ -f "packages/stream_core_flutter/lib/stream_core_flutter.dart" ]; then
echo "✓ Public export file exists: packages/stream_core_flutter/lib/stream_core_flutter.dart"
echo "Contents:"
cat packages/stream_core_flutter/lib/stream_core_flutter.dart | head -50
fi
# Check if src/theme/primitives/stream_icons.g.dart exists
if [ -f "packages/stream_core_flutter/lib/src/theme/primitives/stream_icons.g.dart" ]; then
echo "✓ Internal file exists: lib/src/theme/primitives/stream_icons.g.dart"
fi
fiRepository: GetStream/stream-chat-flutter
Length of output: 120
🏁 Script executed:
#!/bin/bash
# Check current line 6 of the file in question
echo "=== Current line 6 of stream_chat_theme.dart ==="
if [ -f "packages/stream_chat_flutter/lib/src/theme/stream_chat_theme.dart" ]; then
sed -n '1,15p' packages/stream_chat_flutter/lib/src/theme/stream_chat_theme.dart
fiRepository: GetStream/stream-chat-flutter
Length of output: 718
🏁 Script executed:
#!/bin/bash
# Check stream_core_flutter main library file and exports
echo "=== Listing stream_core_flutter lib directory ==="
ls -la packages/stream_core_flutter/lib/ 2>/dev/null | head -20
echo -e "\n=== Checking stream_core_flutter.dart main file ==="
if [ -f "packages/stream_core_flutter/lib/stream_core_flutter.dart" ]; then
wc -l packages/stream_core_flutter/lib/stream_core_flutter.dart
cat packages/stream_core_flutter/lib/stream_core_flutter.dart
else
echo "File not found at expected path"
fi
echo -e "\n=== Checking for theme-related exports ==="
rg -i "stream_icons|theme" packages/stream_core_flutter/lib/stream_core_flutter.dart 2>/dev/null || echo "No matches or file not accessible"Repository: GetStream/stream-chat-flutter
Length of output: 285
🏁 Script executed:
#!/bin/bash
# Alternative approach: check what's exported from stream_core_flutter theme
echo "=== Checking stream_core_flutter theme directory ==="
find packages/stream_core_flutter/lib -path "*/theme/*" -type f -name "*.dart" 2>/dev/null | head -20Repository: GetStream/stream-chat-flutter
Length of output: 125
🏁 Script executed:
#!/bin/bash
# Check if stream_core_flutter is a local package elsewhere or external dependency
echo "=== Checking pubspec.yaml for stream_core_flutter dependency ==="
if [ -f "packages/stream_chat_flutter/pubspec.yaml" ]; then
rg -A 3 "stream_core_flutter" packages/stream_chat_flutter/pubspec.yaml
fi
echo -e "\n=== Checking all pubspec.yaml files for stream_core_flutter ==="
rg "stream_core_flutter" pubspec.yaml 2>/dev/null | head -10
echo -e "\n=== Checking if stream_core_flutter exists as local package ==="
find . -maxdepth 2 -name "stream_core_flutter" -type d 2>/dev/nullRepository: GetStream/stream-chat-flutter
Length of output: 699
🏁 Script executed:
#!/bin/bash
# Check the actual import usage to understand what symbols are needed
echo "=== Analyzing stream_icons.g.dart import usage in stream_chat_theme.dart ==="
rg "StreamIcon" packages/stream_chat_flutter/lib/src/theme/stream_chat_theme.dart | head -20Repository: GetStream/stream-chat-flutter
Length of output: 266
Fix implementation_imports violation on line 6 (CI-blocking issue).
Import from stream_core_flutter's public API instead of internal src/ path. This violates the implementation_imports rule and is already failing the pipeline.
Replace the import with:
-import 'package:stream_core_flutter/src/theme/primitives/stream_icons.g.dart';
+import 'package:stream_core_flutter/stream_core_flutter.dart';This same issue appears in 7 additional test files. Update all occurrences:
packages/stream_chat_flutter/test/src/attachment/voice_recording_attachment_test.dart:8packages/stream_chat_flutter/test/src/poll/creator/poll_option_reorderable_list_view_test.dart:8packages/stream_chat_flutter/test/src/message_modal/moderated_message_actions_modal_test.dart:7packages/stream_chat_flutter/test/src/message_modal/message_actions_modal_test.dart:8packages/stream_chat_flutter/test/src/message_input/stream_message_send_button_test.dart:9packages/stream_chat_flutter/test/src/message_input/audio_recorder/stream_audio_recorder_test.dart:8packages/stream_chat_flutter/test/src/indicators/sending_indicator_test.dart:5
🧰 Tools
🪛 GitHub Actions: stream_flutter_workflow
[error] 6-6: Import of a library in the 'lib/src' directory of another package. Try importing a public library that exports this library, or removing the import. - implementation_imports
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@packages/stream_chat_flutter/lib/src/theme/stream_chat_theme.dart` at line 6,
Replace the internal src import of the generated icons file (currently importing
stream_icons.g.dart via package:stream_core_flutter/src/...) with the package's
public API import that exposes the same symbol (import from
package:stream_core_flutter/... public path instead of src). Update the import
statement that references stream_icons.g.dart in stream_chat_theme.dart and the
seven test files (voice_recording_attachment_test.dart,
poll_option_reorderable_list_view_test.dart,
moderated_message_actions_modal_test.dart, message_actions_modal_test.dart,
stream_message_send_button_test.dart, stream_audio_recorder_test.dart,
sending_indicator_test.dart) so they import the public stream_core_flutter
export that provides stream_icons.g.dart (or stream_icons) rather than using the
src/ path. Ensure the import still exposes the stream_icons.g.dart symbols used
in those files (e.g., StreamIcons).
| import 'package:flutter/material.dart'; | ||
| import 'package:flutter_test/flutter_test.dart'; | ||
| import 'package:stream_chat_flutter/stream_chat_flutter.dart'; | ||
| import 'package:stream_core_flutter/src/theme/primitives/stream_icons.g.dart'; |
There was a problem hiding this comment.
🧩 Analysis chain
🏁 Script executed:
#!/bin/bash
# Check if StreamIconData is exported from the public barrel file
rg -n 'StreamIconData|stream_icons' packages/stream_core_flutter/lib/stream_core_flutter.dart
# Check the export structure
cat packages/stream_core_flutter/lib/stream_core_flutter.dart 2>/dev/null | head -100Repository: GetStream/stream-chat-flutter
Length of output: 170
🏁 Script executed:
#!/bin/bash
# Find the stream_core_flutter lib directory
fd -t f "\.dart$" packages/stream_core_flutter/lib/ | head -20
# Look for main library files or barrels
ls -la packages/stream_core_flutter/lib/ 2>/dev/null
# Check if stream_icons.g.dart is accessible
fd -t f "stream_icons" packages/stream_core_flutter/Repository: GetStream/stream-chat-flutter
Length of output: 310
🏁 Script executed:
#!/bin/bash
# Find where stream_core_flutter is referenced
find . -name "pubspec.yaml" -type f | head -5 | xargs grep -l "stream_core_flutter" 2>/dev/null
# Check the test file to see what it's importing
cat -n packages/stream_chat_flutter/test/src/message_modal/moderated_message_actions_modal_test.dart | head -20
# Search for stream_core_flutter in the entire repo structure
git ls-files | grep stream_core_flutter | head -20Repository: GetStream/stream-chat-flutter
Length of output: 944
🏁 Script executed:
#!/bin/bash
# Check the pubspec.yaml for stream_core_flutter dependency
cat packages/stream_chat_flutter/pubspec.yaml | grep -A 5 "stream_core_flutter"
# Check if stream_core_flutter is a local package in the repo
find . -name "pubspec.yaml" -type f -exec grep -l "name: stream_core_flutter" {} \;
# List what's in packages directory
ls -la packages/Repository: GetStream/stream-chat-flutter
Length of output: 1037
🏁 Script executed:
#!/bin/bash
# Search for all imports from stream_core_flutter to see the pattern
rg "from 'package:stream_core_flutter" --type dart -n
# Also search for StreamIconData usage
rg "StreamIconData" --type dart -n -A 2
# Check the test file more thoroughly
cat -n packages/stream_chat_flutter/test/src/message_modal/moderated_message_actions_modal_test.dart | head -60Repository: GetStream/stream-chat-flutter
Length of output: 16170
🏁 Script executed:
#!/bin/bash
# Find all import statements from stream_core_flutter
rg "import.*stream_core_flutter" --type dart -n
# Check what's in stream_chat_flutter's main library to see how it imports
rg "stream_core_flutter|StreamIconData" packages/stream_chat_flutter/lib/stream_chat_flutter.dart -A 2 -B 2Repository: GetStream/stream-chat-flutter
Length of output: 6158
🏁 Script executed:
#!/bin/bash
# Find files that successfully use StreamIconData without the internal src import
rg "StreamIconData" --type dart -B 5 | grep -E "(import|StreamIconData)" | head -40
# Check the production file for comparison
cat -n packages/stream_chat_flutter/lib/src/theme/stream_chat_theme.dart | sed -n '1,10p'
# Check the production moderated_message_actions_modal.dart for comparison
cat -n packages/stream_chat_flutter/lib/src/message_modal/moderated_message_actions_modal.dart | sed -n '1,15p'Repository: GetStream/stream-chat-flutter
Length of output: 7155
Use the public barrel export instead of importing from internal src/ paths.
The import package:stream_core_flutter/src/theme/primitives/stream_icons.g.dart reaches into the internal implementation details of stream_core_flutter. The corresponding production file moderated_message_actions_modal.dart imports from the public barrel (package:stream_core_flutter/stream_core_flutter.dart) and successfully accesses StreamIconData. Update this test to use the public import for consistency and to avoid coupling to private implementation details.
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In
`@packages/stream_chat_flutter/test/src/message_modal/moderated_message_actions_modal_test.dart`
at line 7, Replace the internal src import with the public barrel export used by
production code: remove the import of
package:stream_core_flutter/src/theme/primitives/stream_icons.g.dart and instead
import the public package export that exposes StreamIconData (the same public
barrel used by moderated_message_actions_modal.dart). Update the import in
moderated_message_actions_modal_test.dart so the test references StreamIconData
from the public package export rather than from the internal src path.
| import 'package:stream_chat_flutter/stream_chat_flutter.dart'; | ||
|
|
||
| import '../../utils/finders.dart'; | ||
| import 'package:stream_core_flutter/src/theme/primitives/stream_icons.g.dart'; |
There was a problem hiding this comment.
🧩 Analysis chain
🏁 Script executed:
#!/bin/bash
set -euo pipefail
echo "1) Check lint rules related to implementation imports:"
fd 'analysis_options.yaml' --exec sh -c 'echo "==> $1"; sed -n "1,220p" "$1"' sh {}
echo
echo "2) Find public exports that may expose StreamIconData:"
rg -n --type=dart -C2 'export .*stream_icons|export .*primitives|StreamIconData' packages/stream_core_flutter/lib packages/stream_chat_flutter/lib
echo
echo "3) Confirm where implementation imports are currently used:"
rg -n --type=dart 'package:stream_core_flutter/src/.+stream_icons\.g\.dart' packagesRepository: GetStream/stream-chat-flutter
Length of output: 7647
🏁 Script executed:
#!/bin/bash
set -euo pipefail
echo "1) Find stream_core_flutter package location:"
find . -type d -name 'stream_core_flutter' 2>/dev/null | head -10
echo
echo "2) Search for StreamIconData definition and usage:"
rg -n 'class StreamIconData|StreamIconData' --type=dart packages
echo
echo "3) Check if stream_icons is exported from a public path:"
rg -n 'export.*stream_icons' --type=dart packages
echo
echo "4) Look for public exports in stream_chat_flutter:"
find packages/stream_chat_flutter -name 'stream_chat_flutter.dart' -o -name 'exports.dart' | xargs cat 2>/dev/null | grep -E 'export|import' | head -20Repository: GetStream/stream-chat-flutter
Length of output: 6120
🏁 Script executed:
#!/bin/bash
set -euo pipefail
echo "1) Check the imports in the test file:"
head -20 packages/stream_chat_flutter/test/src/poll/creator/poll_option_reorderable_list_view_test.dart
echo
echo "2) Check if there are ignore comments for implementation_imports:"
rg -B2 -A2 'stream_icons\.g\.dart' packages/stream_chat_flutter/test/src/poll/creator/poll_option_reorderable_list_view_test.dart
echo
echo "3) Check pubspec.yaml for stream_core_flutter dependency:"
grep -A5 -B2 'stream_core_flutter' packages/stream_chat_flutter/pubspec.yaml
echo
echo "4) Check if other test files have similar imports:"
rg -n "import 'package:stream_core_flutter/src" packages/stream_chat_flutter/test --type=dart | head -10Repository: GetStream/stream-chat-flutter
Length of output: 3312
Implementation import violates enabled lint rule.
The implementation_imports lint is explicitly enabled in analysis_options.yaml, and this import from package:stream_core_flutter/src/... violates that rule. The same pattern appears across 7 test files. Either expose StreamIconData and the icon constants through a public export in stream_core_flutter, or add explicit // ignore: implementation_imports directives if importing from internal packages is intentional.
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In
`@packages/stream_chat_flutter/test/src/poll/creator/poll_option_reorderable_list_view_test.dart`
at line 8, The test imports a library from package:stream_core_flutter/src/...
(stream_icons.g.dart) which violates the implementation_imports lint; either (A)
expose StreamIconData and the icon constants via a public export in
stream_core_flutter (add an export for src/theme/primitives/stream_icons.g.dart
from the package's public lib so tests import
package:stream_core_flutter/stream_icons.dart or similar and update tests to use
that public symbol names), or (B) if internal import is intentional, add an
explicit ignore directive above the import in each test (// ignore:
implementation_imports) for the import of stream_icons.g.dart, ensuring you
reference StreamIconData and the icon constants consistently after the change.
# Conflicts: # packages/stream_chat_flutter/lib/src/channel/channel_list_header.dart # packages/stream_chat_flutter/lib/src/misc/reaction_icon.dart # packages/stream_chat_flutter/lib/src/theme/stream_chat_theme.dart # packages/stream_chat_flutter/test/src/attachment/goldens/ci/stream_voice_recording_attachment_idle_dark.png # packages/stream_chat_flutter/test/src/attachment/goldens/ci/stream_voice_recording_attachment_idle_light.png # packages/stream_chat_flutter/test/src/attachment/goldens/ci/stream_voice_recording_attachment_playing_dark.png # packages/stream_chat_flutter/test/src/attachment/goldens/ci/stream_voice_recording_attachment_playing_light.png # packages/stream_chat_flutter/test/src/attachment/goldens/ci/stream_voice_recording_attachment_playlist_dark.png # packages/stream_chat_flutter/test/src/attachment/goldens/ci/stream_voice_recording_attachment_playlist_light.png # packages/stream_chat_flutter/test/src/attachment/voice_recording_attachment_test.dart # packages/stream_chat_flutter/test/src/message_input/audio_recorder/goldens/ci/stream_audio_recorder_button_recording_hold_dark.png # packages/stream_chat_flutter/test/src/message_input/audio_recorder/goldens/ci/stream_audio_recorder_button_recording_locked_dark.png # packages/stream_chat_flutter/test/src/message_input/audio_recorder/goldens/ci/stream_audio_recorder_button_recording_locked_light.png # packages/stream_chat_flutter/test/src/message_input/audio_recorder/goldens/ci/stream_audio_recorder_button_recording_stopped_dark.png # packages/stream_chat_flutter/test/src/message_input/audio_recorder/goldens/ci/stream_audio_recorder_button_recording_stopped_light.png # packages/stream_chat_flutter/test/src/message_modal/goldens/ci/stream_message_actions_modal_dark.png # packages/stream_chat_flutter/test/src/message_modal/goldens/ci/stream_message_actions_modal_light.png # packages/stream_chat_flutter/test/src/message_modal/goldens/ci/stream_message_actions_modal_reversed_dark.png # packages/stream_chat_flutter/test/src/message_modal/goldens/ci/stream_message_actions_modal_reversed_light.png # packages/stream_chat_flutter/test/src/message_modal/goldens/ci/stream_message_actions_modal_reversed_with_reactions_dark.png # packages/stream_chat_flutter/test/src/message_modal/goldens/ci/stream_message_actions_modal_reversed_with_reactions_light.png # packages/stream_chat_flutter/test/src/message_modal/goldens/ci/stream_message_actions_modal_with_reactions_dark.png # packages/stream_chat_flutter/test/src/message_modal/goldens/ci/stream_message_actions_modal_with_reactions_light.png # packages/stream_chat_flutter/test/src/message_modal/goldens/ci/stream_message_reactions_modal_dark.png # packages/stream_chat_flutter/test/src/message_modal/goldens/ci/stream_message_reactions_modal_light.png # packages/stream_chat_flutter/test/src/message_modal/goldens/ci/stream_message_reactions_modal_reversed_dark.png # packages/stream_chat_flutter/test/src/message_modal/goldens/ci/stream_message_reactions_modal_reversed_light.png
Submit a pull request
CLA
Description of the pull request
This deprecates the old svg icons and adds a list of replacement icons for easy migration.
Summary by CodeRabbit
Release Notes
Style
Refactor
Deprecation