| // Copyright 2019-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 'package:flutter_gallery/demo/rally/colors.dart'; |
| import 'package:flutter_gallery/demo/rally/home.dart'; |
| import 'package:flutter_gallery/demo/rally/login.dart'; |
| |
| /// The RallyApp is a MaterialApp with a theme and 2 routes. |
| /// |
| /// The home route is the main page with tabs for sub pages. |
| /// The login route is the initial route. |
| class RallyApp extends StatelessWidget { |
| @override |
| Widget build(BuildContext context) { |
| return MaterialApp( |
| title: 'Rally', |
| theme: _buildRallyTheme(), |
| home: HomePage(), |
| initialRoute: '/login', |
| routes: <String, WidgetBuilder>{ |
| '/login': (BuildContext context) => LoginPage(), |
| }, |
| ); |
| } |
| |
| ThemeData _buildRallyTheme() { |
| final ThemeData base = ThemeData.dark(); |
| return ThemeData( |
| scaffoldBackgroundColor: RallyColors.primaryBackground, |
| primaryColor: RallyColors.primaryBackground, |
| textTheme: _buildRallyTextTheme(base.textTheme), |
| inputDecorationTheme: InputDecorationTheme( |
| labelStyle: const TextStyle( |
| color: RallyColors.gray, |
| fontWeight: FontWeight.w500, |
| ), |
| filled: true, |
| fillColor: RallyColors.inputBackground, |
| focusedBorder: InputBorder.none, |
| ), |
| ); |
| } |
| |
| TextTheme _buildRallyTextTheme(TextTheme base) { |
| return base |
| .copyWith( |
| body1: base.body1.copyWith( |
| fontFamily: 'Roboto Condensed', |
| fontSize: 14, |
| fontWeight: FontWeight.w400, |
| ), |
| body2: base.body2.copyWith( |
| fontFamily: 'Eczar', |
| fontSize: 40, |
| fontWeight: FontWeight.w400, |
| letterSpacing: 1.4, |
| ), |
| button: base.button.copyWith( |
| fontFamily: 'Roboto Condensed', |
| fontWeight: FontWeight.w700, |
| letterSpacing: 2.8, |
| ), |
| headline: base.body2.copyWith( |
| fontFamily: 'Eczar', |
| fontSize: 40, |
| fontWeight: FontWeight.w600, |
| letterSpacing: 1.4, |
| ), |
| ) |
| .apply( |
| displayColor: Colors.white, |
| bodyColor: Colors.white, |
| ); |
| } |
| } |