| // Copyright 2019 The Flutter team. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| import 'package:flutter/material.dart'; |
| import 'package:gallery/layout/letter_spacing.dart'; |
| import 'package:gallery/studies/crane/colors.dart'; |
| import 'package:google_fonts/google_fonts.dart'; |
| |
| final ThemeData craneTheme = _buildCraneTheme(); |
| |
| IconThemeData _customIconTheme(IconThemeData original, Color color) { |
| return original.copyWith(color: color); |
| } |
| |
| ThemeData _buildCraneTheme() { |
| final base = ThemeData.light(); |
| |
| return base.copyWith( |
| colorScheme: const ColorScheme.light().copyWith( |
| primary: cranePurple800, |
| secondary: craneRed700, |
| error: craneErrorOrange, |
| ), |
| hintColor: craneWhite60, |
| indicatorColor: cranePrimaryWhite, |
| scaffoldBackgroundColor: cranePrimaryWhite, |
| cardColor: cranePrimaryWhite, |
| highlightColor: Colors.transparent, |
| textTheme: _buildCraneTextTheme(base.textTheme), |
| textSelectionTheme: const TextSelectionThemeData( |
| selectionColor: cranePurple700, |
| ), |
| primaryTextTheme: _buildCraneTextTheme(base.primaryTextTheme), |
| iconTheme: _customIconTheme(base.iconTheme, craneWhite60), |
| primaryIconTheme: _customIconTheme(base.iconTheme, cranePrimaryWhite), |
| ); |
| } |
| |
| TextTheme _buildCraneTextTheme(TextTheme base) { |
| return GoogleFonts.ralewayTextTheme( |
| base.copyWith( |
| displayLarge: base.displayLarge!.copyWith( |
| fontWeight: FontWeight.w300, |
| fontSize: 96, |
| ), |
| displayMedium: base.displayMedium!.copyWith( |
| fontWeight: FontWeight.w400, |
| fontSize: 60, |
| ), |
| displaySmall: base.displaySmall!.copyWith( |
| fontWeight: FontWeight.w600, |
| fontSize: 48, |
| ), |
| headlineMedium: base.headlineMedium!.copyWith( |
| fontWeight: FontWeight.w600, |
| fontSize: 34, |
| ), |
| headlineSmall: base.headlineSmall!.copyWith( |
| fontWeight: FontWeight.w600, |
| fontSize: 24, |
| ), |
| titleLarge: base.titleLarge!.copyWith( |
| fontWeight: FontWeight.w600, |
| fontSize: 20, |
| ), |
| titleMedium: base.titleMedium!.copyWith( |
| fontWeight: FontWeight.w500, |
| fontSize: 16, |
| letterSpacing: letterSpacingOrNone(0.5), |
| ), |
| titleSmall: base.titleSmall!.copyWith( |
| fontWeight: FontWeight.w600, |
| fontSize: 12, |
| color: craneGrey, |
| ), |
| bodyLarge: base.bodyLarge!.copyWith( |
| fontWeight: FontWeight.w500, |
| fontSize: 16, |
| ), |
| bodyMedium: base.bodyMedium!.copyWith( |
| fontWeight: FontWeight.w400, |
| fontSize: 14, |
| ), |
| labelLarge: base.labelLarge!.copyWith( |
| fontWeight: FontWeight.w600, |
| fontSize: 13, |
| letterSpacing: letterSpacingOrNone(0.8), |
| ), |
| bodySmall: base.bodySmall!.copyWith( |
| fontWeight: FontWeight.w500, |
| fontSize: 12, |
| color: craneGrey, |
| ), |
| labelSmall: base.labelSmall!.copyWith( |
| fontWeight: FontWeight.w600, |
| fontSize: 12, |
| ), |
| ), |
| ); |
| } |