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,
      'CallManager call(userId:$accountId, callMediaType: $callMediaType, params:${params.toString()}), version:${Constants.pluginVersion}');
  if (accountId.isEmpty) {
    debugPrint("Call failed, userId is empty");
    return NEResult(code: -1, message: "Call failed, userId is empty");
  }

  // 使用 NECallParams 中的 pushConfig
  NECallPushConfig? pushConfig = params?.pushConfig;
  final permissionResult = await Permission.request(callMediaType);
  if (PermissionResult.granted == permissionResult) {
    final callResult = await NECallEngine.instance
        .call(accountId, callMediaType, pushConfig: pushConfig);
    if (callResult.code == 0) {
      User user = User();
      user.id = accountId;
      user.callRole = NECallRole.called;
      user.callStatus = NECallStatus.waiting;

      CallState.instance.remoteUserList.add(user);
      _getUserInfo();
      CallState.instance.mediaType = callMediaType;
      CallState.instance.scene = NECallScene.singleCall;
      CallState.instance.selfUser.callRole = NECallRole.caller;
      CallState.instance.selfUser.callStatus = NECallStatus.waiting;
      CallingBellFeature.startRing();
      launchCallingPage();
      CallManager.instance.enableWakeLock(true);
    } else if (callResult.code == 20002) {
      CallManager.instance.showToast(CallKitUIL10n.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: "Permission result fail");
  }
}