// 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:google_fonts/google_fonts.dart'; import 'package:gallery/studies/shrine/colors.dart'; import 'package:gallery/studies/shrine/supplemental/cut_corners_border.dart'; const defaultLetterSpacing = 0.03; const mediumLetterSpacing = 0.04; const largeLetterSpacing = 1.0; final ThemeData shrineTheme = _buildShrineTheme(); IconThemeData _customIconTheme(IconThemeData original) { return original.copyWith(color: shrineBrown900); } ThemeData _buildShrineTheme() { final ThemeData base = ThemeData.light(); return base.copyWith( colorScheme: _shrineColorScheme, accentColor: shrineBrown900, primaryColor: shrinePink100, buttonColor: shrinePink100, scaffoldBackgroundColor: shrineBackgroundWhite, cardColor: shrineBackgroundWhite, textSelectionColor: shrinePink100, errorColor: shrineErrorRed, buttonTheme: const ButtonThemeData( colorScheme: _shrineColorScheme, textTheme: ButtonTextTheme.normal, ), primaryIconTheme: _customIconTheme(base.iconTheme), inputDecorationTheme: const InputDecorationTheme( border: CutCornersBorder( borderSide: BorderSide(color: shrineBrown900, width: 0.5), ), contentPadding: EdgeInsets.symmetric(vertical: 20, horizontal: 16), ), textTheme: _buildShrineTextTheme(base.textTheme), primaryTextTheme: _buildShrineTextTheme(base.primaryTextTheme), accentTextTheme: _buildShrineTextTheme(base.accentTextTheme), iconTheme: _customIconTheme(base.iconTheme), ); } TextTheme _buildShrineTextTheme(TextTheme base) { return GoogleFonts.rubikTextTheme(base .copyWith( headline: base.headline.copyWith( fontWeight: FontWeight.w500, letterSpacing: defaultLetterSpacing, ), title: base.title.copyWith( fontSize: 18, letterSpacing: defaultLetterSpacing, ), caption: base.caption.copyWith( fontWeight: FontWeight.w400, fontSize: 14, letterSpacing: defaultLetterSpacing, ), body2: base.body2.copyWith( fontWeight: FontWeight.w500, fontSize: 16, letterSpacing: defaultLetterSpacing, ), body1: base.body1.copyWith( letterSpacing: defaultLetterSpacing, ), subhead: base.subhead.copyWith( letterSpacing: defaultLetterSpacing, ), display1: base.display1.copyWith( letterSpacing: defaultLetterSpacing, ), button: base.button.copyWith( fontWeight: FontWeight.w500, fontSize: 14, letterSpacing: defaultLetterSpacing, ), ) .apply( displayColor: shrineBrown900, bodyColor: shrineBrown900, )); } const ColorScheme _shrineColorScheme = ColorScheme( primary: shrinePink100, primaryVariant: shrineBrown900, secondary: shrinePink50, secondaryVariant: shrineBrown900, surface: shrineSurfaceWhite, background: shrineBackgroundWhite, error: shrineErrorRed, onPrimary: shrineBrown900, onSecondary: shrineBrown900, onSurface: shrineBrown900, onBackground: shrineBrown900, onError: shrineSurfaceWhite, brightness: Brightness.light, );