initialize static method
Initialize VoIP service
Implementation
static Future<void> initialize() async {
try {
// Cancel existing subscription if any
await _eventSubscription?.cancel();
// Set up event listener
_eventSubscription = FlutterCallkitIncoming.onEvent.listen((event) async {
try {
if (event == null) {
debugPrint('VoIP: Received null event');
return;
}
debugPrint('═══════════════════════════════════════');
debugPrint('📞 CALLKIT EVENT RECEIVED');
debugPrint('═══════════════════════════════════════');
debugPrint('Event: ${event.event}');
if (event.body != null) {
debugPrint('Body: ${event.body}');
}
debugPrint('═══════════════════════════════════════');
switch (event.event) {
case Event.actionCallIncoming:
debugPrint('📥 CallKit: Incoming call received');
debugPrint('📞 Call ID: ${event.body?['id'] ?? 'Unknown'}');
debugPrint('👤 Caller: ${event.body?['nameCaller'] ?? 'Unknown'}');
debugPrint('📱 Number: ${event.body?['handle'] ?? 'Unknown'}');
break;
case Event.actionCallStart:
debugPrint('🚀 CallKit: Call started');
debugPrint('📞 Call ID: ${event.body?['id'] ?? 'Unknown'}');
break;
case Event.actionCallAccept:
debugPrint('✅ CallKit: Call accepted');
debugPrint('📞 Call ID: ${event.body?['id'] ?? 'Unknown'}');
// Answer SIP call if active
if (SipService.isInCall) {
try {
await SipService.answerCall();
} catch (e) {
debugPrint('VoIP: Error answering SIP call: $e');
}
}
await _onCallAccepted(event);
break;
case Event.actionCallDecline:
debugPrint('❌ CallKit: Call declined');
debugPrint('📞 Call ID: ${event.body?['id'] ?? 'Unknown'}');
// Hangup SIP call if active
if (SipService.isInCall) {
try {
debugPrint('📞 Hanging up SIP call...');
await SipService.hangup();
} catch (e) {
debugPrint('VoIP: Error hanging up SIP call: $e');
}
}
await _onCallDeclined(event);
break;
case Event.actionCallEnded:
debugPrint('❌ CallKit: Call ended');
debugPrint('📞 Call ID: ${event.body?['id'] ?? 'Unknown'}');
// Hangup SIP call if active
if (SipService.isInCall) {
try {
debugPrint('📞 Hanging up SIP call...');
await SipService.hangup();
} catch (e) {
debugPrint('VoIP: Error hanging up SIP call: $e');
}
}
await _onCallEnded(event);
break;
case Event.actionCallTimeout:
debugPrint('⏱️ CallKit: Call timeout');
debugPrint('📞 Call ID: ${event.body?['id'] ?? 'Unknown'}');
await _onCallTimeout(event);
break;
case Event.actionCallCallback:
debugPrint('VoIP: Callback action');
break;
case Event.actionCallToggleHold:
debugPrint('VoIP: Toggle hold');
break;
case Event.actionCallToggleMute:
debugPrint('VoIP: Toggle mute');
break;
case Event.actionCallToggleDmtf:
debugPrint('VoIP: Toggle DTMF');
break;
case Event.actionCallToggleGroup:
debugPrint('VoIP: Toggle group');
break;
case Event.actionCallToggleAudioSession:
debugPrint('VoIP: Toggle audio session');
break;
default:
debugPrint('VoIP: Unknown event - ${event.event}');
break;
}
} catch (e, stackTrace) {
_printException('VoIP Event Handler', e, stackTrace);
}
});
debugPrint('VoIP: Service initialized');
} catch (e, stackTrace) {
_printException('VoIP Initialize', e, stackTrace);
rethrow;
}
}