closeCamera method

Future<void> closeCamera(
  1. String from, {
  2. bool needUIDisabled = true,
  3. bool needToast = true,
})

Implementation

Future<void> closeCamera(
  String from, {
  bool needUIDisabled = true,
  bool needToast = true,
}) async {
  if (!_trtcStreamInfoObs.isCameraAvailable.value) {
    return;
  }
  if (needUIDisabled) {
    _trtcStreamInfoObs.updateSelfCameraDeviceDisabled(true);
  }
  await TRTC.closeCamera(from);
  final isCameraAvailable = _trtcStreamInfoObs.isCameraAvailable.value;
  var res = await networkService.selfStatusReport(
    StateReportBody(
      classId: _config.classId,
      state:
          isCameraAvailable
              ? StateStatusValueEnum.off
              : StateStatusValueEnum.fail,
      type: StateTypeEnum.camera,
    ),
  );
  if (res?.errorCode == 0) {
    _membersInfoObs.updateSelfMemberInfoByAction(
      MemberActionType.cameraClose,
      isCameraAvailable
          ? StateStatusValueEnum.off
          : StateStatusValueEnum.fail,
    );
    _trtcStreamInfoObs.updateTRTCStreamInfo(
      TRTCRoomInfo.fromJson({
        "userId": _config.userId,
        "userVideoAvailable": false,
      }),
      TRTCStreamInfoUpdateType.userVideoAvailableChanged,
    );
    TCICLog.info(
      "关闭摄像头成功",
      actionModule: ActionModule.tcicController.name,
      actionName: ActionName.closeCamera.name,
    );
    if (needToast) {
      TCICToast.show(StringEnum.closeCameraSuccess);
    }
  } else {
    TCICLog.error(
      "关闭摄像头失败",
      actionModule: ActionModule.tcicController.name,
      actionName: ActionName.closeCamera.name,
    );
    if (needToast) {
      TCICToast.show(StringEnum.closeCameraFailed);
    }
  }
  if (needUIDisabled) {
    _trtcStreamInfoObs.updateSelfCameraDeviceDisabled(false);
  }
}