# Get started
Follow the steps below to integrate the Video SDK into your Flutter app.
## Import SDK
Add `flutter_zoom_videosdk` in the project's `pubspec.yaml` to install the Video SDK.
```yaml
flutter_zoom_videosdk: ^1.12.10
```
Run the following command to install dependencies.
```shell
flutter pub get
```
## Update Android manifest
Add the following to your Android app's `Androidmanifest.xml` to allow permissions of the App (see the sample app for an example of this):
```xml
```
## Foreground permissions
Starting with Android 14, Google requires developers to [specify appropriate foreground service types in their apps](https://developer.android.com/about/versions/14/changes/fgs-types-required). The Video SDK uses these foreground service permissions.
| Permission | Description |
| ------------------------------------- | ---------------------------------------------------------------------------- |
| `FOREGROUND_SERVICE_MICROPHONE` | Allow the capability to receive audio when the app is put in the background. |
| `FOREGROUND_SERVICE_MEDIA_PLAYBACK` | Allow the capability to share audio while screen sharing. |
| `FOREGROUND_SERVICE_MEDIA_PROJECTION` | Allow the capability to project the screen while screen sharing. |
| `FOREGROUND_SERVICE_CONNECTED_DEVICE` | Allow the capability to use Bluetooth device as the audio source. |
| `FOREGROUND_SERVICE_PHONE_CALL` | Allow the capability to use Bluetooth device for the session call. |
## Add iOS permissions and validation
The SDK requires [these permissions in iOS](/docs/video-sdk/ios/integrate/#add-required-project-permissions) (at least camera and microphone). Use the Flutter [`Permission_handler`](https://pub.dev/packages/permission_handler) tool to handle permissions. See the sample app for an example of this.
You can also set **Validate Workspace** in the **Project > Build** settings to "Yes" to help debug any potential errors.
_You must also follow Apple's requirement to provide [a privacy manifest and signatures](https://developer.apple.com/support/third-party-SDK-requirements/) when creating an iOS app._
## Get the SDK instance
To use the Flutter Zoom Video SDK, import `package:flutter_zoom_videosdk`.
```shell
import 'package:flutter_zoom_videosdk/native/zoom_videosdk.dart';
```
Create a ZoomVideoSdk instance.
```dart
var zoom = ZoomVideoSdk();
```
This context wrapper is required for the screens and components within the application that make use of the Video SDK for Flutter. The values passed into the `config` property are used throughout your application and are required to initialize the Video SDK for Android or iOS wrapped by the Video SDK for Flutter.
Initialize the Sdk before using any of the features.
```dart
InitConfig initConfig = InitConfig(
domain: "zoom.us",
enableLog: true,
);
zoom.initSdk(initConfig);
```
## Table of `ZoomVideoSdk` `InitConfig` properties
The table below lists the most used `InitConfig` properties.
| Property | Description |
| ------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `appGroupId` | This is a unique value for iOS that ties your app's `ScreenShare` target and your app's main target.See [Set up App Groups](/docs/video-sdk/ios/share/#6-set-up-app-groups) in the **Video SDK for iOS screen sharing** guide for details on how to set up this reverse domain order value._You do not need to set this value for the Android platform. If you don't plan to implement screen sharing in video sessions, this value is optional._ |
| `domain` | Set this value to `zoom.us` as instructed in the Video SDK guides to [Initialize the SDK for iOS](/docs/video-sdk/ios/integrate/#initialize-the-sdk) and [Initialize the SDK for Android](/docs/video-sdk/android/integrate/#initialize-the-sdk). |
| `enableLog` | Set to `true` to enable debugging if you wish to do so.When you are getting started, we recommend setting this property to `true`; otherwise, explicitly set it to `false` so other developers will know why logging is disabled. |
For more details on `init` properties, see the [`ZoomVideoSDKInitParams` class for Android](https://marketplacefront.zoom.us/sdk/custom/android/us/zoom/sdk/ZoomVideoSDKInitParams.html) or the [`ZoomVideoSDKInitParams` class for iOS](https://marketplacefront.zoom.us/sdk/custom/ios/interface_zoom_video_s_d_k_init_params.html).
## Example configuration
You can see an example of this in the `lib/main.dart` file in the example application. See the [sample app walkthrough](/docs/video-sdk/flutter/sample-app/#sample-app-walkthrough) folder structure for where to find this file.
## Event Listener
Once the SDK is successfully initialized, you will be able to call the SDK functions. You will also be able to set up a listener to listen for events such as when a user joins a session or leaves a session.
To listen for callback events, get the `EventEmitter` from `eventListener` on the Zoom Video SDK instance:
```dart
import 'package:flutter_zoom_videosdk/native/zoom_videosdk_event_listener.dart';
import 'package:events_emitter/events_emitter.dart';
var eventListener = ZoomVideoSdkEventListener();
eventListener.addEventListener();
EventEmitter emitter = eventListener.eventEmitter;
final sessionJoinListener =
eventListener.addListener(EventType.onSessionJoin, (data) async {
data = data as Map;
isInSession.value = true;
zoom.session
.getSessionName()
.then((value) => sessionName.value = value!);
sessionPassword.value = await zoom.session.getSessionPassword() ?? "";
ZoomVideoSdkUser mySelf =
ZoomVideoSdkUser.fromJson(jsonDecode(data['sessionUser']));
List? remoteUsers = await zoom.session.getRemoteUsers();
var muted = await mySelf.audioStatus?.isMuted();
var videoOn = await mySelf.videoStatus?.isOn();
var speakerOn = await zoom.audioHelper.getSpeakerStatus();
fullScreenUser.value = mySelf;
remoteUsers?.insert(0, mySelf);
users.value = remoteUsers!;
isMuted.value = muted!;
isSpeakerOn.value = speakerOn;
isVideoOn.value = videoOn!;
users.value = remoteUsers;
});
```
See the [SDK reference](https://marketplacefront.zoom.us/sdk/custom/flutter/native_zoom_videosdk_event_listener/EventType-class.html#constants) for all the supported event types.
## Add features
You can set up event listeners for asynchronous events in the Video SDK session (such as users joining or leaving), set up or exit a video session, implement a chat screen, and more. See the rest of this documentation for details on how to add these features to your app.