build static method

TextTheme build({
  1. FontConfig? fontConfig,
  2. TextDirection direction = TextDirection.ltr,
  3. String? fontFamily,
  4. Color? baseColor,
  5. bool useGoogleFonts = true,
  6. double? baseFontSize,
})

Builds a complete Material 3 TextTheme for the given font configuration.

Preferred: Pass a FontConfig for full LTR/RTL control:

AppTypography.build(
  fontConfig: FontConfig.google(ltr: 'Inter', rtl: 'Cairo'),
  direction: TextDirection.rtl,
)

Legacy: Pass fontFamily + useGoogleFonts (still supported).

Implementation

static TextTheme build({
  // New API
  FontConfig? fontConfig,
  TextDirection direction = TextDirection.ltr,
  // Legacy API (kept for backwards compatibility)
  String? fontFamily,
  Color? baseColor,
  bool useGoogleFonts = true,
  double? baseFontSize,
}) {
  const TextTheme base = TextTheme(
    displayLarge: _displayLarge,
    displayMedium: _displayMedium,
    displaySmall: _displaySmall,
    headlineLarge: _headlineLarge,
    headlineMedium: _headlineMedium,
    headlineSmall: _headlineSmall,
    titleLarge: _titleLarge,
    titleMedium: _titleMedium,
    titleSmall: _titleSmall,
    bodyLarge: _bodyLarge,
    bodyMedium: _bodyMedium,
    bodySmall: _bodySmall,
    labelLarge: _labelLarge,
    labelMedium: _labelMedium,
    labelSmall: _labelSmall,
  );

  TextTheme resolved;

  if (fontConfig != null) {
    // New API path — direction-aware
    resolved = fontConfig.resolveTextTheme(direction, base);
  } else if (fontFamily != null) {
    // Legacy API path
    final String? resolvedFamily;
    if (useGoogleFonts) {
      resolvedFamily = GoogleFonts.config.allowRuntimeFetching
          ? GoogleFonts.getFont(fontFamily).fontFamily
          : fontFamily;
    } else {
      resolvedFamily = fontFamily;
    }
    resolved = base.apply(fontFamily: resolvedFamily);
  } else {
    resolved = base;
  }

  if (baseColor != null || baseFontSize != null) {
    resolved = resolved.apply(
      bodyColor: baseColor,
      displayColor: baseColor,
      fontSizeFactor: baseFontSize != null ? baseFontSize / 14.0 : 1.0,
    );
  }

  return resolved;
}