Skip to content

Instantly share code, notes, and snippets.

@belachkar
Last active November 26, 2020 21:46
Show Gist options
  • Save belachkar/9a44479fd75464510b0167c30329a8ce to your computer and use it in GitHub Desktop.
Save belachkar/9a44479fd75464510b0167c30329a8ce to your computer and use it in GitHub Desktop.
An example of Flutter Theme customization

Flutter custom theme

An example of Flutter Theme customization

colors.dart:

import 'package:flutter/material.dart';

// Pink
const kShrinePink50 = Color(0xFFFEEAE6);
const kShrinePink100 = Color(0xFFFEDBD0);
const kShrinePink300 = Color(0xFFFBB8AC);
const kShrinePink400 = Color(0xFFEAA4A4);

// Brown
const kShrineBrown900 = Color(0xFF442B2D);

// Error
const kShrineErrorRed = Color(0xFFC5032B);

// Face, Background
const kShrineSurfaceWhite = Color(0xFFFFFBFA);
const kShrineBackgroundWhite = Colors.white;

app.dart:

import 'package:flutter/material.dart';

import 'colors.dart';
import 'home.dart';
import 'login.dart';

class ShrineApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Shrine',
      home: HomePage(),
      initialRoute: '/login',
      onGenerateRoute: _getRoute,
      theme: _kShrineTheme,
    );
  }

  Route<dynamic> _getRoute(RouteSettings settings) {
    if (settings.name != '/login') {
      return null;
    }

    return MaterialPageRoute<void>(
      settings: settings,
      builder: (BuildContext context) => LoginPage(),
      fullscreenDialog: true,
    );
  }
}

final ThemeData _kShrineTheme = _buildShrineTheme();

ThemeData _buildShrineTheme() {
  final ThemeData base = ThemeData.light();

  return base.copyWith(
    accentColor: kShrineBrown900,
    primaryColor: kShrinePink100,
    buttonTheme: base.buttonTheme.copyWith(
      buttonColor: kShrinePink100,
      colorScheme: base.colorScheme.copyWith(
        secondary: kShrineBrown900,
      ),
    ),
    buttonBarTheme: base.buttonBarTheme.copyWith(
      buttonTextTheme: ButtonTextTheme.accent,
    ),
    scaffoldBackgroundColor: kShrineBackgroundWhite,
    cardColor: kShrineBackgroundWhite,
    textSelectionColor: kShrinePink100,
    errorColor: kShrineErrorRed,
  );
}

References

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment