Daakia VC Flutter SDK
Integrate Daakia's video conferencing capabilities into your Flutter applications with ease.
This SDK provides a simple and efficient way to add video conferencing features to your Flutter apps, supporting both Android and iOS platforms.
Supported Platforms
β Android | β iOS
Latest Release
v4.4.1 - See CHANGELOG.md for detailed release notes and what's new.
How to use
Installation
add daakia_vc_flutter_sdk: to your pubspec.yaml dependencies then run flutter pub get
dependencies:
daakia_vc_flutter_sdk: ^4.4.1
Android
We require a set of permissions that need to be declared in your AppManifest.xml. These are required permissions
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.your.package">
<!-- Camera & Audio -->
<uses-feature android:name="android.hardware.camera" />
<uses-feature android:name="android.hardware.camera.autofocus" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<!-- Network -->
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
<!-- Bluetooth -->
<uses-permission android:name="android.permission.BLUETOOTH" android:maxSdkVersion="30" />
<uses-permission android:name="android.permission.BLUETOOTH_CONNECT" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" android:maxSdkVersion="30" />
<!-- Foreground Service (Meeting Notifications & Screen Share) -->
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE_MEDIA_PLAYBACK" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE_MEDIA_PROJECTION" />
<!-- Notifications (Android 13+) -->
<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
<!-- Storage -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE"/>
...
</manifest>
βΉοΈ Permission Details
-
Foreground Service Permissions (new in v4.4.1):
FOREGROUND_SERVICE: Required for background meeting notificationsFOREGROUND_SERVICE_MEDIA_PLAYBACK: For meeting audio when app is backgroundedFOREGROUND_SERVICE_MEDIA_PROJECTION: Required for screen sharing on Android 10+
-
POST_NOTIFICATIONS: Required for meeting notifications on Android 13+
These permissions are automatically merged from the SDK's manifest. You don't need to manually add them unless your app targets Android versions that require explicit declaration.
πͺ Picture-in-Picture (PiP) Support (Android Only)
Daakia SDK supports Picture-in-Picture (PiP) mode on Android to allow users to continue their meeting while navigating away from the app.
π± Note: PiP is currently available only on Android. iOS support will be added in a future release.
Android Setup
-
Update
AndroidManifest.xml<application> <activity android:name=".MainActivity" android:supportsPictureInPicture="true"> </activity> </application> -
Update
MainActivity.ktChange your activity from:
import io.flutter.embedding.android.FlutterActivity class MainActivity: FlutterActivity()to:
import cl.puntito.simple_pip_mode.PipCallbackHelperActivityWrapper class MainActivity : PipCallbackHelperActivityWrapper()
iOS
Camera and microphone usage need to be declared in your Info.plist file.
<dict>
...
<key>NSCameraUsageDescription</key>
<string>$(PRODUCT_NAME) uses your camera</string>
<key>NSMicrophoneUsageDescription</key>
<string>$(PRODUCT_NAME) uses your microphone</string>
Your application can still run the voice call when it is switched to the background if the background mode is enabled. Select the app target in Xcode, click the Capabilities tab, enable Background Modes, and check Audio, AirPlay, and Picture in Picture.
Your Info.plist should have the following entries.
<dict>
...
<key>UIBackgroundModes</key>
<array>
<string>audio</string>
</array>
For iOS, the minimum supported deployment target is 12.1. You will need to add the following to your Podfile.
platform :ios, '12.1'
You may need to delete Podfile.lock and re-run pod install after updating deployment target.
Usage/Examples
import 'package:daakia_vc_flutter_sdk/daakia_vc_flutter_sdk.dart';
await Navigator.push<void>(
context,
MaterialPageRoute(
builder: (_) => DaakiaVideoConferenceWidget(
meetingId: meetingUID,
secretKey: licenseKey,
isHost: isHost,
configuration: DaakiaMeetingConfiguration (optional),
),
),
);
Use DaakiaVideoConferenceWidget to start the meeting.
Parameters
To run the DaakiaVideoConferenceWidget, you will need to pass the following parameters:
-
meetingId(String):
This parameter is required to join a specific meeting. It helps identify the unique meeting to which the user will connect. -
secretKey(String):
This is a license key that grants access to the meeting service. It is necessary for secure access. -
isHost(bool, optional):
This optional parameter defines the user's role. When set totrue, the user will join as the host of the meeting; otherwise, they will be a participant. -
configuration(DaakiaMeetingConfiguration, optional):
Provides advanced customization like metadata and participant name behavior.
For full details, see DaakiaMeetingConfiguration Documentation
Obtaining Meeting ID and License Key
To use the Daakia Video Conference SDK, you will need a meetingId and a secretKey (license key). These are required for accessing and initiating meetings.
How to Obtain:
- Contact Us: Reach out to us directly at contact@daakia.co.in. Our team will assist you in setting up your account and providing the necessary credentials.
- Visit Our Website: You can also find more information and request access by visiting our website: https://www.daakia.co.in/.
We will guide you through the process of creating meetings and obtaining your unique license key.
π Optional: Datadog Logging
The SDK supports Datadog integration for advanced logging, monitoring, and crash reporting.
This is optional β your app will run normally without it.
If enabled, all SDK-related logs are automatically sent to Datadog.
You donβt need to call any manual log functions β everything is handled internally by the SDK.
Initialization
To enable Datadog, initialize the service at app startup (e.g., in main.dart):
import 'package:daakia_vc_flutter_sdk/service/daakia_vc_datadog_service.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
await DaakiaVcDatadogService.initialize(
clientToken: "<YOUR_DATADOG_CLIENT_TOKEN>",
env: "<YOUR_ENV>",
serviceName: "<YOUR_SERVICE_NAME>",
applicationId: "<YOUR_DATADOG_APPLICATION_ID>",
version: "<YOUR_APP_VERSION>",
);
runApp(const MyApp());
}
π You can obtain the required Datadog credentials in the same way as the meetingId and secretKey β by reaching out to our team.
Screen Share
Android
Screen sharing is supported on Android 10+. The SDK uses a media projection foreground service for this functionality.
Required permissions (automatically merged from SDK's manifest):
FOREGROUND_SERVICEFOREGROUND_SERVICE_MEDIA_PROJECTION(required for screen capture)POST_NOTIFICATIONS(for Android 13+)
β οΈ v4.4.1 Update: For Android versions < 14, update your app's AndroidManifest.xml to declare the service with mediaProjection type only:
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE_MEDIA_PROJECTION" />
<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
<application>
...
<service
android:name="de.julianassmann.flutter_background.IsolateHolderService"
android:enabled="true"
android:exported="false"
android:foregroundServiceType="mediaProjection" />
</application>
</manifest>
Note: In v4.4.1, the
foregroundServiceTypewas changed from"mediaProjection|microphone|camera"to only"mediaProjection"to fix Android 16 compatibility issues. RemoveFOREGROUND_SERVICE_CAMERAandFOREGROUND_SERVICE_MICROPHONEpermissions if they were previously declared.
iOS
On iOS, screen sharing requires a broadcast extension to capture content from other apps. Refer to the iOS setup guide for detailed instructions.
Support
For support, email contact@daakia.co.in.
Libraries
- api/api_client
- api/injection
- daakia_vc_flutter_sdk
- enum/attendance_role_enum
- enum/chat_type_enum
- events/meeting_end_events
- events/rtc_events
- model/action_model
- model/agent_dispatch_data
- model/base_list_response
- model/base_response
- model/caption_data
- model/chat_attachment_consent_model
- model/consent_participant
- model/consent_status_data
- model/daakia_meeting_configuration
- model/dispatch_id
- model/dispatch_state
- model/edit_message
- model/egress_data
- model/emoji_message
- model/event_password_protected_data
- model/feature_configuration
- model/feature_data
- model/features
- model/host_token_model
- model/language_model
- model/licence_verify_model
- model/meeting_details
- model/meeting_details_model
- model/participant_attendance_data
- model/participant_config
- model/private_chat_model
- model/raised_hand
- model/reaction_model
- model/recording_dispatch_data
- model/remote_activity_data
- model/remote_participant_consent_model
- model/reply_message
- model/rtc_data
- model/saved_data
- model/send_message_model
- model/session_details_data
- model/subscription_feature
- model/transcription_action_model
- model/transcription_model
- model/translate_base_model
- model/translation_data
- model/upload_data
- model/vc_config
- model/webinar_permission_model
- model/white_board_data
- model/workshop_permission_model
- presentation/bottom_sheets/end_meeting_bottomsheet
- presentation/bottom_sheets/message_action_sheet
- presentation/bottom_sheets/more_option_bottomsheet
- presentation/bottom_sheets/reaction_details_sheet
- presentation/dialog/emoji_dialog
- presentation/dialog/language_select_dialog
- presentation/dialog/pariticipant_dialog_controls
- presentation/dialog/transcript_download_choice_dialog
- presentation/pages/all_participant_page
- presentation/pages/chat_controller
- presentation/pages/chat_page
- presentation/pages/permission_request_page
- presentation/pages/private_chat_page
- presentation/pages/recording_consent_page
- presentation/pages/transcription_screen
- presentation/pages/webinar_controls
- presentation/screens/license_expired
- presentation/screens/loading_screen
- presentation/screens/prejoin_screen
- presentation/screens/web_preview
- presentation/widgets/compact_file_preview
- presentation/widgets/compact_participant_tile
- presentation/widgets/edit_preview_widget
- presentation/widgets/emoji_reaction_widget
- presentation/widgets/file_preview
- presentation/widgets/file_type_preview_widget
- presentation/widgets/host_control_switch
- presentation/widgets/initials_circle
- presentation/widgets/joined_participant_widget
- presentation/widgets/language_selection_bottom_sheet
- presentation/widgets/loader
- presentation/widgets/lobby_request_widget
- presentation/widgets/message_bubble
- presentation/widgets/participant_tile
- presentation/widgets/pending_attendance_widget
- presentation/widgets/pinned_message_widget
- presentation/widgets/raised_hand_participant_widget
- presentation/widgets/reaction_bar_widget
- presentation/widgets/reaction_bubble
- presentation/widgets/recording_consent_tile
- presentation/widgets/reply_message_widget
- presentation/widgets/reply_preview_widget
- presentation/widgets/transcription_bubble
- resources/colors/color
- resources/json/language_json
- rtc/lobby_request_manager
- rtc/meeting_manager
- rtc/method_channels/daakia_pip
- rtc/method_channels/reply_kit
- rtc/participant_sorter
- rtc/room
- rtc/widgets/no_video
- rtc/widgets/participant
- rtc/widgets/participant_info
- rtc/widgets/participant_stats
- rtc/widgets/pip_screen
- rtc/widgets/rtc_controls
- rtc/widgets/text_field
- rtc/widgets/white_board_widget
- service/daakia_meeting_service
- service/daakia_vc_datadog_service
- utils/chat_message_mapper
- utils/consent_status_enum
- utils/constants
- utils/datadog_disconnect_logger
- utils/datadog_logger_helper
- utils/datadog_reconnect_logger
- utils/device_network_info
- utils/meeting_actions
- utils/name_input_formatter
- utils/reaction_emoji_map
- utils/rtc_ext
- utils/storage_helper
- utils/utils
- viewmodel/rtc_provider
- viewmodel/rtc_viewmodel