feat(video_calls): removed system ui, fixed wrong app initializing

This commit is contained in:
misha
2026-06-18 15:01:21 +03:00
parent e3c22f8ac8
commit 7493870a3d
2 changed files with 80 additions and 6 deletions

View File

@@ -14,6 +14,7 @@ import 'package:flutter/widgets.dart';
import 'package:flutter_callkit_incoming/entities/call_event.dart';
import 'package:flutter_callkit_incoming/entities/call_kit_params.dart';
import 'package:flutter_callkit_incoming/flutter_callkit_incoming.dart';
import 'package:flutter_native_splash/flutter_native_splash.dart';
import 'package:sentry_flutter/sentry_flutter.dart';
class VideoCallCallKitCoordinator {
@@ -57,8 +58,10 @@ class VideoCallCallKitCoordinator {
}
});
await _firebaseApi.registerPushToken();
await _drainPendingNativeAcceptedVoipCall();
WidgetsBinding.instance.addPostFrameCallback((_) {
_scheduleNativeVoipDiagnosticsDrain();
unawaited(_drainPendingNativeAcceptedVoipCall());
});
return;
}
@@ -137,6 +140,29 @@ class VideoCallCallKitCoordinator {
}
}
Future<void> _drainPendingNativeAcceptedVoipCall() async {
if (!Platform.isIOS) return;
try {
final pending = await _voipDiagnosticsChannel.invokeMethod(
'drainPendingAcceptedVoipCall',
);
if (pending == null) return;
await _handleNativeAcceptedVoipCall(pending);
} on PlatformException catch (e, st) {
log(
'VideoCallCallKitCoordinator: failed to drain pending native accept: $e',
name: 'VideoCallCallKit',
stackTrace: st,
);
} catch (e, st) {
log(
'VideoCallCallKitCoordinator: failed to process pending native accept: $e',
name: 'VideoCallCallKit',
stackTrace: st,
);
}
}
Future<void> _onCallKitEvent(CallEvent? event) async {
if (event == null) return;
unawaited(_captureCallKitEventToSentry(event));
@@ -424,7 +450,9 @@ class VideoCallCallKitCoordinator {
_suppressedEndCallKitIds.add(callKitId);
try {
await FlutterCallkitIncoming.endCall(callKitId);
if (!Platform.isIOS) {
await FlutterCallkitIncoming.endCall(callKitId);
}
final binding = WidgetsBinding.instance;
final completer = Completer<void>();
@@ -439,6 +467,10 @@ class VideoCallCallKitCoordinator {
);
});
await completer.future;
if (Platform.isIOS) {
await FlutterCallkitIncoming.endCall(callKitId);
}
} finally {
unawaited(
Future<void>.delayed(const Duration(seconds: 2), () {
@@ -454,8 +486,12 @@ class VideoCallCallKitCoordinator {
String? counterpartName,
String? counterpartAvatarUrl,
String? localParticipantName,
}) {
return VideoCallNotificationNavigator.openIncomingCall(
}) async {
if (Platform.isIOS) {
FlutterNativeSplash.remove();
}
await VideoCallNotificationNavigator.openIncomingCall(
conversationUuid: conversationUuid,
counterpartName: counterpartName,
counterpartAvatarUrl: counterpartAvatarUrl,