call method
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 Permission.request(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) {
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;
CallingBellFeature.startRing();
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);
}
}