startCheckIn method

Future<void> startCheckIn(
  1. CameraController cam,
  2. bool isRegister,
  3. BuildContext context,
  4. Function startCheckIn,
  5. Function registerFace,
)

Implementation

Future<void> startCheckIn(
  CameraController cam,
  bool isRegister,
  BuildContext context,
  Function startCheckIn,
  Function registerFace,
) async {
  if (isNavigating.value) return;

  await cam.setFlashMode(FlashMode.off);
  await cam.setExposureOffset(1.2);

  while (true) {
    guideText.value = '📸 Chuẩn bị chụp ảnh...';

    final picture = await cam.takePicture();
    File file = File(picture.path);

    if (cam.description.lensDirection == CameraLensDirection.front) {
      file = await _fixMirrorImage(file);
    }

    guideText.value = '🔍 Đang kiểm tra khuôn mặt...';

    final face = await _detectFace(file);
    if (face == null) {
      guideText.value = '❌ Không phát hiện khuôn mặt, thử lại...';
      await Future.delayed(const Duration(seconds: 2));
      continue;
    }

    final cropped = await _cropFace(file, face);
    final isReal = await liveness.isReal(cropped);

    if (!isReal) {
      guideText.value = '❌ Ảnh không phải người thật, thử lại...';
      await Future.delayed(const Duration(seconds: 2));
      continue;
    }

    guideText.value = '📍 Đang lấy vị trí...';
    final pos = cachedPosition ?? await Geolocator.getCurrentPosition();
    currentPosition.value = pos;

    isNavigating.value = true;
    print('abvcc');
    if (isRegister) {
      await _goToResult(context, cropped, pos,registerFace);
      break;
    }

    try {
      print('sssss');
      print(cropped);
      print(pos);
      startCheckIn(cropped, pos);
      print('sangdddd');

      // final result =
      // await _faceRepo.checkIn(cropped, pos.latitude, pos.longitude);
      // final code = result?.code;
      // final status = result?.data?.status;
      // final message = result?.message ?? 'Có lỗi xảy ra';
      //
      // if (code == 200 && status == StatusFace.success) {
      //   EasyLoading.showToast(message);
      //   Get.back();
      //   break;
      // }
      //
      // if (code == 400 && status == StatusFace.notRegister) {
      //   await _goToResult(context, cropped, pos);
      //   break;
      // }
      //
      // if (code == 400) {
      //   showErrorDialog(context, message);
      //   break;
      // }
      //
      // EasyLoading.showToast(message);
      // Get.back();
      break;
    } catch (e) {
      print('abccccccc');
      print(e);
      showErrorDialog(context, e.toString());
      break;
    } finally {
      isNavigating.value = false;
      guideText.value = 'Nhấn 📸 để bắt đầu lại';
    }
  }
}