smart method

double smart({
  1. double? minValue,
  2. double? maxValue,
  3. bool aspectAware = false,
  4. double ultraLargeCurve(
    1. double value
    )?,
})

Smart scaling for width/height/radius/container

Options:

  • minValue → enforce minimum size
  • maxValue → enforce maximum size
  • aspectAware → width/height scaled separately if true
  • ultraLargeCurve → custom multiplier for ultra-large screens

Implementation

double smart({
  double? minValue,
  double? maxValue,
  bool aspectAware = false,
  double Function(double value)? ultraLargeCurve,
}) {
  final mode = OrkittCoreScaling.instance.mode;

  // 1️⃣ Base scaled value
  double value;

  if (mode == ScaleMode.design) {
    final dw = _safe(() => DesignScaleUtils.instance.scaleWidth(this));
    final dh = _safe(() => DesignScaleUtils.instance.scaleHeight(this));
    value = aspectAware ? (dw + dh) / 2 : min(dw, dh);
  } else {
    final pw = OrkittScreenUtils.percentWidth(toDouble());
    final ph = OrkittScreenUtils.percentHeight(toDouble());
    value = aspectAware ? (pw + ph) / 2 : min(pw, ph);
  }

  // 2️⃣ Apply dynamic design-frame detection
  value *= _designFrameMultiplier();

  // 3️⃣ Apply orientation-aware multiplier
  value *= _orientationMultiplier();

  // 4️⃣ Apply custom ultra-large screen curve if provided
  if (ultraLargeCurve != null) value = ultraLargeCurve(value);

  // 5️⃣ Clamp min/max limits
  if (minValue != null) value = max(value, minValue);
  if (maxValue != null) value = min(value, maxValue);

  return value;
}