openCamera method
Implementation
Future<void> openCamera(String from,{bool needUIDisabled = true, bool needToast = true, bool byTap = false}) async {
if (!_trtcStreamInfoObs.isSelfEnterRoom.value) {
TCICLog.error("isSelfEnterRoom is false", actionModule: ActionModule.tcicController.name, actionName: ActionName.openCamera.name);
_trtcStreamInfoObs.updateNeedOpenCamera(true);
return;
}
if (_trtcStreamInfoObs.currentCameraId.isEmpty && TcicScreen.isDeskTop()) {
TCICLog.error("currentCameraId is empty", actionModule: ActionModule.tcicController.name, actionName: ActionName.openCamera.name);
await networkService.selfStatusReport(StateReportBody(classId: _config.classId, state: StateStatusValueEnum.unknown, type: StateTypeEnum.camera));
if (needToast) {
TCICToast.show(StringEnum.openCameraFailed);
}
return;
}
final cameraPermission = await checkCameraPermission();
if (!cameraPermission) {
TCICLog.error("camera permission not granted", actionModule: ActionModule.tcicController.name, actionName: ActionName.openCamera.name);
TCICToast.show(StringEnum.noCameraPermission);
if(byTap){
final neverTips = sharedPreferences.getBool("never_tips_camera") ?? false;
if (!neverTips) {
TCICTips.warningWidget(_rootContext!, title: BaseText(StringEnum.warning), message: const PermissionTips(permissionType: PermissionType.camera));
}
}
await networkService.selfStatusReport(StateReportBody(classId: _config.classId, state: StateStatusValueEnum.noPermission, type: StateTypeEnum.camera));
return;
}
final isSlefOnStage = _membersInfoObs.getMemberInfoByUserId(_config.userId)?.stage == 1;
if (!isSlefOnStage) {
TCICLog.error("self is not on stage, open camera failed", actionModule: ActionModule.tcicController.name, actionName: ActionName.openCamera.name);
TCICToast.show(StringEnum.selfNotOnStageTips);
return;
}
if (needUIDisabled) {
_trtcStreamInfoObs.updateSelfCameraDeviceDisabled(true);
}
await TRTC.openCamera(from);
var res = await networkService.selfStatusReport(StateReportBody(classId: _config.classId, state: StateStatusValueEnum.on, type: StateTypeEnum.camera));
if (res?.errorCode == 0) {
_membersInfoObs.updateSelfMemberInfoByAction(MemberActionType.cameraOpen, StateStatusValueEnum.on);
TCICLog.info("打开摄像头成功", actionModule: ActionModule.tcicController.name, actionName: ActionName.openCamera.name);
if (needToast) {
TCICToast.show(StringEnum.openCameraSuccess);
}
} else {
TCICLog.error("打开摄像头失败", actionModule: ActionModule.tcicController.name, actionName: ActionName.openCamera.name);
if (needToast) {
TCICToast.show(StringEnum.openCameraFailed);
}
}
if (needUIDisabled) {
_trtcStreamInfoObs.updateSelfCameraDeviceDisabled(false);
}
_trtcStreamInfoObs.updateNeedOpenCameraAfterStartLocalPreview(false);
}