build static method
Implementation
static ThemeData build({
required FUIPalette palette,
required Brightness brightness,
}) {
final colorScheme = FUIColors.applyTo(
brightness == Brightness.light
? const ColorScheme.light()
: const ColorScheme.dark(),
palette,
);
final isDark = brightness == Brightness.dark;
final textTheme = ThemeData(
useMaterial3: true,
colorScheme: colorScheme,
fontFamilyFallback: fuiFontFamilyFallback,
).textTheme;
return ThemeData(
useMaterial3: true,
colorScheme: colorScheme,
scaffoldBackgroundColor: palette.background,
canvasColor: palette.background,
fontFamilyFallback: fuiFontFamilyFallback,
splashFactory: NoSplash.splashFactory,
highlightColor: Colors.transparent,
extensions: <ThemeExtension<dynamic>>[palette],
textTheme: textTheme.copyWith(
bodyLarge: textTheme.bodyLarge?.copyWith(height: 1.35),
bodyMedium: textTheme.bodyMedium?.copyWith(height: 1.35),
),
appBarTheme: AppBarTheme(
centerTitle: false,
backgroundColor: palette.surface,
surfaceTintColor: Colors.transparent,
scrolledUnderElevation: 0,
systemOverlayStyle: overlayStyleFor(brightness),
),
cardTheme: CardThemeData(
color: palette.surface,
elevation: 0,
margin: EdgeInsets.zero,
shadowColor: Colors.transparent,
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(14),
side: BorderSide(color: palette.border.withValues(alpha: 0.4)),
),
),
inputDecorationTheme: InputDecorationTheme(
filled: true,
fillColor: isDark
? palette.surfaceAlt.withValues(alpha: 0.4)
: palette.surface.withValues(alpha: 0.96),
labelStyle: TextStyle(color: palette.textSecondary),
hintStyle: TextStyle(color: palette.textTertiary),
border: OutlineInputBorder(
borderRadius: BorderRadius.circular(12),
borderSide: BorderSide(color: palette.border),
),
enabledBorder: OutlineInputBorder(
borderRadius: BorderRadius.circular(12),
borderSide: BorderSide(color: palette.border),
),
focusedBorder: OutlineInputBorder(
borderRadius: BorderRadius.circular(12),
borderSide: BorderSide(color: palette.primary, width: 1.6),
),
contentPadding: const EdgeInsets.symmetric(
horizontal: 14,
vertical: 12,
),
),
filledButtonTheme: FilledButtonThemeData(
style: FilledButton.styleFrom(
minimumSize: const Size.fromHeight(46),
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(12),
),
textStyle: const TextStyle(fontWeight: FontWeight.w700),
),
),
outlinedButtonTheme: OutlinedButtonThemeData(
style: OutlinedButton.styleFrom(
minimumSize: const Size.fromHeight(44),
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(12),
),
side: BorderSide(color: palette.border),
),
),
bottomSheetTheme: BottomSheetThemeData(
backgroundColor: palette.surface,
surfaceTintColor: Colors.transparent,
showDragHandle: false,
shape: const RoundedRectangleBorder(
borderRadius: BorderRadius.vertical(top: Radius.circular(18)),
),
),
pageTransitionsTheme: pageTransitionsTheme,
);
}