Files
paperless-mobile/lib/theme.dart
2023-08-01 18:09:14 +02:00

63 lines
1.7 KiB
Dart

import 'package:dynamic_color/dynamic_color.dart';
import 'package:flutter/material.dart';
import 'package:paperless_mobile/features/settings/model/color_scheme_option.dart';
const _classicThemeColorSeed = Colors.lightGreen;
const _defaultListTileTheme = ListTileThemeData(
tileColor: Colors.transparent,
);
final _defaultCardTheme = CardTheme(
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(12),
),
);
final _defaultInputDecorationTheme = InputDecorationTheme(
border: OutlineInputBorder(
borderRadius: BorderRadius.circular(16),
),
contentPadding: const EdgeInsets.symmetric(
horizontal: 16.0,
vertical: 16.0,
),
);
ThemeData buildTheme({
required Brightness brightness,
required ColorSchemeOption preferredColorScheme,
ColorScheme? dynamicScheme,
}) {
final classicScheme = ColorScheme.fromSeed(
seedColor: _classicThemeColorSeed,
brightness: brightness,
);
late ColorScheme colorScheme;
switch (preferredColorScheme) {
case ColorSchemeOption.classic:
colorScheme = classicScheme;
break;
case ColorSchemeOption.dynamic:
colorScheme = dynamicScheme ?? classicScheme;
break;
}
return ThemeData.from(
colorScheme: colorScheme.harmonized(),
useMaterial3: true,
).copyWith(
cardTheme: _defaultCardTheme,
inputDecorationTheme: _defaultInputDecorationTheme,
listTileTheme: _defaultListTileTheme,
materialTapTargetSize: MaterialTapTargetSize.shrinkWrap,
appBarTheme: const AppBarTheme(
scrolledUnderElevation: 0,
),
chipTheme: ChipThemeData(
backgroundColor: colorScheme.surfaceVariant,
checkmarkColor: colorScheme.onSurfaceVariant,
deleteIconColor: colorScheme.onSurfaceVariant,
),
);
}