Skip to main content
IOSParams configures the native iOS CallKit integration. Pass an instance to the ios field of CallKitParams.
iOS CallKit only works on a real device. Testing on the simulator will not display the CallKit UI.
import 'package:flutter_callkit_incoming/flutter_callkit_incoming.dart';

const ios = IOSParams(
  iconName: 'CallKitLogo',
  handleType: 'generic',
  supportsVideo: true,
  maximumCallGroups: 2,
  maximumCallsPerCallGroup: 1,
  audioSessionMode: 'voiceChat',
  audioSessionActive: true,
  audioSessionPreferredSampleRate: 44100.0,
  audioSessionPreferredIOBufferDuration: 0.005,
  supportsDTMF: true,
  supportsHolding: true,
  supportsGrouping: false,
  supportsUngrouping: false,
  ringtonePath: 'system_ringtone_default',
);

Constructor

const IOSParams({
  String? iconName,
  String? handleType,
  bool? supportsVideo,
  int? maximumCallGroups,
  int? maximumCallsPerCallGroup,
  String? audioSessionMode,
  bool? audioSessionActive,
  double? audioSessionPreferredSampleRate,
  double? audioSessionPreferredIOBufferDuration,
  bool? configureAudioSession,
  bool? supportsDTMF,
  bool? supportsHolding,
  bool? supportsGrouping,
  bool? supportsUngrouping,
  String? ringtonePath,
})

Fields

Appearance

iconName
String?
default:"CallKitLogo"
Name of the image asset inside Images.xcassets used as the app icon in the CallKit UI. Defaults to CallKitLogo, which must exist in Images.xcassets/CallKitLogo.

Call handle

handleType
String?
default:"generic"
Specifies how the handle value in CallKitParams is interpreted by CallKit. Accepted values:
ValueDescription
"generic"Any string identifier (recommended)
"number"Phone number
"email"Email address
Use "generic" for the most flexible and consistent CallKit display.

Call capabilities

supportsVideo
bool?
default:"true"
Whether the call supports video. When true, CallKit shows a video icon in the call UI.
supportsDTMF
bool?
default:"true"
Whether the call supports DTMF (dial-tone multi-frequency) input — e.g. for phone menu navigation.
supportsHolding
bool?
default:"true"
Whether the call can be placed on hold.
supportsGrouping
bool?
default:"true"
Whether multiple calls can be grouped together into a call conference.
supportsUngrouping
bool?
default:"true"
Whether a grouped call can be split back into individual calls.

Call groups

maximumCallGroups
int?
default:"2"
Maximum number of simultaneous call groups allowed by CallKit. A call group is a set of calls that are handled together (e.g. a conference).
maximumCallsPerCallGroup
int?
default:"1"
Maximum number of calls within a single call group.

Audio session

audioSessionMode
String?
Sets the AVAudioSession mode applied when the call becomes active. Accepted values:nil (default), "gameChat", "measurement", "moviePlayback", "spokenAudio", "videoChat", "videoRecording", "voiceChat", "voicePrompt"
For VoIP calls, "voiceChat" is usually the appropriate mode.
audioSessionActive
bool?
default:"true"
Whether to activate the audio session when the call is connected.
audioSessionPreferredSampleRate
double?
default:"44100.0"
Preferred sample rate (Hz) for the AVAudioSession. Common values: 8000.0, 16000.0, 44100.0, 48000.0.
audioSessionPreferredIOBufferDuration
double?
default:"0.005"
Preferred I/O buffer duration (seconds) for the AVAudioSession. Lower values reduce latency but increase CPU usage.
configureAudioSession
bool?
When false, the plugin skips automatic AVAudioSession configuration so you can manage it manually (e.g. when using WebRTC’s RTCAudioSession). Defaults to the plugin’s internal behaviour when not set.

Ringtone

ringtonePath
String?
default:"system_ringtone_default"
File name of a ringtone bundled with the Xcode project. Add the file to /ios/Runner/ and include it in Copy Bundle Resources under Build Phases.The special value system_ringtone_default uses the device’s default ringtone.
// File added to /ios/Runner/Ringtone.caf and included in Copy Bundle Resources
ringtonePath: 'Ringtone.caf'

Build docs developers (and LLMs) love