twonly-app/lib/src/visual/themes/light.dart

80 lines
2.8 KiB
Dart

import 'dart:io';
import 'package:flutter/material.dart';
import 'package:twonly/src/visual/themes/colors.dart';
const defaultPrimaryColor = Color(0xFF32BE80);
Color _onPrimary(Color primary) {
return ThemeData.estimateBrightnessForColor(primary) == Brightness.dark
? const Color(0xFFFFFFFF)
: const Color(0xFF082117);
}
/// Material colors for the light theme. Twonly-specific light/dark pairs live
/// together in `colors.dart`.
ColorScheme _lightColorScheme(Color primary) {
return ColorScheme.fromSeed(
seedColor: primary,
primary: primary,
).copyWith(
onPrimary: _onPrimary(primary),
surface: const Color(0xFFFFFFFF),
onSurface: const Color(0xFF191C1A),
onSurfaceVariant: const Color(0xFF414943),
surfaceDim: const Color(0xFFD9DCD9),
surfaceBright: const Color(0xFFFFFFFF),
surfaceContainerLowest: const Color(0xFFFFFFFF),
surfaceContainerLow: const Color(0xFFF5F7F5),
surfaceContainer: const Color(0xFFEFF2EF),
surfaceContainerHigh: const Color(0xFFE9ECE9),
surfaceContainerHighest: const Color(0xFFE3E7E3),
outline: const Color(0xFF717971),
outlineVariant: const Color(0xFFC1C9C1),
inverseSurface: const Color(0xFF2E312F),
onInverseSurface: const Color(0xFFF0F2F0),
shadow: const Color(0xFF000000),
scrim: const Color(0xFF000000),
error: const Color(0xFFBA1A1A),
onError: const Color(0xFFFFFFFF),
errorContainer: const Color(0xFFFFDAD6),
onErrorContainer: const Color(0xFF410002),
);
}
ThemeData getLightTheme([Color primary = defaultPrimaryColor]) {
final colorScheme = _lightColorScheme(primary);
final base = ThemeData(
colorScheme: colorScheme,
scaffoldBackgroundColor: colorScheme.surface,
inputDecorationTheme: const InputDecorationTheme(
border: OutlineInputBorder(),
),
extensions: const [AppColors.light()],
);
return base.copyWith(
textTheme: base.textTheme.apply(
fontFamily: Platform.isAndroid ? 'sans-serif' : null,
fontFamilyFallback: Platform.isAndroid ? const ['NotoColorEmoji'] : null,
),
);
}
final ThemeData lightTheme = getLightTheme();
final ButtonStyle primaryColorButtonStyle = FilledButton.styleFrom(
backgroundColor: defaultPrimaryColor,
foregroundColor: const Color(0xFF082117),
padding: const EdgeInsets.symmetric(horizontal: 32, vertical: 16),
shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(8)),
);
ButtonStyle secondaryGreyButtonStyle(BuildContext context) {
final colors = Theme.of(context).colorScheme;
return FilledButton.styleFrom(
backgroundColor: colors.surfaceContainerHigh,
foregroundColor: colors.onSurface,
padding: const EdgeInsets.symmetric(horizontal: 32, vertical: 16),
shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(8)),
);
}