build static method
TextTheme
build({
- FontConfig? fontConfig,
- TextDirection direction = TextDirection.ltr,
- String? fontFamily,
- Color? baseColor,
- bool useGoogleFonts = true,
- 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;
}