call method

Future<NEResult> call(
  1. String accountId,
  2. NECallType callMediaType, [
  3. NECallParams? params
])

Implementation

Future<NEResult> call(
  String accountId,
  NECallType callMediaType, [
  NECallParams? params,
]) async {
  CallKitUILog.i(
    _tag,
    'call accountId:$accountId, callMediaType: $callMediaType, params:${params.toString()}), version:${Constants.pluginVersion}',
  );
  if (accountId.isEmpty) {
    debugPrint('Call failed, userId is empty');
    return NEResult(
      code: NECallError.unKnow,
      message: NECallKitUI.localizations.callFailedUserIdEmpty,
    );
  }

  // 使用 NECallParams 中的 pushConfig
  var pushConfig = params?.pushConfig;
  final permissionResult = await _runtimeAdapter.requestPermissions(
    callMediaType,
  );
  if (PermissionResult.granted == permissionResult) {
    final callResult = await NECallEngine.instance.call(
      accountId,
      callMediaType,
      pushConfig: pushConfig,
    );
    CallKitUILog.i(
      _tag,
      'call result code: ${callResult.code} data: ${callResult.data?.toJson().toString()}',
    );
    if (callResult.code == 0) {
      if (callResult.data?.callId != null &&
          callResult.data!.callId.isNotEmpty) {
        CallState.instance.currentCallId = callResult.data!.callId;
      }
      var user = User();
      user.id = accountId;
      user.callRole = NECallRole.called;
      user.callStatus = NECallStatus.waiting;

      CallState.instance.remoteUserList.add(user);
      _getUserInfo();
      CallState.instance.callType = callMediaType;
      CallState.instance.scene = NECallScene.singleCall;
      CallState.instance.selfUser.callRole = NECallRole.caller;
      CallState.instance.selfUser.callStatus = NECallStatus.waiting;
      _runtimeAdapter.startOutgoingRing();
      launchCallingPage();
      CallManager.instance.enableWakeLock(true);
    } else if (callResult.code == NECallError.stateCallCalling ||
        callResult.code == NECallError.stateCallOnTheCall) {
      CallManager.instance.showToast(NECallKitUI.localizations.userInCall);
    } else {
      CallKitUILog.i(
        _tag,
        'callResult.code: ${callResult.code}, callResult.msg: ${callResult.msg}',
      );
    }
    CallKitUILog.i(
      _tag,
      'callResult.code: ${callResult.code}, callResult.msg: ${callResult.msg}',
    );
    return NEResult(code: callResult.code, message: callResult.msg);
  } else {
    CallKitUILog.i(_tag, 'Permission result fail');
    return NEResult(
      code: -1,
      message: NECallKitUI.localizations.permissionResultFail,
    );
  }
}