getResponsiveFontSize static method

double getResponsiveFontSize({
  1. required BuildContext context,
  2. double? baseSize,
  3. double? minSize,
  4. double? maxSize,
  5. bool isTitle = false,
  6. bool isSubtitle = false,
  7. bool isBody = false,
  8. bool isCaption = false,
})

Calculate responsive font size based on screen size and device characteristics

Implementation

static double getResponsiveFontSize({
  required BuildContext context,
  double? baseSize,
  double? minSize,
  double? maxSize,
  bool isTitle = false,
  bool isSubtitle = false,
  bool isBody = false,
  bool isCaption = false,
}) {
  final mediaQuery = MediaQuery.of(context);
  final size = mediaQuery.size;
  final pixelRatio = mediaQuery.devicePixelRatio;
  final textScaleFactor = mediaQuery.textScaleFactor;

  // Calculate screen diagonal in inches
  final screenDiagonalInches =
      _calculateScreenDiagonalInches(size, pixelRatio);

  // Base font size calculation
  double calculatedSize = baseSize ?? _baseFontSize;

  // Apply screen size multiplier
  double screenMultiplier = _getScreenSizeMultiplier(screenDiagonalInches);

  // Apply type-specific multipliers
  if (isTitle) {
    calculatedSize *= 1.8;
  } else if (isSubtitle) {
    calculatedSize *= 1.4;
  } else if (isBody) {
    calculatedSize *= 1.0;
  } else if (isCaption) {
    calculatedSize *= 0.8;
  }

  // Apply responsive scaling
  calculatedSize *= screenMultiplier;

  // Apply text scale factor for accessibility
  calculatedSize *= textScaleFactor;

  // Apply minimum and maximum constraints
  if (minSize != null && calculatedSize < minSize) {
    calculatedSize = minSize;
  }
  if (maxSize != null && calculatedSize > maxSize) {
    calculatedSize = maxSize;
  }

  return calculatedSize;
}