uArTrackingHint function

String? uArTrackingHint(
  1. UArValue value,
  2. UArLabels labels, {
  3. bool needsSurface = true,
})

Human wording for the current tracking state, or null when all is well.

Implementation

String? uArTrackingHint(UArValue value, UArLabels labels, {bool needsSurface = true}) {
  if (value.state != UArSessionState.running || value.config.isViewer) return null;
  switch (value.trackingReason) {
    case UArTrackingReason.excessiveMotion:
      return labels.tooFast ?? U.s.slowDownYouAreMovingTooFast;
    case UArTrackingReason.insufficientFeatures:
      return labels.moreDetail ?? U.s.pointAtASurfaceWithMoreDetail;
    case UArTrackingReason.insufficientLight:
      return labels.tooDark ?? U.s.itsTooDarkTurnOnMoreLights;
    case UArTrackingReason.relocalizing:
      return labels.relocalizing ?? U.s.holdSteadyWhileTheSessionIsRestored;
    default:
      break;
  }
  if (value.tracking != UArTrackingState.normal) return labels.scanning ?? U.s.moveYourPhoneSlowlyToScanTheArea;
  if (needsSurface && !value.hasPlanes && value.frame.centerHit == null) return labels.findSurface ?? U.s.lookAroundToFindASurface;
  return null;
}