enterCallingPage method

void enterCallingPage()

Implementation

void enterCallingPage() {
  final attachedNavigator = navigator;
  final routeDecision = _desktopUiReuseAdapter.resolveCallingRouteDecision(
    hasNavigatorBinding: attachedNavigator != null,
    isCallingPageOpen: !isClose || currentPage == CallPage.callingPage,
  );
  CallKitUILog.i(
    _tag,
    'NECallKitNavigatorObserver enterCallingPage decision=$routeDecision',
  );
  switch (routeDecision) {
    case DesktopCallingRouteDecision.pushFlutterPage:
      break;
    case DesktopCallingRouteDecision.waitForNavigatorBinding:
      CallKitUILog.i(
        _tag,
        'NECallKitNavigatorObserver enterCallingPage skipped: navigator is null',
      );
      return;
    case DesktopCallingRouteDecision.skipDuplicatePage:
      CallKitUILog.i(
        _tag,
        'NECallKitNavigatorObserver enterCallingPage skipped: calling page already open',
      );
      return;
  }
  currentPage = CallPage.callingPage;
  final callingPageRoute = MaterialPageRoute<void>(builder: (widget) {
    return NECallKitWidget(close: () {
      CallKitUILog.i(
        _tag,
        'calling page close callback: isClose=$isClose, currentPage=$currentPage',
      );
      if (!isClose) {
        isClose = true;
        CallManager.instance.stopForegroundService();
        unawaited(_runtimeAdapter.stopRing());
        NECallKitNavigatorObserver.getInstance().exitCallingPage();
      } else {
        CallKitUILog.i(
          _tag,
          'calling page close callback skipped: page already marked closed',
        );
      }
    });
  });
  _callingPageRoute = callingPageRoute;
  attachedNavigator!.push(callingPageRoute);
  isClose = false;
}