forked from eatvio/eatvio_app
feat(video_calls): removed system ui, fixed wrong app initializing
This commit is contained in:
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user