Skip to main content
The Daily Client SDK for Flutter is a Dart package built on WebRTC. It handles media negotiation, network traversal, and participant management so you can focus on building your UI.

Demo app

A complete working example on GitHub

API reference

Full Dart API docs on pub.dev

Getting started

Add the package to your pubspec.yaml:
dependencies:
  daily_flutter: ^latest
Then join a call and display participant video:
import 'package:daily_flutter/daily_flutter.dart';

final call = CallClient();

// Subscribe to events
call.events.listen((event) {
  if (event is ParticipantJoinedEvent) {
    // Add a VideoView for this participant
  } else if (event is ParticipantUpdatedEvent) {
    // Update tracks for this participant
  } else if (event is ParticipantLeftEvent) {
    // Remove the participant's VideoView
  }
});

// Join the call
await call.join(url: Uri.parse('https://your-domain.daily.co/room-name'));

// Toggle camera
await call.setInputsEnabled(camera: false);

// Leave when done
await call.leave();
call.dispose();
Render a participant’s video using VideoView:
VideoView(
  participant: participant,
  videoSource: VideoSource.camera,
)

API structure

The SDK is organized around the tasks involved in building a call. For each task you get methods to update state, properties to get current state, and events via CallClient.events to react to changes.

Call lifecycle

join(), leave(), callState, CallStateUpdated

Participants

participants(), ParticipantJoined, ParticipantUpdated, ParticipantLeft

Media inputs

updateInputs(), setInputsEnabled(), InputsUpdated

Publishing

updatePublishing(), PublishingUpdated

Subscriptions

updateSubscriptions(), updateSubscriptionProfiles(), SubscriptionsUpdated

Active speaker

activeSpeaker, ActiveSpeakerChanged

Requirements

  • Flutter 3.0 or later
  • iOS deployment target >= 13.0
  • Android minSdkVersion >= 23