theme static method
Implementation
static String theme(ProjectConfig c) {
final gradientImport =
c.useGradient ? "import 'app_gradients.dart';\n" : '';
// Note about gradient usage in a doc comment so it isn't an unused import.
final gradientNote = c.useGradient
? '\n /// Gradients available via AppGradients (see app_gradients.dart).'
: '';
return '''
import 'package:flutter/material.dart';
import 'app_colors.dart';
import 'app_radius.dart';
import 'app_text_styles.dart';
$gradientImport
/// App-wide ThemeData (light + dark).$gradientNote
class AppTheme {
AppTheme._();
${c.useGradient ? '\n /// The primary gradient, surfaced for convenience.\n static const Gradient primaryGradient = AppGradients.primary;\n' : ''}
static ThemeData get light => ThemeData(
useMaterial3: true,
colorScheme: ColorScheme.fromSeed(
seedColor: AppColors.primary,
brightness: Brightness.light,
),
scaffoldBackgroundColor: AppColors.background,
appBarTheme: const AppBarTheme(
backgroundColor: AppColors.surface,
foregroundColor: AppColors.textPrimary,
elevation: 0,
centerTitle: false,
),
textTheme: const TextTheme(
headlineLarge: AppTextStyles.h1,
headlineMedium: AppTextStyles.h2,
headlineSmall: AppTextStyles.h3,
bodyMedium: AppTextStyles.body,
bodySmall: AppTextStyles.caption,
labelLarge: AppTextStyles.button,
),
elevatedButtonTheme: ElevatedButtonThemeData(
style: ElevatedButton.styleFrom(
backgroundColor: AppColors.primary,
foregroundColor: AppColors.textOnPrimary,
padding: const EdgeInsets.symmetric(horizontal: 24, vertical: 12),
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(AppRadius.md),
),
textStyle: AppTextStyles.button,
),
),
inputDecorationTheme: InputDecorationTheme(
filled: true,
fillColor: AppColors.neutral100,
border: OutlineInputBorder(
borderRadius: BorderRadius.circular(AppRadius.md),
borderSide: BorderSide.none,
),
contentPadding:
const EdgeInsets.symmetric(horizontal: 16, vertical: 14),
),
);
static ThemeData get dark => ThemeData(
useMaterial3: true,
colorScheme: ColorScheme.fromSeed(
seedColor: AppColors.primary,
brightness: Brightness.dark,
),
);
}
''';
}