// Copyright 2018-present the Flutter authors. All Rights Reserved. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. import 'package:flutter/material.dart'; import 'backdrop.dart'; import 'category_menu_page.dart'; import 'colors.dart'; import 'home.dart'; import 'login.dart'; import 'model/product.dart'; import 'supplemental/cut_corners_border.dart'; class ShrineApp extends StatefulWidget { @override _ShrineAppState createState() => _ShrineAppState(); } class _ShrineAppState extends State { Category _currentCategory = Category.all; @override Widget build(BuildContext context) { return MaterialApp( title: 'Shrine', home: Backdrop( currentCategory: _currentCategory, frontLayer: HomePage(category: _currentCategory), backLayer: CategoryMenuPage( currentCategory: _currentCategory, onCategoryTap: _onCategoryTap, ), frontTitle: Text('SHRINE'), backTitle: Text('MENU'), ), initialRoute: '/login', onGenerateRoute: _getRoute, theme: _kShrineTheme, ); } /// Function to call when a [Category] is tapped. void _onCategoryTap(Category category) { setState(() { _currentCategory = category; }); } } Route _getRoute(RouteSettings settings) { if (settings.name != '/login') { return null; } return MaterialPageRoute( settings: settings, builder: (BuildContext context) => LoginPage(), fullscreenDialog: true, ); } final ThemeData _kShrineTheme = _buildShrineTheme(); IconThemeData _customIconTheme(IconThemeData original) { return original.copyWith(color: kShrineBrown900); } ThemeData _buildShrineTheme() { final ThemeData base = ThemeData.light(); return base.copyWith( accentColor: kShrineBrown900, primaryColor: kShrinePink100, buttonColor: kShrinePink100, scaffoldBackgroundColor: kShrineBackgroundWhite, cardColor: kShrineBackgroundWhite, textSelectionColor: kShrinePink100, errorColor: kShrineErrorRed, buttonTheme: ButtonThemeData( textTheme: ButtonTextTheme.accent, ), primaryIconTheme: base.iconTheme.copyWith(color: kShrineBrown900), inputDecorationTheme: InputDecorationTheme( border: CutCornersBorder(), ), textTheme: _buildShrineTextTheme(base.textTheme), primaryTextTheme: _buildShrineTextTheme(base.primaryTextTheme), accentTextTheme: _buildShrineTextTheme(base.accentTextTheme), iconTheme: _customIconTheme(base.iconTheme), ); } TextTheme _buildShrineTextTheme(TextTheme base) { return base .copyWith( headline: base.headline.copyWith( fontWeight: FontWeight.w500, ), title: base.title.copyWith(fontSize: 18.0), caption: base.caption.copyWith( fontWeight: FontWeight.w400, fontSize: 14.0, ), body2: base.body2.copyWith( fontWeight: FontWeight.w500, fontSize: 16.0, ), ) .apply( fontFamily: 'Rubik', displayColor: kShrineBrown900, bodyColor: kShrineBrown900, ); }