FlutterCallkitIncoming class is the main entry point for all call management operations. All methods are static — no instance is required.
onEvent
initState or main) and keep the subscription alive for the duration of your app.
The stream is a broadcast stream, so multiple listeners are allowed. Each listener receives every event independently.
showCallkitIncoming
Configuration for the incoming call. See CallKitParams for all available fields.
Future — completes when the platform has processed the request.
iOS: Uses
CXCallController / CallKit. Only works on a real device — CallKit does not run in the simulator.Android: Displays a custom full-screen notification. On Android 13+ you must call requestNotificationPermission first. On Android 14+ call requestFullIntentPermission / canUseFullScreenIntent before showing the incoming call screen.showMissCallNotification
Call configuration. The
missedCallNotification field controls the notification appearance. See CallKitParams.Future
Android only. This method has no effect on iOS.
hideCallkitIncoming
Must include the
id of the call to dismiss.Future
Android only. This method has no effect on iOS.
startCall
actionCallStart event only.
Configuration for the outgoing call. See CallKitParams.
Future
iOS: Creates a history entry in the native Phone app via CallKit.Android: Emits
Event.actionCallStart through onEvent. No UI is shown; display your own calling screen in Flutter.muteCall
UUID of the call to mute/unmute.
true to mute, false to unmute. Defaults to true.Future
iOS: Updates the mute state in the CallKit ongoing-call UI.Android: No native UI is updated. An
Event.actionCallToggleMute event is emitted through onEvent so your Dart code can respond and apply the mute state to your media stream.isMuted
UUID of the call to query.
Future<bool> — true if the call is muted, false otherwise. Returns false if the state cannot be determined.
iOS: Reads the mute state from the active CallKit call.Android: Always returns
true (the Android implementation does not track actual mute state).holdCall
UUID of the call.
true to hold, false to resume. Defaults to true.Future
iOS: Updates the hold state in the CallKit ongoing-call UI.Android: No native UI is updated. An
Event.actionCallToggleHold event is emitted through onEvent so your Dart code can respond and apply the hold state to your media stream.endCall
UUID of the call to end.
Future
iOS: Updates the call history in the native Phone app via CallKit.Android: Emits
Event.actionCallEnded through onEvent only.setCallConnected
UUID of the call that has connected.
Future
endAllCalls
Future
activeCalls
Future<dynamic> — a list of call objects. Each object contains at minimum the id field.
iOS: Returns all active calls tracked by CallKit. Each entry contains
id and accepted fields.Android: Returns only the last recorded call. The result map includes an isAccepted field indicating whether the call was answered.getDevicePushTokenVoIP
Future — the VoIP push token string on iOS; an empty value on Android.
iOS: Returns the APNs VoIP push token (e.g.
d6a77ca80c5f09f87f353cdd328ec8d7d34e92eb108d046c91906f27f54949cd). You must call SwiftFlutterCallkitIncomingPlugin.sharedInstance?.setDevicePushTokenVoIP(deviceToken) from your AppDelegate.swift pushRegistry(_:didUpdate:for:) delegate method.Android: Returns an empty string. Use FCM for Android push tokens instead.silenceEvents
onEvent stream. Useful when you want to temporarily pause event processing.
Returns: Future
unsilenceEvents
onEvent stream after a call to silenceEvents.
Returns: Future
requestNotificationPermission
POST_NOTIFICATIONS permission required on Android 13 (API 33) and above. Call this before showCallkitIncoming on first launch.
A
Map<String, String> containing UI strings for the permission dialog:title— Dialog title.rationaleMessagePermission— Rationale message shown before the system dialog.postNotificationMessageRequired— Message shown if the user denies and must open Settings.
Future
Android 13+ only. Has no effect on Android 12 and below, or on iOS.
requestFullIntentPermission
ACTION_MANAGE_APP_USE_FULL_SCREEN_INTENT permission required on Android 14 (API 34) and above for full-screen incoming call UI on the lock screen.
Returns: Future
Android 14+ only. Check
canUseFullScreenIntent first; only call this if the permission is not already granted.canUseFullScreenIntent
ACTION_MANAGE_APP_USE_FULL_SCREEN_INTENT permission on Android 14 and above.
Returns: Future — true if the permission is granted, false otherwise.
Android 14+ only. Always returns
true on lower API levels and on iOS.