mirror of
https://github.com/vodemn/m3_lightmeter.git
synced 2024-11-25 00:40:39 +00:00
c66381f813
* sync with resources * separated `ExpandableSectionList` as widget * fixed generic type * implemented `FilmsScreen` (wip) * made `SliverScreen` title a widget * [`FilmEditScreen`] wip * [`FilmEditScreen`] added validation * fixed title overflow for `SliverScreen` * [`FilmEditScreen`] separated add and edit blocs * [`FilmEditScreen`] split into separate components * added bottom widget to `SliverScreen` * implemented films list tabs fo `FilmsScreen` * added films screen to navigation * replaced explicit routes names with enum values * implemented CRUD for custom films * added placeholder for empty custom films list * added `FilmsStorageService` * fixed unit tests * fixed integration tests * lint * fixed golden tests * added iap stub methods * added custom films to features list * use 2.0.0 resouces * fixed film picket tests * migrated to iap 1.0.1 * autofocus film name field * wait for the film to edited * migrated to iap 1.1.0 * typo * wait for storage initialization * migrated to iap 1.1.1 * fixed films initialization * added conditions to films model `updateShouldNotifyDependent` * typo * fixed select film discard notify * covered films model `updateShouldNotifyDependent`
123 lines
4.1 KiB
Dart
123 lines
4.1 KiB
Dart
import 'package:flutter/material.dart';
|
|
import 'package:lightmeter/res/dimens.dart';
|
|
import 'package:material_color_utilities/material_color_utilities.dart';
|
|
|
|
const primaryColorsList = [
|
|
Color(0xfff44336),
|
|
Color(0xffe91e63),
|
|
Color(0xff9c27b0),
|
|
Color(0xff673ab7),
|
|
Color(0xff3f51b5),
|
|
Color(0xff2196f3),
|
|
Color(0xff03a9f4),
|
|
Color(0xff00bcd4),
|
|
Color(0xff009688),
|
|
Color(0xff4caf50),
|
|
Color(0xff8bc34a),
|
|
Color(0xffcddc39),
|
|
Color(0xffffeb3b),
|
|
Color(0xffffc107),
|
|
Color(0xffff9800),
|
|
Color(0xffff5722),
|
|
];
|
|
|
|
ThemeData themeFrom(Color primaryColor, Brightness brightness) {
|
|
final scheme = _colorSchemeFromColor(primaryColor, brightness);
|
|
final theme = ThemeData(
|
|
useMaterial3: true,
|
|
brightness: scheme.brightness,
|
|
primaryColor: primaryColor,
|
|
colorScheme: scheme,
|
|
appBarTheme: AppBarTheme(
|
|
elevation: Dimens.elevationLevel0,
|
|
scrolledUnderElevation: Dimens.elevationLevel2,
|
|
color: scheme.surface,
|
|
foregroundColor: scheme.onBackground,
|
|
surfaceTintColor: scheme.surfaceTint,
|
|
),
|
|
cardTheme: CardTheme(
|
|
clipBehavior: Clip.antiAlias,
|
|
color: scheme.surface,
|
|
elevation: Dimens.elevationLevel1,
|
|
margin: EdgeInsets.zero,
|
|
shadowColor: Colors.transparent,
|
|
shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(Dimens.borderRadiusL)),
|
|
surfaceTintColor: scheme.surfaceTint,
|
|
),
|
|
dialogBackgroundColor: scheme.surface,
|
|
dialogTheme: DialogTheme(
|
|
backgroundColor: scheme.surface,
|
|
surfaceTintColor: scheme.surfaceTint,
|
|
elevation: Dimens.elevationLevel3,
|
|
),
|
|
dividerColor: scheme.outlineVariant,
|
|
dividerTheme: DividerThemeData(
|
|
color: scheme.outlineVariant,
|
|
space: 0,
|
|
),
|
|
listTileTheme: ListTileThemeData(
|
|
style: ListTileStyle.list,
|
|
iconColor: scheme.onSurface,
|
|
textColor: scheme.onSurface,
|
|
),
|
|
scaffoldBackgroundColor: scheme.surface,
|
|
);
|
|
return theme.copyWith(
|
|
listTileTheme: ListTileThemeData(
|
|
style: ListTileStyle.list,
|
|
iconColor: scheme.onSurface,
|
|
textColor: scheme.onSurface,
|
|
subtitleTextStyle: theme.textTheme.bodyMedium,
|
|
leadingAndTrailingTextStyle: theme.textTheme.bodyMedium,
|
|
),
|
|
);
|
|
}
|
|
|
|
ColorScheme _colorSchemeFromColor(Color primaryColor, Brightness brightness) {
|
|
final scheme = SchemeTonalSpot(
|
|
sourceColorHct: Hct.fromInt(primaryColor.value),
|
|
isDark: brightness == Brightness.dark,
|
|
contrastLevel: 0.0,
|
|
);
|
|
|
|
return ColorScheme(
|
|
brightness: brightness,
|
|
background: Color(scheme.background),
|
|
onBackground: Color(scheme.onBackground),
|
|
error: Color(scheme.error),
|
|
onError: Color(scheme.onError),
|
|
errorContainer: Color(scheme.errorContainer),
|
|
onErrorContainer: Color(scheme.onErrorContainer),
|
|
primary: Color(scheme.primary),
|
|
onPrimary: Color(scheme.onPrimary),
|
|
primaryContainer: Color(scheme.primaryContainer),
|
|
onPrimaryContainer: Color(scheme.onPrimaryContainer),
|
|
secondary: Color(scheme.secondary),
|
|
onSecondary: Color(scheme.onSecondary),
|
|
secondaryContainer: Color(scheme.secondaryContainer),
|
|
onSecondaryContainer: Color(scheme.onSecondaryContainer),
|
|
tertiary: Color(scheme.tertiary),
|
|
onTertiary: Color(scheme.onTertiary),
|
|
tertiaryContainer: Color(scheme.tertiaryContainer),
|
|
onTertiaryContainer: Color(scheme.onTertiaryContainer),
|
|
surface: Color(scheme.surface),
|
|
onSurface: Color(scheme.onSurface),
|
|
surfaceVariant: Color(scheme.surfaceVariant),
|
|
onSurfaceVariant: Color(scheme.onSurfaceVariant),
|
|
outline: Color(scheme.outline),
|
|
outlineVariant: Color(scheme.outlineVariant),
|
|
surfaceTint: Color(scheme.surfaceTint),
|
|
shadow: Color(scheme.shadow),
|
|
scrim: Color(scheme.scrim),
|
|
);
|
|
}
|
|
|
|
extension ElevatedSurfaceTheme on ColorScheme {
|
|
Color _surfaceWithElevation(double elevation) {
|
|
return ElevationOverlay.applySurfaceTint(surface, surfaceTint, elevation);
|
|
}
|
|
|
|
Color get surfaceElevated1 => _surfaceWithElevation(Dimens.elevationLevel1);
|
|
Color get surfaceElevated2 => _surfaceWithElevation(Dimens.elevationLevel2);
|
|
Color get surfaceElevated3 => _surfaceWithElevation(Dimens.elevationLevel3);
|
|
}
|