> ## Documentation Index
> Fetch the complete documentation index at: https://docs.daily.co/llms.txt
> Use this file to discover all available pages before exploring further.

# Daily Client SDK for Flutter

> Build real-time video and audio calling into your Flutter mobile applications.

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.

<CardGroup cols={2}>
  <Card title="Demo app" icon="rocket" href="https://github.com/daily-demos/daily-flutter-demo">
    A complete working example on GitHub
  </Card>

  <Card title="API reference" icon="code" href="https://pub.dev/documentation/daily_flutter/latest/">
    Full Dart API docs on pub.dev
  </Card>
</CardGroup>

## Getting started

Add the package to your `pubspec.yaml`:

```yaml theme={null}
dependencies:
  daily_flutter: ^latest
```

Then join a call and display participant video:

```dart theme={null}
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`:

```dart theme={null}
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.

<CardGroup cols={2}>
  <Card title="Call lifecycle" icon="phone" href="https://pub.dev/documentation/daily_flutter/latest/daily_flutter/CallClient/join.html">
    `join()`, `leave()`, `callState`, `CallStateUpdated`
  </Card>

  <Card title="Participants" icon="users" href="https://pub.dev/documentation/daily_flutter/latest/daily_flutter/CallClient/participants.html">
    `participants()`, `ParticipantJoined`, `ParticipantUpdated`, `ParticipantLeft`
  </Card>

  <Card title="Media inputs" icon="video" href="https://pub.dev/documentation/daily_flutter/latest/daily_flutter/CallClient/updateInputs.html">
    `updateInputs()`, `setInputsEnabled()`, `InputsUpdated`
  </Card>

  <Card title="Publishing" icon="signal-stream" href="https://pub.dev/documentation/daily_flutter/latest/daily_flutter/CallClient/updatePublishing.html">
    `updatePublishing()`, `PublishingUpdated`
  </Card>

  <Card title="Subscriptions" icon="rss" href="https://pub.dev/documentation/daily_flutter/latest/daily_flutter/CallClient/updateSubscriptions.html">
    `updateSubscriptions()`, `updateSubscriptionProfiles()`, `SubscriptionsUpdated`
  </Card>

  <Card title="Active speaker" icon="microphone" href="https://pub.dev/documentation/daily_flutter/latest/daily_flutter/CallClient/activeSpeaker.html">
    `activeSpeaker`, `ActiveSpeakerChanged`
  </Card>
</CardGroup>

## Requirements

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