Skip to content

feat(ui, samples): introduced componentBuilders with participant tile - #1310

Open
renefloor wants to merge 2 commits into
v2from
feat/component-factory
Open

feat(ui, samples): introduced componentBuilders with participant tile#1310
renefloor wants to merge 2 commits into
v2from
feat/component-factory

Conversation

@renefloor

@renefloor renefloor commented Aug 20, 2026

Copy link
Copy Markdown
Contributor

🎯 Goal

Introducing the component builders from core and chat.

🛠 Implementation details

This creates a streamVideoComponentBuilders in which we can add more component builders later.
It creates a new StreamParticipantTile and renamed the old StreamCallParticipant to DefaultStreamParticipantTile. The new naming matches figma: https://www.figma.com/design/BJppI3JYlPy3XeEu5MZY1E/SDK-Design-System?node-id=24212-75268&p=f&m=dev

To keep migrations easy and simple we kept the old StreamCallParticipant, but deprecated it and added a dart fix rule.

The dogfooding app adds a no-op component factory as demo:

  late final _componentBuilders = StreamComponentBuilders(
    extensions: [
      ...streamVideoComponentBuilders(
        // No-op change for [StreamParticipantTile] as demo example.
        participantTile: (context, props) =>
            DefaultStreamParticipantTile(props: props),
      ),
      // You can combine both chat and video component builders.
      ...streamChatComponentBuilders(),
    ],
  );

🎨 UI Changes

Should be no UI changes.

Summary by CodeRabbit

  • New Features

    • Added configurable participant tiles with app-wide component customization.
    • Added support for custom video renderers, placeholders, labels, styling, reactions, and connection indicators.
    • Added shared Stream Video and Chat component configuration.
  • Improvements

    • Updated calls, livestreams, screen sharing, and Android picture-in-picture to use the new participant tile experience.
  • Migration

    • Replaced StreamCallParticipant with StreamParticipantTile.
    • StreamCallParticipant remains available as a deprecated compatibility option; use dart fix --apply to migrate automatically.

@renefloor
renefloor requested a review from a team as a code owner August 20, 2026 15:05
@coderabbitai

coderabbitai Bot commented Aug 20, 2026

Copy link
Copy Markdown

Review Change Stack

Important

Review skipped

Auto reviews are disabled on base/target branches other than the default branch.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 03d840e8-b47f-4eda-ab5e-d67c6fe9b5d1

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 79f3edcb-8afe-4f1d-89d2-63d2dbe28614

📥 Commits

Reviewing files that changed from the base of the PR and between f3fd83d and 4d44c0d.

📒 Files selected for processing (16)
  • dogfooding/lib/app/app_content.dart
  • packages/stream_video_flutter/CHANGELOG.md
  • packages/stream_video_flutter/lib/fix_data.yaml
  • packages/stream_video_flutter/lib/src/call_participants/call_participant.dart
  • packages/stream_video_flutter/lib/src/call_participants/call_participants.dart
  • packages/stream_video_flutter/lib/src/call_participants/livestream_hosts.dart
  • packages/stream_video_flutter/lib/src/call_participants/local_video.dart
  • packages/stream_video_flutter/lib/src/call_participants/participant_tile.dart
  • packages/stream_video_flutter/lib/src/call_participants/regular_call_participants_content.dart
  • packages/stream_video_flutter/lib/src/call_participants/screen_share_call_participants_content.dart
  • packages/stream_video_flutter/lib/src/call_screen/call_content/picture_in_picture/android_pip_overlay.dart
  • packages/stream_video_flutter/lib/src/components/stream_video_component_builders.dart
  • packages/stream_video_flutter/lib/src/livestream/livestream_content.dart
  • packages/stream_video_flutter/lib/src/theme/call_participant_theme.dart
  • packages/stream_video_flutter/lib/stream_video_flutter.dart
  • packages/stream_video_flutter/test/src/call_participants/participant_tile_test.dart
💤 Files with no reviewable changes (1)
  • packages/stream_video_flutter/lib/src/call_participants/call_participant.dart

Included review availability: Your plan provides up to 1 included review per hour; 0 remain after this review.


📝 Walkthrough

Walkthrough

The package introduces a configurable StreamParticipantTile, a default implementation, component-factory lookup, and deprecated compatibility support. Internal participant builders use the new widget. The dogfooding app registers Stream Video and Stream Chat builders through StreamComponentFactory.

Changes

Participant tile component system

Layer / File(s) Summary
Participant tile contract and rendering
packages/stream_video_flutter/lib/src/call_participants/participant_tile.dart
Adds StreamParticipantTileProps, configurable builders, default participant rendering, and a deprecated StreamCallParticipant wrapper.
Component factory wiring and public exports
packages/stream_video_flutter/lib/src/components/stream_video_component_builders.dart, packages/stream_video_flutter/lib/stream_video_flutter.dart
Adds participant tile builder registration, typed BuildContext lookup, and public exports.
Internal participant builder migration
packages/stream_video_flutter/lib/src/call_participants/..., packages/stream_video_flutter/lib/src/call_screen/..., packages/stream_video_flutter/lib/src/livestream/..., packages/stream_video_flutter/lib/src/theme/...
Replaces internal StreamCallParticipant construction and references with StreamParticipantTile.
Migration support and component validation
packages/stream_video_flutter/lib/fix_data.yaml, packages/stream_video_flutter/CHANGELOG.md, packages/stream_video_flutter/test/src/call_participants/participant_tile_test.dart
Adds the bulk rename migration, documents the transition, and tests custom builders, fallback rendering, and compatibility behavior.
Dogfooding app factory registration
dogfooding/lib/app/app_content.dart
Registers Stream Video and Stream Chat builders and wraps routed content in StreamComponentFactory.

Estimated code review effort: 4 (Complex) | ~45 minutes

Merge Risk: ⚪ Minimal · up to 4d44c

This change introduces component builders and renames the participant tile while preserving the deprecated API for migration support. No actionable merge-blocking risk remains beyond normal checks and review.

Sequence Diagram(s)

sequenceDiagram
  participant AppContent
  participant StreamComponentFactory
  participant StreamParticipantTile
  participant DefaultStreamParticipantTile
  AppContent->>StreamComponentFactory: provide Stream Video and Stream Chat builders
  StreamComponentFactory->>StreamParticipantTile: expose participant tile builder
  StreamParticipantTile->>StreamComponentFactory: look up registered builder
  StreamComponentFactory-->>StreamParticipantTile: return builder or no builder
  StreamParticipantTile->>DefaultStreamParticipantTile: render default tile when no custom builder exists
Loading

Suggested reviewers: brazol

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly identifies the main change: component builders and participant tile support.
Description check ✅ Passed The description covers the goal, implementation, naming changes, migration support, dogfooding example, and intended lack of UI changes.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
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.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feat/component-factory

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.

'Use StreamParticipantTile instead. '
'Will be removed in the next major version.',
)
class StreamCallParticipant extends StatelessWidget {

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think we can just make it a typedef for the new widget instead.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yeah typedef could also be. We still have to update the widget itself though, so we might want to use this widget to map the legacy theme to the new participant theme if we make changes there. We can still go both ways.

Comment thread packages/stream_video_flutter/CHANGELOG.md Outdated
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