smart method
Smart scaling for width/height/radius/container
Options:
minValue→ enforce minimum sizemaxValue→ enforce maximum sizeaspectAware→ width/height scaled separately if trueultraLargeCurve→ 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;
}