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);
}