Now each Colors.foo constant is-a Color and a color swatch (#8833)
diff --git a/dev/manual_tests/card_collection.dart b/dev/manual_tests/card_collection.dart
index 0bfca12..1e2c261 100644
--- a/dev/manual_tests/card_collection.dart
+++ b/dev/manual_tests/card_collection.dart
@@ -32,7 +32,7 @@
static const double kCardMargins = 8.0;
static const double kFixedCardHeight = 100.0;
- Map<int, Color> _primaryColor = Colors.deepPurple;
+ MaterialColor _primaryColor = Colors.deepPurple;
List<CardModel> _cardModels;
DismissDirection _dismissDirection = DismissDirection.horizontal;
TextAlign _textAlign = TextAlign.center;
@@ -148,7 +148,7 @@
});
}
- void _selectColor(Map<int, Color> selection) {
+ void _selectColor(MaterialColor selection) {
setState(() {
_primaryColor = selection;
});
@@ -181,14 +181,14 @@
);
}
- Widget buildDrawerColorRadioItem(String label, Map<int, Color> itemValue, Map<int, Color> currentValue, ValueChanged<Map<int, Color>> onChanged, { IconData icon, bool enabled: true }) {
+ Widget buildDrawerColorRadioItem(String label, MaterialColor itemValue, MaterialColor currentValue, ValueChanged<MaterialColor> onChanged, { IconData icon, bool enabled: true }) {
return new DrawerItem(
icon: new Icon(icon),
onPressed: enabled ? () { onChanged(itemValue); } : null,
child: new Row(
children: <Widget>[
new Expanded(child: new Text(label)),
- new Radio<Map<int, Color>>(
+ new Radio<MaterialColor>(
value: itemValue,
groupValue: currentValue,
onChanged: enabled ? onChanged : null,
diff --git a/examples/flutter_gallery/lib/demo/colors_demo.dart b/examples/flutter_gallery/lib/demo/colors_demo.dart
index f28b08c..dc7c7ff 100644
--- a/examples/flutter_gallery/lib/demo/colors_demo.dart
+++ b/examples/flutter_gallery/lib/demo/colors_demo.dart
@@ -6,37 +6,37 @@
const double kColorItemHeight = 48.0;
-class ColorSwatch {
- ColorSwatch({ this.name, this.colors, this.accentColors, this.threshold: 900});
+class Palette {
+ Palette({ this.name, this.primary, this.accent, this.threshold: 900});
final String name;
- final Map<int, Color> colors;
- final Map<int, Color> accentColors;
+ final MaterialColor primary;
+ final MaterialAccentColor accent;
final int threshold; // titles for indices > threshold are white, otherwise black
- bool get isValid => name != null && colors != null && threshold != null;
+ bool get isValid => name != null && primary != null && threshold != null;
}
-final List<ColorSwatch> colorSwatches = <ColorSwatch>[
- new ColorSwatch(name: 'RED', colors: Colors.red, accentColors: Colors.redAccent, threshold: 300),
- new ColorSwatch(name: 'PINK', colors: Colors.pink, accentColors: Colors.pinkAccent, threshold: 200),
- new ColorSwatch(name: 'PURPLE', colors: Colors.purple, accentColors: Colors.purpleAccent, threshold: 200),
- new ColorSwatch(name: 'DEEP PURPLE', colors: Colors.deepPurple, accentColors: Colors.deepPurpleAccent, threshold: 200),
- new ColorSwatch(name: 'INDIGO', colors: Colors.indigo, accentColors: Colors.indigoAccent, threshold: 200),
- new ColorSwatch(name: 'BLUE', colors: Colors.blue, accentColors: Colors.blueAccent, threshold: 400),
- new ColorSwatch(name: 'LIGHT BLUE', colors: Colors.lightBlue, accentColors: Colors.lightBlueAccent, threshold: 500),
- new ColorSwatch(name: 'CYAN', colors: Colors.cyan, accentColors: Colors.cyanAccent, threshold: 600),
- new ColorSwatch(name: 'TEAL', colors: Colors.teal, accentColors: Colors.tealAccent, threshold: 400),
- new ColorSwatch(name: 'GREEN', colors: Colors.green, accentColors: Colors.greenAccent, threshold: 500),
- new ColorSwatch(name: 'LIGHT GREEN', colors: Colors.lightGreen, accentColors: Colors.lightGreenAccent, threshold: 600),
- new ColorSwatch(name: 'LIME', colors: Colors.lime, accentColors: Colors.limeAccent, threshold: 800),
- new ColorSwatch(name: 'YELLOW', colors: Colors.yellow, accentColors: Colors.yellowAccent),
- new ColorSwatch(name: 'AMBER', colors: Colors.amber, accentColors: Colors.amberAccent),
- new ColorSwatch(name: 'ORANGE', colors: Colors.orange, accentColors: Colors.orangeAccent, threshold: 700),
- new ColorSwatch(name: 'DEEP ORANGE', colors: Colors.deepOrange, accentColors: Colors.deepOrangeAccent, threshold: 400),
- new ColorSwatch(name: 'BROWN', colors: Colors.brown, threshold: 200),
- new ColorSwatch(name: 'GREY', colors: Colors.grey, threshold: 500),
- new ColorSwatch(name: 'BLUE GREY', colors: Colors.blueGrey, threshold: 500),
+final List<Palette> allPalettes = <Palette>[
+ new Palette(name: 'RED', primary: Colors.red, accent: Colors.redAccent, threshold: 300),
+ new Palette(name: 'PINK', primary: Colors.pink, accent: Colors.pinkAccent, threshold: 200),
+ new Palette(name: 'PURPLE', primary: Colors.purple, accent: Colors.purpleAccent, threshold: 200),
+ new Palette(name: 'DEEP PURPLE', primary: Colors.deepPurple, accent: Colors.deepPurpleAccent, threshold: 200),
+ new Palette(name: 'INDIGO', primary: Colors.indigo, accent: Colors.indigoAccent, threshold: 200),
+ new Palette(name: 'BLUE', primary: Colors.blue, accent: Colors.blueAccent, threshold: 400),
+ new Palette(name: 'LIGHT BLUE', primary: Colors.lightBlue, accent: Colors.lightBlueAccent, threshold: 500),
+ new Palette(name: 'CYAN', primary: Colors.cyan, accent: Colors.cyanAccent, threshold: 600),
+ new Palette(name: 'TEAL', primary: Colors.teal, accent: Colors.tealAccent, threshold: 400),
+ new Palette(name: 'GREEN', primary: Colors.green, accent: Colors.greenAccent, threshold: 500),
+ new Palette(name: 'LIGHT GREEN', primary: Colors.lightGreen, accent: Colors.lightGreenAccent, threshold: 600),
+ new Palette(name: 'LIME', primary: Colors.lime, accent: Colors.limeAccent, threshold: 800),
+ new Palette(name: 'YELLOW', primary: Colors.yellow, accent: Colors.yellowAccent),
+ new Palette(name: 'AMBER', primary: Colors.amber, accent: Colors.amberAccent),
+ new Palette(name: 'ORANGE', primary: Colors.orange, accent: Colors.orangeAccent, threshold: 700),
+ new Palette(name: 'DEEP ORANGE', primary: Colors.deepOrange, accent: Colors.deepOrangeAccent, threshold: 400),
+ new Palette(name: 'BROWN', primary: Colors.brown, threshold: 200),
+ new Palette(name: 'GREY', primary: Colors.grey, threshold: 500),
+ new Palette(name: 'BLUE GREY', primary: Colors.blueGrey, threshold: 500),
];
@@ -71,29 +71,33 @@
}
}
-class ColorSwatchTabView extends StatelessWidget {
- ColorSwatchTabView({ Key key, this.swatch }) : super(key: key) {
- assert(swatch != null && swatch.isValid);
+class PaletteTabView extends StatelessWidget {
+ static const List<int> primaryKeys = const <int>[50, 100, 200, 300, 400, 500, 600, 700, 800, 900];
+ static const List<int> accentKeys = const <int>[100, 200, 400, 700];
+
+ PaletteTabView({ Key key, this.colors }) : super(key: key) {
+ assert(colors != null && colors.isValid);
}
- final ColorSwatch swatch;
+ final Palette colors;
+
@override
Widget build(BuildContext context) {
final TextTheme textTheme = Theme.of(context).textTheme;
final TextStyle whiteTextStyle = textTheme.body1.copyWith(color: Colors.white);
final TextStyle blackTextStyle = textTheme.body1.copyWith(color: Colors.black);
- final List<Widget> colorItems = swatch.colors.keys.map((int index) {
+ final List<Widget> colorItems = primaryKeys.map((int index) {
return new DefaultTextStyle(
- style: index > swatch.threshold ? whiteTextStyle : blackTextStyle,
- child: new ColorItem(index: index, color: swatch.colors[index]),
+ style: index > colors.threshold ? whiteTextStyle : blackTextStyle,
+ child: new ColorItem(index: index, color: colors.primary[index]),
);
}).toList();
- if (swatch.accentColors != null) {
- colorItems.addAll(swatch.accentColors.keys.map((int index) {
+ if (colors.accent != null) {
+ colorItems.addAll(accentKeys.map((int index) {
return new DefaultTextStyle(
- style: index > swatch.threshold ? whiteTextStyle : blackTextStyle,
- child: new ColorItem(index: index, color: swatch.accentColors[index], prefix: 'A'),
+ style: index > colors.threshold ? whiteTextStyle : blackTextStyle,
+ child: new ColorItem(index: index, color: colors.accent[index], prefix: 'A'),
);
}).toList());
}
@@ -111,19 +115,19 @@
@override
Widget build(BuildContext context) {
return new DefaultTabController(
- length: colorSwatches.length,
+ length: allPalettes.length,
child: new Scaffold(
appBar: new AppBar(
elevation: 0,
title: new Text('Colors'),
bottom: new TabBar(
isScrollable: true,
- tabs: colorSwatches.map((ColorSwatch swatch) => new Tab(text: swatch.name)).toList(),
+ tabs: allPalettes.map((Palette swatch) => new Tab(text: swatch.name)).toList(),
),
),
body: new TabBarView(
- children: colorSwatches.map((ColorSwatch swatch) {
- return new ColorSwatchTabView(swatch: swatch);
+ children: allPalettes.map((Palette colors) {
+ return new PaletteTabView(colors: colors);
}).toList(),
),
),
diff --git a/examples/flutter_gallery/lib/demo/material/icons_demo.dart b/examples/flutter_gallery/lib/demo/material/icons_demo.dart
index d223ced..57f2cab 100644
--- a/examples/flutter_gallery/lib/demo/material/icons_demo.dart
+++ b/examples/flutter_gallery/lib/demo/material/icons_demo.dart
@@ -12,7 +12,7 @@
}
class IconsDemoState extends State<IconsDemo> {
- static final List<Map<int, Color>> iconColorSwatches = <Map<int, Color>>[
+ static final List<MaterialColor> iconColors = <MaterialColor>[
Colors.red,
Colors.pink,
Colors.purple,
@@ -31,17 +31,17 @@
Colors.deepOrange,
Colors.brown,
Colors.grey,
- Colors.blueGrey
+ Colors.blueGrey,
];
int iconColorIndex = 8; // teal
double iconOpacity = 1.0;
- Color get iconColor => iconColorSwatches[iconColorIndex][400];
+ Color get iconColor => iconColors[iconColorIndex];
void handleIconButtonPress() {
setState(() {
- iconColorIndex = (iconColorIndex + 1) % iconColorSwatches.length;
+ iconColorIndex = (iconColorIndex + 1) % iconColors.length;
});
}
diff --git a/examples/flutter_gallery/lib/demo/material/tabs_fab_demo.dart b/examples/flutter_gallery/lib/demo/material/tabs_fab_demo.dart
index 168479b..bdedc71 100644
--- a/examples/flutter_gallery/lib/demo/material/tabs_fab_demo.dart
+++ b/examples/flutter_gallery/lib/demo/material/tabs_fab_demo.dart
@@ -14,7 +14,7 @@
_Page({ this.label, this.colors, this.icon });
final String label;
- final Map<int, Color> colors;
+ final MaterialColor colors;
final IconData icon;
Color get labelColor => colors != null ? colors[300] : Colors.grey[300];
diff --git a/examples/flutter_gallery/lib/gallery/drawer.dart b/examples/flutter_gallery/lib/gallery/drawer.dart
index 4babb8e..e07025d 100644
--- a/examples/flutter_gallery/lib/gallery/drawer.dart
+++ b/examples/flutter_gallery/lib/gallery/drawer.dart
@@ -31,7 +31,7 @@
class _GalleryDrawerHeaderState extends State<GalleryDrawerHeader> {
bool _logoHasName = true;
bool _logoHorizontal = true;
- Map<int, Color> _swatch = Colors.blue;
+ MaterialColor _logoColor = Colors.blue;
@override
Widget build(BuildContext context) {
@@ -43,7 +43,8 @@
style: _logoHasName ? _logoHorizontal ? FlutterLogoStyle.horizontal
: FlutterLogoStyle.stacked
: FlutterLogoStyle.markOnly,
- swatch: _swatch,
+ lightColor: _logoColor.shade400,
+ darkColor: _logoColor.shade900,
textColor: config.light ? const Color(0xFF616161) : const Color(0xFF9E9E9E),
),
duration: const Duration(milliseconds: 750),
@@ -62,22 +63,22 @@
},
onDoubleTap: () {
setState(() {
- final List<Map<int, Color>> options = <Map<int, Color>>[];
- if (_swatch != Colors.blue)
- options.addAll(<Map<int, Color>>[Colors.blue, Colors.blue, Colors.blue, Colors.blue, Colors.blue, Colors.blue, Colors.blue]);
- if (_swatch != Colors.amber)
- options.addAll(<Map<int, Color>>[Colors.amber, Colors.amber, Colors.amber]);
- if (_swatch != Colors.red)
- options.addAll(<Map<int, Color>>[Colors.red, Colors.red, Colors.red]);
- if (_swatch != Colors.indigo)
- options.addAll(<Map<int, Color>>[Colors.indigo, Colors.indigo, Colors.indigo]);
- if (_swatch != Colors.pink)
- options.addAll(<Map<int, Color>>[Colors.pink]);
- if (_swatch != Colors.purple)
- options.addAll(<Map<int, Color>>[Colors.purple]);
- if (_swatch != Colors.cyan)
- options.addAll(<Map<int, Color>>[Colors.cyan]);
- _swatch = options[new math.Random().nextInt(options.length)];
+ final List<MaterialColor> options = <MaterialColor>[];
+ if (_logoColor != Colors.blue)
+ options.addAll(<MaterialColor>[Colors.blue, Colors.blue, Colors.blue, Colors.blue, Colors.blue, Colors.blue, Colors.blue]);
+ if (_logoColor != Colors.amber)
+ options.addAll(<MaterialColor>[Colors.amber, Colors.amber, Colors.amber]);
+ if (_logoColor != Colors.red)
+ options.addAll(<MaterialColor>[Colors.red, Colors.red, Colors.red]);
+ if (_logoColor != Colors.indigo)
+ options.addAll(<MaterialColor>[Colors.indigo, Colors.indigo, Colors.indigo]);
+ if (_logoColor != Colors.pink)
+ options.addAll(<MaterialColor>[Colors.pink]);
+ if (_logoColor != Colors.purple)
+ options.addAll(<MaterialColor>[Colors.purple]);
+ if (_logoColor != Colors.cyan)
+ options.addAll(<MaterialColor>[Colors.cyan]);
+ _logoColor = options[new math.Random().nextInt(options.length)];
});
}
)
diff --git a/examples/layers/widgets/gestures.dart b/examples/layers/widgets/gestures.dart
index a54a752..5c3be8a 100644
--- a/examples/layers/widgets/gestures.dart
+++ b/examples/layers/widgets/gestures.dart
@@ -18,7 +18,7 @@
final double zoom;
final Offset offset;
- final Map<int, Color> swatch;
+ final MaterialColor swatch;
final bool forward;
final bool scaleEnabled;
final bool tapEnabled;
@@ -71,7 +71,7 @@
double _previousZoom;
double _zoom = 1.0;
- Map<int, Color> _swatch = Colors.blue;
+ MaterialColor _swatch = Colors.blue;
bool _forward = true;
bool _scaleEnabled = true;
@@ -106,28 +106,42 @@
void _handleColorChange() {
setState(() {
- switch (_swatch) {
- case Colors.blueGrey: _swatch = Colors.red; break;
- case Colors.red: _swatch = Colors.pink; break;
- case Colors.pink: _swatch = Colors.purple; break;
- case Colors.purple: _swatch = Colors.deepPurple; break;
- case Colors.deepPurple: _swatch = Colors.indigo; break;
- case Colors.indigo: _swatch = Colors.blue; break;
- case Colors.blue: _swatch = Colors.lightBlue; break;
- case Colors.lightBlue: _swatch = Colors.cyan; break;
- case Colors.cyan: _swatch = Colors.teal; break;
- case Colors.teal: _swatch = Colors.green; break;
- case Colors.green: _swatch = Colors.lightGreen; break;
- case Colors.lightGreen: _swatch = Colors.lime; break;
- case Colors.lime: _swatch = Colors.yellow; break;
- case Colors.yellow: _swatch = Colors.amber; break;
- case Colors.amber: _swatch = Colors.orange; break;
- case Colors.orange: _swatch = Colors.deepOrange; break;
- case Colors.deepOrange: _swatch = Colors.brown; break;
- case Colors.brown: _swatch = Colors.grey; break;
- case Colors.grey: _swatch = Colors.blueGrey; break;
- default: assert(false);
- }
+ if (_swatch == Colors.blueGrey)
+ _swatch = Colors.red;
+ else if (_swatch == Colors.red)
+ _swatch = Colors.pink;
+ else if (_swatch == Colors.pink)
+ _swatch = Colors.purple;
+ else if (_swatch == Colors.purple)
+ _swatch = Colors.deepPurple;
+ else if (_swatch == Colors.deepPurple)
+ _swatch = Colors.indigo;
+ else if (_swatch == Colors.indigo)
+ _swatch = Colors.blue;
+ else if (_swatch == Colors.blue)
+ _swatch = Colors.lightBlue;
+ else if (_swatch == Colors.lightBlue)
+ _swatch = Colors.cyan;
+ else if (_swatch == Colors.teal)
+ _swatch = Colors.green;
+ else if (_swatch == Colors.green)
+ _swatch = Colors.lightGreen;
+ else if (_swatch == Colors.lightGreen)
+ _swatch = Colors.lime;
+ else if (_swatch == Colors.lime)
+ _swatch = Colors.yellow;
+ else if (_swatch == Colors.yellow)
+ _swatch = Colors.amber;
+ else if (_swatch == Colors.amber)
+ _swatch = Colors.orange;
+ else if (_swatch == Colors.orange)
+ _swatch = Colors.deepOrange;
+ else if (_swatch == Colors.deepOrange)
+ _swatch = Colors.brown;
+ else if (_swatch == Colors.brown)
+ _swatch = Colors.grey;
+ else if (_swatch == Colors.grey)
+ _swatch = Colors.blueGrey;
});
}
diff --git a/packages/flutter/lib/src/material/colors.dart b/packages/flutter/lib/src/material/colors.dart
index 4c166cd..9675032 100644
--- a/packages/flutter/lib/src/material/colors.dart
+++ b/packages/flutter/lib/src/material/colors.dart
@@ -2,9 +2,85 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-import 'dart:ui' show Color;
+import 'dart:ui' show Color, hashValues;
-/// [Color] constants which represent Material design's
+/// A color that has a small table of related colors called a "swatch".
+///
+/// See also:
+///
+/// * [MaterialColor] and [MaterialAccentColor], which define material design
+/// primary and accent color swatches.
+/// * [Colors], which defines all of the standard material design colors.
+class ColorSwatch extends Color {
+ // Creates a color that has a small table of related colors called a "swatch".
+ const ColorSwatch(int primary, this._swatch) : super(primary);
+
+ final Map<int, Color> _swatch;
+
+ /// Returns an element of the [swatch] table.
+ Color operator [](int index) => _swatch[index];
+
+ @override
+ bool operator ==(dynamic other) {
+ if (identical(this, other))
+ return true;
+ if (other.runtimeType != runtimeType)
+ return false;
+ final ColorSwatch typedOther = other;
+ return super==(other) && _swatch == typedOther._swatch;
+ }
+
+ @override
+ int get hashCode => hashValues(runtimeType, value, _swatch);
+
+ @override
+ String toString() => '$runtimeType(primary value: ${super.toString()})';
+
+}
+
+/// Defines a single color as well a color swatch with ten shades of the color.
+///
+/// The color's shades are referred to by index. The greater the index, the
+/// darker the color. There are 10 valid indices: 50, 100, 200, ..., 900.
+/// The value of this color should the same the value of index 500 and [shade500].
+///
+/// See also:
+///
+/// * [Colors], which defines all of the standard material colors.
+class MaterialColor extends ColorSwatch {
+ const MaterialColor(int primary, Map<int, Color> swatch) : super(primary, swatch);
+ Color get shade50 => _swatch[50];
+ Color get shade100 => _swatch[100];
+ Color get shade200 => _swatch[200];
+ Color get shade300 => _swatch[300];
+ Color get shade400 => _swatch[400];
+ Color get shade500 => _swatch[500];
+ Color get shade600 => _swatch[600];
+ Color get shade700 => _swatch[700];
+ Color get shade800 => _swatch[800];
+ Color get shade900 => _swatch[900];
+}
+
+/// Defines a single accent color as well a swatch of four shades of the
+/// accent color.
+///
+/// The color's shades are referred to by index, the colors with smaller
+/// indices are lighter, larger indices are darker. There are four valid
+/// indices: 100, 200, 400, and 700. The value of this color should be the
+/// same as the value of index 200 and [shade200].
+///
+/// See also:
+///
+/// * [Colors], which defines all of the standard material colors.
+class MaterialAccentColor extends ColorSwatch {
+ const MaterialAccentColor(int primary, Map<int, Color> swatch) : super(primary, swatch);
+ Color get shade100 => _swatch[100];
+ Color get shade200 => _swatch[200];
+ Color get shade400 => _swatch[400];
+ Color get shade700 => _swatch[700];
+}
+
+/// [Color] and [ColorSwatch] constants which represent Material design's
/// [color palette](http://material.google.com/style/color.html).
///
/// Instead of using an absolute color from these palettes, consider using
@@ -19,6 +95,14 @@
/// Colors.green[400] // Selects a mid-range green.
/// ```
///
+/// Each ColorSwatch constant is a color and can used directly. For example
+///
+/// ```dart
+/// new Container(
+/// color: Colors.blue, // same as Colors.blue[500] or Colors.blue.shade500
+/// )
+/// ```
+///
/// Most swatches have colors from 100 to 900 in increments of one hundred, plus
/// the color 50. The smaller the number, the more pale the color. The greater
/// the number, the darker the color. The accent swatches (e.g. [redAccent]) only
@@ -128,7 +212,7 @@
static const Color white10 = const Color(0x1AFFFFFF);
- /// The red primary swatch.
+ /// The red primary color and swatch.
///
/// ```dart
/// new Icon(
@@ -142,18 +226,22 @@
/// * [redAccent], the corresponding accent colors.
/// * [Theme.of], which allows you to select colors from the current theme
/// rather than hard-coding colors in your build methods.
- static const Map<int, Color> red = const <int, Color>{
- 50: const Color(0xFFFFEBEE),
- 100: const Color(0xFFFFCDD2),
- 200: const Color(0xFFEF9A9A),
- 300: const Color(0xFFE57373),
- 400: const Color(0xFFEF5350),
- 500: const Color(0xFFF44336),
- 600: const Color(0xFFE53935),
- 700: const Color(0xFFD32F2F),
- 800: const Color(0xFFC62828),
- 900: const Color(0xFFB71C1C),
- };
+ static const int _redPrimaryValue = 0xFFF44336;
+ static const MaterialColor red = const MaterialColor(
+ _redPrimaryValue,
+ const <int, Color>{
+ 50: const Color(0xFFFFEBEE),
+ 100: const Color(0xFFFFCDD2),
+ 200: const Color(0xFFEF9A9A),
+ 300: const Color(0xFFE57373),
+ 400: const Color(0xFFEF5350),
+ 500: const Color(_redPrimaryValue),
+ 600: const Color(0xFFE53935),
+ 700: const Color(0xFFD32F2F),
+ 800: const Color(0xFFC62828),
+ 900: const Color(0xFFB71C1C),
+ },
+ );
/// The red accent swatch.
///
@@ -169,14 +257,18 @@
/// * [red], the corresponding primary colors.
/// * [Theme.of], which allows you to select colors from the current theme
/// rather than hard-coding colors in your build methods.
- static const Map<int, Color> redAccent = const <int, Color>{
- 100: const Color(0xFFFF8A80),
- 200: const Color(0xFFFF5252),
- 400: const Color(0xFFFF1744),
- 700: const Color(0xFFD50000),
- };
+ static const int _redAccentValue = 0xFFFF5252;
+ static const MaterialAccentColor redAccent = const MaterialAccentColor(
+ _redAccentValue,
+ const <int, Color>{
+ 100: const Color(0xFFFF8A80),
+ 200: const Color(_redAccentValue),
+ 400: const Color(0xFFFF1744),
+ 700: const Color(0xFFD50000),
+ },
+ );
- /// The pink primary swatch.
+ /// The pink primary color and swatch.
///
/// ```dart
/// new Icon(
@@ -190,20 +282,24 @@
/// * [pinkAccent], the corresponding accent colors.
/// * [Theme.of], which allows you to select colors from the current theme
/// rather than hard-coding colors in your build methods.
- static const Map<int, Color> pink = const <int, Color>{
- 50: const Color(0xFFFCE4EC),
- 100: const Color(0xFFF8BBD0),
- 200: const Color(0xFFF48FB1),
- 300: const Color(0xFFF06292),
- 400: const Color(0xFFEC407A),
- 500: const Color(0xFFE91E63),
- 600: const Color(0xFFD81B60),
- 700: const Color(0xFFC2185B),
- 800: const Color(0xFFAD1457),
- 900: const Color(0xFF880E4F),
- };
+ static const int _pinkPrimaryValue = 0xFFE91E63;
+ static const MaterialColor pink = const MaterialColor(
+ _pinkPrimaryValue,
+ const <int, Color>{
+ 50: const Color(0xFFFCE4EC),
+ 100: const Color(0xFFF8BBD0),
+ 200: const Color(0xFFF48FB1),
+ 300: const Color(0xFFF06292),
+ 400: const Color(0xFFEC407A),
+ 500: const Color(_pinkPrimaryValue),
+ 600: const Color(0xFFD81B60),
+ 700: const Color(0xFFC2185B),
+ 800: const Color(0xFFAD1457),
+ 900: const Color(0xFF880E4F),
+ },
+ );
- /// The pink accent swatch.
+ /// The pink accent color swatch.
///
/// ```dart
/// new Icon(
@@ -217,14 +313,18 @@
/// * [pink], the corresponding primary colors.
/// * [Theme.of], which allows you to select colors from the current theme
/// rather than hard-coding colors in your build methods.
- static const Map<int, Color> pinkAccent = const <int, Color>{
- 100: const Color(0xFFFF80AB),
- 200: const Color(0xFFFF4081),
- 400: const Color(0xFFF50057),
- 700: const Color(0xFFC51162),
- };
+ static const int _pinkAccentPrimaryValue = 0xFFFF4081;
+ static const MaterialAccentColor pinkAccent = const MaterialAccentColor(
+ _pinkAccentPrimaryValue,
+ const <int, Color>{
+ 100: const Color(0xFFFF80AB),
+ 200: const Color(_pinkAccentPrimaryValue),
+ 400: const Color(0xFFF50057),
+ 700: const Color(0xFFC51162),
+ },
+ );
- /// The purple primary swatch.
+ /// The purple primary color and swatch.
///
/// ```dart
/// new Icon(
@@ -238,20 +338,24 @@
/// * [purpleAccent], the corresponding accent colors.
/// * [Theme.of], which allows you to select colors from the current theme
/// rather than hard-coding colors in your build methods.
- static const Map<int, Color> purple = const <int, Color>{
- 50: const Color(0xFFF3E5F5),
- 100: const Color(0xFFE1BEE7),
- 200: const Color(0xFFCE93D8),
- 300: const Color(0xFFBA68C8),
- 400: const Color(0xFFAB47BC),
- 500: const Color(0xFF9C27B0),
- 600: const Color(0xFF8E24AA),
- 700: const Color(0xFF7B1FA2),
- 800: const Color(0xFF6A1B9A),
- 900: const Color(0xFF4A148C),
- };
+ static const int _purplePrimaryValue = 0xFF9C27B0;
+ static const MaterialColor purple = const MaterialColor(
+ _purplePrimaryValue,
+ const <int, Color>{
+ 50: const Color(0xFFF3E5F5),
+ 100: const Color(0xFFE1BEE7),
+ 200: const Color(0xFFCE93D8),
+ 300: const Color(0xFFBA68C8),
+ 400: const Color(0xFFAB47BC),
+ 500: const Color(_purplePrimaryValue),
+ 600: const Color(0xFF8E24AA),
+ 700: const Color(0xFF7B1FA2),
+ 800: const Color(0xFF6A1B9A),
+ 900: const Color(0xFF4A148C),
+ },
+ );
- /// The purple accent swatch.
+ /// The purple accent color and swatch.
///
/// ```dart
/// new Icon(
@@ -265,14 +369,18 @@
/// * [purple], the corresponding primary colors.
/// * [Theme.of], which allows you to select colors from the current theme
/// rather than hard-coding colors in your build methods.
- static const Map<int, Color> purpleAccent = const <int, Color>{
- 100: const Color(0xFFEA80FC),
- 200: const Color(0xFFE040FB),
- 400: const Color(0xFFD500F9),
- 700: const Color(0xFFAA00FF),
- };
+ static const int _purpleAccentPrimaryValue = 0xFFE040FB;
+ static const MaterialAccentColor purpleAccent = const MaterialAccentColor(
+ _purpleAccentPrimaryValue,
+ const <int, Color>{
+ 100: const Color(0xFFEA80FC),
+ 200: const Color(_purpleAccentPrimaryValue),
+ 400: const Color(0xFFD500F9),
+ 700: const Color(0xFFAA00FF),
+ },
+ );
- /// The deep purple primary swatch.
+ /// The deep purple primary color and swatch.
///
/// ```dart
/// new Icon(
@@ -286,20 +394,24 @@
/// * [deepPurpleAccent], the corresponding accent colors.
/// * [Theme.of], which allows you to select colors from the current theme
/// rather than hard-coding colors in your build methods.
- static const Map<int, Color> deepPurple = const <int, Color>{
- 50: const Color(0xFFEDE7F6),
- 100: const Color(0xFFD1C4E9),
- 200: const Color(0xFFB39DDB),
- 300: const Color(0xFF9575CD),
- 400: const Color(0xFF7E57C2),
- 500: const Color(0xFF673AB7),
- 600: const Color(0xFF5E35B1),
- 700: const Color(0xFF512DA8),
- 800: const Color(0xFF4527A0),
- 900: const Color(0xFF311B92),
- };
+ static const int _deepPurplePrimaryValue = 0xFF673AB7;
+ static const MaterialColor deepPurple = const MaterialColor(
+ _deepPurplePrimaryValue,
+ const <int, Color>{
+ 50: const Color(0xFFEDE7F6),
+ 100: const Color(0xFFD1C4E9),
+ 200: const Color(0xFFB39DDB),
+ 300: const Color(0xFF9575CD),
+ 400: const Color(0xFF7E57C2),
+ 500: const Color(_deepPurplePrimaryValue),
+ 600: const Color(0xFF5E35B1),
+ 700: const Color(0xFF512DA8),
+ 800: const Color(0xFF4527A0),
+ 900: const Color(0xFF311B92),
+ },
+ );
- /// The deep purple accent swatch.
+ /// The deep purple accent color and swatch.
///
/// ```dart
/// new Icon(
@@ -313,14 +425,18 @@
/// * [deepPurple], the corresponding primary colors.
/// * [Theme.of], which allows you to select colors from the current theme
/// rather than hard-coding colors in your build methods.
- static const Map<int, Color> deepPurpleAccent = const <int, Color>{
- 100: const Color(0xFFB388FF),
- 200: const Color(0xFF7C4DFF),
- 400: const Color(0xFF651FFF),
- 700: const Color(0xFF6200EA),
- };
+ static const int _deepPurpleAccentPrimaryValue = 0xFF7C4DFF;
+ static const MaterialAccentColor deepPurpleAccent = const MaterialAccentColor(
+ _deepPurpleAccentPrimaryValue,
+ const <int, Color>{
+ 100: const Color(0xFFB388FF),
+ 200: const Color(_deepPurpleAccentPrimaryValue),
+ 400: const Color(0xFF651FFF),
+ 700: const Color(0xFF6200EA),
+ },
+ );
- /// The indigo primary swatch.
+ /// The indigo primary color and swatch.
///
/// ```dart
/// new Icon(
@@ -334,20 +450,24 @@
/// * [indigoAccent], the corresponding accent colors.
/// * [Theme.of], which allows you to select colors from the current theme
/// rather than hard-coding colors in your build methods.
- static const Map<int, Color> indigo = const <int, Color>{
- 50: const Color(0xFFE8EAF6),
- 100: const Color(0xFFC5CAE9),
- 200: const Color(0xFF9FA8DA),
- 300: const Color(0xFF7986CB),
- 400: const Color(0xFF5C6BC0),
- 500: const Color(0xFF3F51B5),
- 600: const Color(0xFF3949AB),
- 700: const Color(0xFF303F9F),
- 800: const Color(0xFF283593),
- 900: const Color(0xFF1A237E),
- };
+ static const int _indigoPrimaryValue = 0xFF3F51B5;
+ static const MaterialColor indigo = const MaterialColor(
+ _indigoPrimaryValue,
+ const <int, Color>{
+ 50: const Color(0xFFE8EAF6),
+ 100: const Color(0xFFC5CAE9),
+ 200: const Color(0xFF9FA8DA),
+ 300: const Color(0xFF7986CB),
+ 400: const Color(0xFF5C6BC0),
+ 500: const Color(_indigoPrimaryValue),
+ 600: const Color(0xFF3949AB),
+ 700: const Color(0xFF303F9F),
+ 800: const Color(0xFF283593),
+ 900: const Color(0xFF1A237E),
+ },
+ );
- /// The indigo accent swatch.
+ /// The indigo accent color and swatch.
///
/// ```dart
/// new Icon(
@@ -361,14 +481,18 @@
/// * [indigo], the corresponding primary colors.
/// * [Theme.of], which allows you to select colors from the current theme
/// rather than hard-coding colors in your build methods.
- static const Map<int, Color> indigoAccent = const <int, Color>{
- 100: const Color(0xFF8C9EFF),
- 200: const Color(0xFF536DFE),
- 400: const Color(0xFF3D5AFE),
- 700: const Color(0xFF304FFE),
- };
+ static const int _indigoAccentPrimaryValue = 0xFF536DFE;
+ static const MaterialAccentColor indigoAccent = const MaterialAccentColor(
+ _indigoAccentPrimaryValue,
+ const <int, Color>{
+ 100: const Color(0xFF8C9EFF),
+ 200: const Color(_indigoAccentPrimaryValue),
+ 400: const Color(0xFF3D5AFE),
+ 700: const Color(0xFF304FFE),
+ },
+ );
- /// The blue primary swatch.
+ /// The blue primary color and swatch.
///
/// ```dart
/// new Icon(
@@ -382,20 +506,24 @@
/// * [blueAccent], the corresponding accent colors.
/// * [Theme.of], which allows you to select colors from the current theme
/// rather than hard-coding colors in your build methods.
- static const Map<int, Color> blue = const <int, Color>{
- 50: const Color(0xFFE3F2FD),
- 100: const Color(0xFFBBDEFB),
- 200: const Color(0xFF90CAF9),
- 300: const Color(0xFF64B5F6),
- 400: const Color(0xFF42A5F5),
- 500: const Color(0xFF2196F3),
- 600: const Color(0xFF1E88E5),
- 700: const Color(0xFF1976D2),
- 800: const Color(0xFF1565C0),
- 900: const Color(0xFF0D47A1),
- };
+ static const int _bluePrimaryValue = 0xFF2196F3;
+ static const MaterialColor blue = const MaterialColor(
+ _bluePrimaryValue,
+ const <int, Color>{
+ 50: const Color(0xFFE3F2FD),
+ 100: const Color(0xFFBBDEFB),
+ 200: const Color(0xFF90CAF9),
+ 300: const Color(0xFF64B5F6),
+ 400: const Color(0xFF42A5F5),
+ 500: const Color(_bluePrimaryValue),
+ 600: const Color(0xFF1E88E5),
+ 700: const Color(0xFF1976D2),
+ 800: const Color(0xFF1565C0),
+ 900: const Color(0xFF0D47A1),
+ },
+ );
- /// The blue accent swatch.
+ /// The blue accent color and swatch.
///
/// ```dart
/// new Icon(
@@ -409,14 +537,18 @@
/// * [blue], the corresponding primary colors.
/// * [Theme.of], which allows you to select colors from the current theme
/// rather than hard-coding colors in your build methods.
- static const Map<int, Color> blueAccent = const <int, Color>{
- 100: const Color(0xFF82B1FF),
- 200: const Color(0xFF448AFF),
- 400: const Color(0xFF2979FF),
- 700: const Color(0xFF2962FF),
- };
+ static const int _blueAccentPrimaryValue = 0xFF448AFF;
+ static const MaterialAccentColor blueAccent = const MaterialAccentColor(
+ _blueAccentPrimaryValue,
+ const <int, Color>{
+ 100: const Color(0xFF82B1FF),
+ 200: const Color(_blueAccentPrimaryValue),
+ 400: const Color(0xFF2979FF),
+ 700: const Color(0xFF2962FF),
+ },
+ );
- /// The light blue primary swatch.
+ /// The light blue primary color and swatch.
///
/// ```dart
/// new Icon(
@@ -430,18 +562,22 @@
/// * [lightBlueAccent], the corresponding accent colors.
/// * [Theme.of], which allows you to select colors from the current theme
/// rather than hard-coding colors in your build methods.
- static const Map<int, Color> lightBlue = const <int, Color>{
- 50: const Color(0xFFE1F5FE),
- 100: const Color(0xFFB3E5FC),
- 200: const Color(0xFF81D4FA),
- 300: const Color(0xFF4FC3F7),
- 400: const Color(0xFF29B6F6),
- 500: const Color(0xFF03A9F4),
- 600: const Color(0xFF039BE5),
- 700: const Color(0xFF0288D1),
- 800: const Color(0xFF0277BD),
- 900: const Color(0xFF01579B),
- };
+ static const int _lightBluePrimaryValue = 0xFF03A9F4;
+ static const MaterialColor lightBlue = const MaterialColor(
+ _lightBluePrimaryValue,
+ const <int, Color>{
+ 50: const Color(0xFFE1F5FE),
+ 100: const Color(0xFFB3E5FC),
+ 200: const Color(0xFF81D4FA),
+ 300: const Color(0xFF4FC3F7),
+ 400: const Color(0xFF29B6F6),
+ 500: const Color(_lightBluePrimaryValue),
+ 600: const Color(0xFF039BE5),
+ 700: const Color(0xFF0288D1),
+ 800: const Color(0xFF0277BD),
+ 900: const Color(0xFF01579B),
+ },
+ );
/// The light blue accent swatch.
///
@@ -457,14 +593,18 @@
/// * [lightBlue], the corresponding primary colors.
/// * [Theme.of], which allows you to select colors from the current theme
/// rather than hard-coding colors in your build methods.
- static const Map<int, Color> lightBlueAccent = const <int, Color>{
- 100: const Color(0xFF80D8FF),
- 200: const Color(0xFF40C4FF),
- 400: const Color(0xFF00B0FF),
- 700: const Color(0xFF0091EA),
- };
+ static const int _lightBlueAccentPrimaryValue = 0xFF40C4FF;
+ static const MaterialAccentColor lightBlueAccent = const MaterialAccentColor(
+ _lightBlueAccentPrimaryValue,
+ const <int, Color>{
+ 100: const Color(0xFF80D8FF),
+ 200: const Color(_lightBlueAccentPrimaryValue),
+ 400: const Color(0xFF00B0FF),
+ 700: const Color(0xFF0091EA),
+ },
+ );
- /// The cyan primary swatch.
+ /// The cyan primary color and swatch.
///
/// ```dart
/// new Icon(
@@ -478,20 +618,24 @@
/// * [cyanAccent], the corresponding accent colors.
/// * [Theme.of], which allows you to select colors from the current theme
/// rather than hard-coding colors in your build methods.
- static const Map<int, Color> cyan = const <int, Color>{
- 50: const Color(0xFFE0F7FA),
- 100: const Color(0xFFB2EBF2),
- 200: const Color(0xFF80DEEA),
- 300: const Color(0xFF4DD0E1),
- 400: const Color(0xFF26C6DA),
- 500: const Color(0xFF00BCD4),
- 600: const Color(0xFF00ACC1),
- 700: const Color(0xFF0097A7),
- 800: const Color(0xFF00838F),
- 900: const Color(0xFF006064),
- };
+ static const int _cyanPrimaryValue = 0xFF00BCD4;
+ static const MaterialColor cyan = const MaterialColor(
+ _cyanPrimaryValue,
+ const <int, Color>{
+ 50: const Color(0xFFE0F7FA),
+ 100: const Color(0xFFB2EBF2),
+ 200: const Color(0xFF80DEEA),
+ 300: const Color(0xFF4DD0E1),
+ 400: const Color(0xFF26C6DA),
+ 500: const Color(_cyanPrimaryValue),
+ 600: const Color(0xFF00ACC1),
+ 700: const Color(0xFF0097A7),
+ 800: const Color(0xFF00838F),
+ 900: const Color(0xFF006064),
+ },
+ );
- /// The cyan accent swatch.
+ /// The cyan accent color and swatch.
///
/// ```dart
/// new Icon(
@@ -505,14 +649,18 @@
/// * [cyan], the corresponding primary colors.
/// * [Theme.of], which allows you to select colors from the current theme
/// rather than hard-coding colors in your build methods.
- static const Map<int, Color> cyanAccent = const <int, Color>{
- 100: const Color(0xFF84FFFF),
- 200: const Color(0xFF18FFFF),
- 400: const Color(0xFF00E5FF),
- 700: const Color(0xFF00B8D4),
- };
+ static const int _cyanAccentPrimaryValue = 0xFF18FFFF;
+ static const MaterialAccentColor cyanAccent = const MaterialAccentColor(
+ _cyanAccentPrimaryValue,
+ const <int, Color>{
+ 100: const Color(0xFF84FFFF),
+ 200: const Color(_cyanAccentPrimaryValue),
+ 400: const Color(0xFF00E5FF),
+ 700: const Color(0xFF00B8D4),
+ },
+ );
- /// The teal primary swatch.
+ /// The teal primary color and swatch.
///
/// ```dart
/// new Icon(
@@ -526,20 +674,24 @@
/// * [tealAccent], the corresponding accent colors.
/// * [Theme.of], which allows you to select colors from the current theme
/// rather than hard-coding colors in your build methods.
- static const Map<int, Color> teal = const <int, Color>{
- 50: const Color(0xFFE0F2F1),
- 100: const Color(0xFFB2DFDB),
- 200: const Color(0xFF80CBC4),
- 300: const Color(0xFF4DB6AC),
- 400: const Color(0xFF26A69A),
- 500: const Color(0xFF009688),
- 600: const Color(0xFF00897B),
- 700: const Color(0xFF00796B),
- 800: const Color(0xFF00695C),
- 900: const Color(0xFF004D40),
- };
+ static const int _tealPrimaryValue = 0xFF009688;
+ static const MaterialColor teal = const MaterialColor(
+ _tealPrimaryValue,
+ const <int, Color>{
+ 50: const Color(0xFFE0F2F1),
+ 100: const Color(0xFFB2DFDB),
+ 200: const Color(0xFF80CBC4),
+ 300: const Color(0xFF4DB6AC),
+ 400: const Color(0xFF26A69A),
+ 500: const Color(_tealPrimaryValue),
+ 600: const Color(0xFF00897B),
+ 700: const Color(0xFF00796B),
+ 800: const Color(0xFF00695C),
+ 900: const Color(0xFF004D40),
+ },
+ );
- /// The teal accent swatch.
+ /// The teal accent color and swatch.
///
/// ```dart
/// new Icon(
@@ -553,14 +705,18 @@
/// * [teal], the corresponding primary colors.
/// * [Theme.of], which allows you to select colors from the current theme
/// rather than hard-coding colors in your build methods.
- static const Map<int, Color> tealAccent = const <int, Color>{
- 100: const Color(0xFFA7FFEB),
- 200: const Color(0xFF64FFDA),
- 400: const Color(0xFF1DE9B6),
- 700: const Color(0xFF00BFA5),
- };
+ static const int _tealAccentPrimaryValue = 0xFF64FFDA;
+ static const MaterialAccentColor tealAccent = const MaterialAccentColor(
+ _tealAccentPrimaryValue,
+ const <int, Color>{
+ 100: const Color(0xFFA7FFEB),
+ 200: const Color(_tealAccentPrimaryValue),
+ 400: const Color(0xFF1DE9B6),
+ 700: const Color(0xFF00BFA5),
+ },
+ );
- /// The green primary swatch.
+ /// The green primary color and swatch.
///
/// ```dart
/// new Icon(
@@ -574,20 +730,24 @@
/// * [greenAccent], the corresponding accent colors.
/// * [Theme.of], which allows you to select colors from the current theme
/// rather than hard-coding colors in your build methods.
- static const Map<int, Color> green = const <int, Color>{
- 50: const Color(0xFFE8F5E9),
- 100: const Color(0xFFC8E6C9),
- 200: const Color(0xFFA5D6A7),
- 300: const Color(0xFF81C784),
- 400: const Color(0xFF66BB6A),
- 500: const Color(0xFF4CAF50),
- 600: const Color(0xFF43A047),
- 700: const Color(0xFF388E3C),
- 800: const Color(0xFF2E7D32),
- 900: const Color(0xFF1B5E20),
- };
+ static const int _greenPrimaryValue = 0xFF4CAF50;
+ static const MaterialColor green = const MaterialColor(
+ _greenPrimaryValue,
+ const <int, Color>{
+ 50: const Color(0xFFE8F5E9),
+ 100: const Color(0xFFC8E6C9),
+ 200: const Color(0xFFA5D6A7),
+ 300: const Color(0xFF81C784),
+ 400: const Color(0xFF66BB6A),
+ 500: const Color(_greenPrimaryValue),
+ 600: const Color(0xFF43A047),
+ 700: const Color(0xFF388E3C),
+ 800: const Color(0xFF2E7D32),
+ 900: const Color(0xFF1B5E20),
+ },
+ );
- /// The green accent swatch.
+ /// The green accent color and swatch.
///
/// ```dart
/// new Icon(
@@ -601,14 +761,18 @@
/// * [green], the corresponding primary colors.
/// * [Theme.of], which allows you to select colors from the current theme
/// rather than hard-coding colors in your build methods.
- static const Map<int, Color> greenAccent = const <int, Color>{
- 100: const Color(0xFFB9F6CA),
- 200: const Color(0xFF69F0AE),
- 400: const Color(0xFF00E676),
- 700: const Color(0xFF00C853),
- };
+ static const int _greenAccentPrimaryValue = 0xFF69F0AE;
+ static const MaterialAccentColor greenAccent = const MaterialAccentColor(
+ _greenAccentPrimaryValue,
+ const <int, Color>{
+ 100: const Color(0xFFB9F6CA),
+ 200: const Color(_greenAccentPrimaryValue),
+ 400: const Color(0xFF00E676),
+ 700: const Color(0xFF00C853),
+ },
+ );
- /// The light green primary swatch.
+ /// The light green primary color and swatch.
///
/// ```dart
/// new Icon(
@@ -622,20 +786,24 @@
/// * [lightGreenAccent], the corresponding accent colors.
/// * [Theme.of], which allows you to select colors from the current theme
/// rather than hard-coding colors in your build methods.
- static const Map<int, Color> lightGreen = const <int, Color>{
- 50: const Color(0xFFF1F8E9),
- 100: const Color(0xFFDCEDC8),
- 200: const Color(0xFFC5E1A5),
- 300: const Color(0xFFAED581),
- 400: const Color(0xFF9CCC65),
- 500: const Color(0xFF8BC34A),
- 600: const Color(0xFF7CB342),
- 700: const Color(0xFF689F38),
- 800: const Color(0xFF558B2F),
- 900: const Color(0xFF33691E),
- };
+ static const int _lightGreenPrimaryValue = 0xFF8BC34A;
+ static const MaterialColor lightGreen = const MaterialColor(
+ _lightGreenPrimaryValue,
+ const <int, Color>{
+ 50: const Color(0xFFF1F8E9),
+ 100: const Color(0xFFDCEDC8),
+ 200: const Color(0xFFC5E1A5),
+ 300: const Color(0xFFAED581),
+ 400: const Color(0xFF9CCC65),
+ 500: const Color(_lightGreenPrimaryValue),
+ 600: const Color(0xFF7CB342),
+ 700: const Color(0xFF689F38),
+ 800: const Color(0xFF558B2F),
+ 900: const Color(0xFF33691E),
+ },
+ );
- /// The light green accent swatch.
+ /// The light green accent color and swatch.
///
/// ```dart
/// new Icon(
@@ -649,14 +817,18 @@
/// * [lightGreen], the corresponding primary colors.
/// * [Theme.of], which allows you to select colors from the current theme
/// rather than hard-coding colors in your build methods.
- static const Map<int, Color> lightGreenAccent = const <int, Color>{
- 100: const Color(0xFFCCFF90),
- 200: const Color(0xFFB2FF59),
- 400: const Color(0xFF76FF03),
- 700: const Color(0xFF64DD17),
- };
+ static const int _lightGreenAccentPrimaryValue = 0xFFB2FF59;
+ static const MaterialAccentColor lightGreenAccent = const MaterialAccentColor(
+ _lightGreenAccentPrimaryValue,
+ const <int, Color>{
+ 100: const Color(0xFFCCFF90),
+ 200: const Color(_lightGreenAccentPrimaryValue),
+ 400: const Color(0xFF76FF03),
+ 700: const Color(0xFF64DD17),
+ },
+ );
- /// The lime primary swatch.
+ /// The lime primary color and swatch.
///
/// ```dart
/// new Icon(
@@ -670,20 +842,24 @@
/// * [limeAccent], the corresponding accent colors.
/// * [Theme.of], which allows you to select colors from the current theme
/// rather than hard-coding colors in your build methods.
- static const Map<int, Color> lime = const <int, Color>{
- 50: const Color(0xFFF9FBE7),
- 100: const Color(0xFFF0F4C3),
- 200: const Color(0xFFE6EE9C),
- 300: const Color(0xFFDCE775),
- 400: const Color(0xFFD4E157),
- 500: const Color(0xFFCDDC39),
- 600: const Color(0xFFC0CA33),
- 700: const Color(0xFFAFB42B),
- 800: const Color(0xFF9E9D24),
- 900: const Color(0xFF827717),
- };
+ static const int _limePrimaryValue = 0xFFCDDC39;
+ static const MaterialColor lime = const MaterialColor(
+ _limePrimaryValue,
+ const <int, Color>{
+ 50: const Color(0xFFF9FBE7),
+ 100: const Color(0xFFF0F4C3),
+ 200: const Color(0xFFE6EE9C),
+ 300: const Color(0xFFDCE775),
+ 400: const Color(0xFFD4E157),
+ 500: const Color(_limePrimaryValue),
+ 600: const Color(0xFFC0CA33),
+ 700: const Color(0xFFAFB42B),
+ 800: const Color(0xFF9E9D24),
+ 900: const Color(0xFF827717),
+ },
+ );
- /// The lime accent primary swatch.
+ /// The lime accent primary color and swatch.
///
/// ```dart
/// new Icon(
@@ -697,14 +873,18 @@
/// * [lime], the corresponding primary colors.
/// * [Theme.of], which allows you to select colors from the current theme
/// rather than hard-coding colors in your build methods.
- static const Map<int, Color> limeAccent = const <int, Color>{
- 100: const Color(0xFFF4FF81),
- 200: const Color(0xFFEEFF41),
- 400: const Color(0xFFC6FF00),
- 700: const Color(0xFFAEEA00),
- };
+ static const int _limeAccentPrimaryValue = 0xFFEEFF41;
+ static const MaterialAccentColor limeAccent = const MaterialAccentColor(
+ _limeAccentPrimaryValue,
+ const <int, Color>{
+ 100: const Color(0xFFF4FF81),
+ 200: const Color(_limeAccentPrimaryValue),
+ 400: const Color(0xFFC6FF00),
+ 700: const Color(0xFFAEEA00),
+ },
+ );
- /// The yellow primary swatch.
+ /// The yellow primary color and swatch.
///
/// ```dart
/// new Icon(
@@ -718,20 +898,24 @@
/// * [yellowAccentAccent], the corresponding accent colors.
/// * [Theme.of], which allows you to select colors from the current theme
/// rather than hard-coding colors in your build methods.
- static const Map<int, Color> yellow = const <int, Color>{
- 50: const Color(0xFFFFFDE7),
- 100: const Color(0xFFFFF9C4),
- 200: const Color(0xFFFFF59D),
- 300: const Color(0xFFFFF176),
- 400: const Color(0xFFFFEE58),
- 500: const Color(0xFFFFEB3B),
- 600: const Color(0xFFFDD835),
- 700: const Color(0xFFFBC02D),
- 800: const Color(0xFFF9A825),
- 900: const Color(0xFFF57F17),
- };
+ static const int _yellowPrimaryValue = 0xFFFFEB3B;
+ static const MaterialColor yellow = const MaterialColor(
+ _yellowPrimaryValue,
+ const <int, Color>{
+ 50: const Color(0xFFFFFDE7),
+ 100: const Color(0xFFFFF9C4),
+ 200: const Color(0xFFFFF59D),
+ 300: const Color(0xFFFFF176),
+ 400: const Color(0xFFFFEE58),
+ 500: const Color(_yellowPrimaryValue),
+ 600: const Color(0xFFFDD835),
+ 700: const Color(0xFFFBC02D),
+ 800: const Color(0xFFF9A825),
+ 900: const Color(0xFFF57F17),
+ },
+ );
- /// The yellow accent swatch.
+ /// The yellow accent color and swatch.
///
/// ```dart
/// new Icon(
@@ -745,14 +929,18 @@
/// * [yellow], the corresponding primary colors.
/// * [Theme.of], which allows you to select colors from the current theme
/// rather than hard-coding colors in your build methods.
- static const Map<int, Color> yellowAccent = const <int, Color>{
- 100: const Color(0xFFFFFF8D),
- 200: const Color(0xFFFFFF00),
- 400: const Color(0xFFFFEA00),
- 700: const Color(0xFFFFD600),
- };
+ static const int _yellowAccentPrimaryValue = 0xFFFFFF00;
+ static const MaterialAccentColor yellowAccent = const MaterialAccentColor(
+ _yellowAccentPrimaryValue,
+ const <int, Color>{
+ 100: const Color(0xFFFFFF8D),
+ 200: const Color(_yellowAccentPrimaryValue),
+ 400: const Color(0xFFFFEA00),
+ 700: const Color(0xFFFFD600),
+ },
+ );
- /// The amber primary swatch.
+ /// The amber primary color and swatch.
///
/// ```dart
/// new Icon(
@@ -766,20 +954,24 @@
/// * [amberAccent], the corresponding accent colors.
/// * [Theme.of], which allows you to select colors from the current theme
/// rather than hard-coding colors in your build methods.
- static const Map<int, Color> amber = const <int, Color>{
- 50: const Color(0xFFFFF8E1),
- 100: const Color(0xFFFFECB3),
- 200: const Color(0xFFFFE082),
- 300: const Color(0xFFFFD54F),
- 400: const Color(0xFFFFCA28),
- 500: const Color(0xFFFFC107),
- 600: const Color(0xFFFFB300),
- 700: const Color(0xFFFFA000),
- 800: const Color(0xFFFF8F00),
- 900: const Color(0xFFFF6F00),
- };
+ static const int _amberPrimaryValue = 0xFFFFC107;
+ static const MaterialColor amber = const MaterialColor(
+ _amberPrimaryValue,
+ const <int, Color>{
+ 50: const Color(0xFFFFF8E1),
+ 100: const Color(0xFFFFECB3),
+ 200: const Color(0xFFFFE082),
+ 300: const Color(0xFFFFD54F),
+ 400: const Color(0xFFFFCA28),
+ 500: const Color(_amberPrimaryValue),
+ 600: const Color(0xFFFFB300),
+ 700: const Color(0xFFFFA000),
+ 800: const Color(0xFFFF8F00),
+ 900: const Color(0xFFFF6F00),
+ },
+ );
- /// The amber accent swatch.
+ /// The amber accent color and swatch.
///
/// ```dart
/// new Icon(
@@ -793,14 +985,18 @@
/// * [amber], the corresponding primary colors.
/// * [Theme.of], which allows you to select colors from the current theme
/// rather than hard-coding colors in your build methods.
- static const Map<int, Color> amberAccent = const <int, Color>{
- 100: const Color(0xFFFFE57F),
- 200: const Color(0xFFFFD740),
- 400: const Color(0xFFFFC400),
- 700: const Color(0xFFFFAB00),
- };
+ static const int _amberAccentPrimaryValue = 0xFFFFD740;
+ static const MaterialAccentColor amberAccent = const MaterialAccentColor(
+ _amberAccentPrimaryValue,
+ const <int, Color>{
+ 100: const Color(0xFFFFE57F),
+ 200: const Color(_amberAccentPrimaryValue),
+ 400: const Color(0xFFFFC400),
+ 700: const Color(0xFFFFAB00),
+ },
+ );
- /// The orange primary swatch.
+ /// The orange primary color and swatch.
///
/// ```dart
/// new Icon(
@@ -814,20 +1010,24 @@
/// * [orangeAccent], the corresponding accent colors.
/// * [Theme.of], which allows you to select colors from the current theme
/// rather than hard-coding colors in your build methods.
- static const Map<int, Color> orange = const <int, Color>{
- 50: const Color(0xFFFFF3E0),
- 100: const Color(0xFFFFE0B2),
- 200: const Color(0xFFFFCC80),
- 300: const Color(0xFFFFB74D),
- 400: const Color(0xFFFFA726),
- 500: const Color(0xFFFF9800),
- 600: const Color(0xFFFB8C00),
- 700: const Color(0xFFF57C00),
- 800: const Color(0xFFEF6C00),
- 900: const Color(0xFFE65100),
- };
+ static const int _orangePrimaryValue = 0xFFFF9800;
+ static const MaterialColor orange = const MaterialColor(
+ _orangePrimaryValue,
+ const <int, Color>{
+ 50: const Color(0xFFFFF3E0),
+ 100: const Color(0xFFFFE0B2),
+ 200: const Color(0xFFFFCC80),
+ 300: const Color(0xFFFFB74D),
+ 400: const Color(0xFFFFA726),
+ 500: const Color(_orangePrimaryValue),
+ 600: const Color(0xFFFB8C00),
+ 700: const Color(0xFFF57C00),
+ 800: const Color(0xFFEF6C00),
+ 900: const Color(0xFFE65100),
+ },
+ );
- /// The orange accent swatch.
+ /// The orange accent color and swatch.
///
/// ```dart
/// new Icon(
@@ -841,14 +1041,18 @@
/// * [orange], the corresponding primary colors.
/// * [Theme.of], which allows you to select colors from the current theme
/// rather than hard-coding colors in your build methods.
- static const Map<int, Color> orangeAccent = const <int, Color>{
- 100: const Color(0xFFFFD180),
- 200: const Color(0xFFFFAB40),
- 400: const Color(0xFFFF9100),
- 700: const Color(0xFFFF6D00),
- };
+ static const int _orangeAccentPrimaryValue = 0xFFFFAB40;
+ static const MaterialAccentColor orangeAccent = const MaterialAccentColor(
+ _orangeAccentPrimaryValue,
+ const <int, Color>{
+ 100: const Color(0xFFFFD180),
+ 200: const Color(_orangeAccentPrimaryValue),
+ 400: const Color(0xFFFF9100),
+ 700: const Color(0xFFFF6D00),
+ },
+ );
- /// The deep orange primary swatch.
+ /// The deep orange primary color and swatch.
///
/// ```dart
/// new Icon(
@@ -862,20 +1066,24 @@
/// * [deepOrangeAccent], the corresponding accent colors.
/// * [Theme.of], which allows you to select colors from the current theme
/// rather than hard-coding colors in your build methods.
- static const Map<int, Color> deepOrange = const <int, Color>{
- 50: const Color(0xFFFBE9E7),
- 100: const Color(0xFFFFCCBC),
- 200: const Color(0xFFFFAB91),
- 300: const Color(0xFFFF8A65),
- 400: const Color(0xFFFF7043),
- 500: const Color(0xFFFF5722),
- 600: const Color(0xFFF4511E),
- 700: const Color(0xFFE64A19),
- 800: const Color(0xFFD84315),
- 900: const Color(0xFFBF360C),
- };
+ static const int _deepOrangePrimaryValue = 0xFFFF5722;
+ static const MaterialColor deepOrange = const MaterialColor(
+ _deepOrangePrimaryValue,
+ const <int, Color>{
+ 50: const Color(0xFFFBE9E7),
+ 100: const Color(0xFFFFCCBC),
+ 200: const Color(0xFFFFAB91),
+ 300: const Color(0xFFFF8A65),
+ 400: const Color(0xFFFF7043),
+ 500: const Color(_deepOrangePrimaryValue),
+ 600: const Color(0xFFF4511E),
+ 700: const Color(0xFFE64A19),
+ 800: const Color(0xFFD84315),
+ 900: const Color(0xFFBF360C),
+ },
+ );
- /// The deep orange accent swatch.
+ /// The deep orange accent color and swatch.
///
/// ```dart
/// new Icon(
@@ -889,14 +1097,18 @@
/// * [deepOrange], the corresponding primary colors.
/// * [Theme.of], which allows you to select colors from the current theme
/// rather than hard-coding colors in your build methods.
- static const Map<int, Color> deepOrangeAccent = const <int, Color>{
- 100: const Color(0xFFFF9E80),
- 200: const Color(0xFFFF6E40),
- 400: const Color(0xFFFF3D00),
- 700: const Color(0xFFDD2C00),
- };
+ static const int _deepOrangeAccentPrimaryValue = 0xFFFF6E40;
+ static const MaterialAccentColor deepOrangeAccent = const MaterialAccentColor(
+ _deepOrangeAccentPrimaryValue,
+ const <int, Color>{
+ 100: const Color(0xFFFF9E80),
+ 200: const Color(_deepOrangeAccentPrimaryValue),
+ 400: const Color(0xFFFF3D00),
+ 700: const Color(0xFFDD2C00),
+ },
+ );
- /// The brown primary swatch.
+ /// The brown primary color and swatch.
///
/// ```dart
/// new Icon(
@@ -905,26 +1117,30 @@
/// ),
/// ```
///
- /// This swatch has no corresponding accent swatch.
+ /// This swatch has no corresponding accent color and swatch.
///
/// See also:
///
/// * [Theme.of], which allows you to select colors from the current theme
/// rather than hard-coding colors in your build methods.
- static const Map<int, Color> brown = const <int, Color>{
- 50: const Color(0xFFEFEBE9),
- 100: const Color(0xFFD7CCC8),
- 200: const Color(0xFFBCAAA4),
- 300: const Color(0xFFA1887F),
- 400: const Color(0xFF8D6E63),
- 500: const Color(0xFF795548),
- 600: const Color(0xFF6D4C41),
- 700: const Color(0xFF5D4037),
- 800: const Color(0xFF4E342E),
- 900: const Color(0xFF3E2723),
- };
+ static const int _brownPrimaryValue = 0xFF795548;
+ static const MaterialColor brown = const MaterialColor(
+ _brownPrimaryValue,
+ const <int, Color>{
+ 50: const Color(0xFFEFEBE9),
+ 100: const Color(0xFFD7CCC8),
+ 200: const Color(0xFFBCAAA4),
+ 300: const Color(0xFFA1887F),
+ 400: const Color(0xFF8D6E63),
+ 500: const Color(_brownPrimaryValue),
+ 600: const Color(0xFF6D4C41),
+ 700: const Color(0xFF5D4037),
+ 800: const Color(0xFF4E342E),
+ 900: const Color(0xFF3E2723),
+ },
+ );
- /// The grey primary swatch.
+ /// The grey primary color and swatch.
///
/// ```dart
/// new Icon(
@@ -944,22 +1160,26 @@
///
/// * [Theme.of], which allows you to select colors from the current theme
/// rather than hard-coding colors in your build methods.
- static const Map<int, Color> grey = const <int, Color>{
- 50: const Color(0xFFFAFAFA),
- 100: const Color(0xFFF5F5F5),
- 200: const Color(0xFFEEEEEE),
- 300: const Color(0xFFE0E0E0),
- 350: const Color(0xFFD6D6D6), // only for raised button while pressed in light theme
- 400: const Color(0xFFBDBDBD),
- 500: const Color(0xFF9E9E9E),
- 600: const Color(0xFF757575),
- 700: const Color(0xFF616161),
- 800: const Color(0xFF424242),
- 850: const Color(0xFF303030), // only for background color in dark theme
- 900: const Color(0xFF212121),
- };
+ static const int _greyPrimaryValue = 0xFF9E9E9E;
+ static const MaterialColor grey = const MaterialColor(
+ _greyPrimaryValue,
+ const <int, Color>{
+ 50: const Color(0xFFFAFAFA),
+ 100: const Color(0xFFF5F5F5),
+ 200: const Color(0xFFEEEEEE),
+ 300: const Color(0xFFE0E0E0),
+ 350: const Color(0xFFD6D6D6), // only for raised button while pressed in light theme
+ 400: const Color(0xFFBDBDBD),
+ 500: const Color(_greyPrimaryValue),
+ 600: const Color(0xFF757575),
+ 700: const Color(0xFF616161),
+ 800: const Color(0xFF424242),
+ 850: const Color(0xFF303030), // only for background color in dark theme
+ 900: const Color(0xFF212121),
+ },
+ );
- /// The blue-grey primary swatch.
+ /// The blue-grey primary color and swatch.
///
/// ```dart
/// new Icon(
@@ -974,21 +1194,25 @@
///
/// * [Theme.of], which allows you to select colors from the current theme
/// rather than hard-coding colors in your build methods.
- static const Map<int, Color> blueGrey = const <int, Color>{
- 50: const Color(0xFFECEFF1),
- 100: const Color(0xFFCFD8DC),
- 200: const Color(0xFFB0BEC5),
- 300: const Color(0xFF90A4AE),
- 400: const Color(0xFF78909C),
- 500: const Color(0xFF607D8B),
- 600: const Color(0xFF546E7A),
- 700: const Color(0xFF455A64),
- 800: const Color(0xFF37474F),
- 900: const Color(0xFF263238),
- };
+ static const int _blueGreyPrimaryValue = 0xFF607D8B;
+ static const MaterialColor blueGrey = const MaterialColor(
+ _blueGreyPrimaryValue,
+ const <int, Color>{
+ 50: const Color(0xFFECEFF1),
+ 100: const Color(0xFFCFD8DC),
+ 200: const Color(0xFFB0BEC5),
+ 300: const Color(0xFF90A4AE),
+ 400: const Color(0xFF78909C),
+ 500: const Color(_blueGreyPrimaryValue),
+ 600: const Color(0xFF546E7A),
+ 700: const Color(0xFF455A64),
+ 800: const Color(0xFF37474F),
+ 900: const Color(0xFF263238),
+ },
+ );
/// The material design primary color swatches (except grey).
- static const List<Map<int, Color>> primaries = const <Map<int, Color>>[
+ static const List<MaterialColor> primaries = const <MaterialColor>[
red,
pink,
purple,
@@ -1011,7 +1235,7 @@
];
/// The material design accent color swatches.
- static const List<Map<int, Color>> accents = const <Map<int, Color>>[
+ static const List<MaterialAccentColor> accents = const <MaterialAccentColor>[
redAccent,
pinkAccent,
purpleAccent,
diff --git a/packages/flutter/lib/src/material/flutter_logo.dart b/packages/flutter/lib/src/material/flutter_logo.dart
index 83e19da..2e734ed 100644
--- a/packages/flutter/lib/src/material/flutter_logo.dart
+++ b/packages/flutter/lib/src/material/flutter_logo.dart
@@ -22,7 +22,7 @@
const FlutterLogo({
Key key,
this.size,
- this.swatch: Colors.blue,
+ this.colors,
this.textColor: const Color(0xFF616161),
this.style: FlutterLogoStyle.markOnly,
this.duration: const Duration(milliseconds: 750),
@@ -38,20 +38,16 @@
/// 24.0.
final double size;
- /// The colors to use to paint the logo. This map should contain at least two
- /// values, one for 400 and one for 900.
+ /// The color swatch to use to paint the logo, Colors.blue by default.
///
- /// If possible, the default should be used. It corresponds to the
- /// [Colors.blue] swatch.
- ///
- /// If for some reason that color scheme is impractical, the [Colors.amber],
- /// [Colors.red], or [Colors.indigo] swatches can be used. These are Flutter's
- /// secondary colors.
+ /// If for some reason the default colors are impractical, then one
+ /// of [Colors.amber], [Colors.red], or [Colors.indigo] swatches can be used.
+ /// These are Flutter's secondary colors.
///
/// In extreme cases where none of those four color schemes will work,
/// [Colors.pink], [Colors.purple], or [Colors.cyan] swatches can be used.
/// These are Flutter's tertiary colors.
- final Map<int, Color> swatch;
+ final MaterialColor colors;
/// The color used to paint the "Flutter" text on the logo, if [style] is
/// [FlutterLogoStyle.horizontal] or [FlutterLogoStyle.stacked]. The
@@ -75,13 +71,15 @@
Widget build(BuildContext context) {
final IconThemeData iconTheme = IconTheme.of(context);
final double iconSize = size ?? iconTheme.size;
+ final MaterialColor logoColors = colors ?? Colors.blue;
return new AnimatedContainer(
width: iconSize,
height: iconSize,
duration: duration,
curve: curve,
decoration: new FlutterLogoDecoration(
- swatch: swatch,
+ lightColor: logoColors.shade400,
+ darkColor: logoColors.shade900,
style: style,
textColor: textColor,
),
diff --git a/packages/flutter/lib/src/material/list_tile.dart b/packages/flutter/lib/src/material/list_tile.dart
index 2daf126..7cfdb05 100644
--- a/packages/flutter/lib/src/material/list_tile.dart
+++ b/packages/flutter/lib/src/material/list_tile.dart
@@ -76,7 +76,7 @@
/// * [CircleAvatar], which shows an icon representing a person and is often
/// used as the [leading] element of a ListTile.
/// * [Divider], which can be used to separate [ListTile]s.
-/// * [ListTile.divideTiles], a utility for inserting [Divider]s in between [ListTiles]s.
+/// * [ListTile.divideTiles], a utility for inserting [Divider]s in between [ListTile]s.
/// * <https://material.google.com/components/lists.html>
class ListTile extends StatelessWidget {
/// Creates a list tile.
diff --git a/packages/flutter/lib/src/material/theme_data.dart b/packages/flutter/lib/src/material/theme_data.dart
index 969b64c..0aead08 100644
--- a/packages/flutter/lib/src/material/theme_data.dart
+++ b/packages/flutter/lib/src/material/theme_data.dart
@@ -70,7 +70,7 @@
/// more discussion on how to pick the right colors.
factory ThemeData({
Brightness brightness,
- Map<int, Color> primarySwatch,
+ MaterialColor primarySwatch,
Color primaryColor,
Brightness primaryColorBrightness,
Color accentColor,
diff --git a/packages/flutter/lib/src/painting/flutter_logo.dart b/packages/flutter/lib/src/painting/flutter_logo.dart
index 8b390d4..a9aac36 100644
--- a/packages/flutter/lib/src/painting/flutter_logo.dart
+++ b/packages/flutter/lib/src/painting/flutter_logo.dart
@@ -31,24 +31,19 @@
stacked,
}
-const int _lightShade = 400;
-const int _darkShade = 900;
-const Map<int, Color> _kDefaultSwatch = const <int, Color>{
- _lightShade: const Color(0xFF42A5F5),
- _darkShade: const Color(0xFF0D47A1)
-};
-
/// An immutable description of how to paint Flutter's logo.
class FlutterLogoDecoration extends Decoration {
/// Creates a decoration that knows how to paint Flutter's logo.
///
- /// The [swatch] controls the color used for the logo. The [style] controls
- /// whether and where to draw the "Flutter" label. If one is shown, the
- /// [textColor] controls the color of the label.
+ /// The [lightColor] and [darkColor] are used to fill the logo. The [style]
+ /// controls whether and where to draw the "Flutter" label. If one is shown,
+ /// the [textColor] controls the color of the label.
///
- /// The [swatch], [textColor], and [style] arguments must not be null.
+ /// The [lightColor], [darkColor], [textColor], and [style] arguments must not
+ /// be null.
const FlutterLogoDecoration({
- this.swatch: _kDefaultSwatch,
+ this.lightColor: const Color(0xFF42A5F5), // Colors.blue[400]
+ this.darkColor: const Color(0xFF0D47A1), // Colors.blue[900]
this.textColor: const Color(0xFF616161),
this.style: FlutterLogoStyle.markOnly,
this.margin: EdgeInsets.zero,
@@ -56,22 +51,26 @@
// (see https://github.com/dart-lang/sdk/issues/26980 for details about that ignore statement)
_opacity = 1.0;
- FlutterLogoDecoration._(this.swatch, this.textColor, this.style, this._position, this._opacity, this.margin);
+ FlutterLogoDecoration._(this.lightColor, this.darkColor, this.textColor, this.style, this._position, this._opacity, this.margin);
- /// The colors to use to paint the logo. This map should contain at least two
- /// values, one for 400 and one for 900.
+ /// The lighter of the two colors used to paint the logo.
///
- /// If possible, the default should be used. It corresponds to the
- /// [Colors.blue] swatch from the Material library.
+ /// If possible, the default should be used. It corresponds to the 400 and 900
+ /// values of [Colors.blue] from the Material library.
///
- /// If for some reason that color scheme is impractical, the [Colors.amber],
- /// [Colors.red], or [Colors.indigo] swatches can be used. These are Flutter's
- /// secondary colors.
+ /// If for some reason that color scheme is impractical, the same entries from
+ /// [Colors.amber], [Colors.red], or [Colors.indigo] colors can be used. These
+ /// are Flutter's secondary colors.
///
/// In extreme cases where none of those four color schemes will work,
- /// [Colors.pink], [Colors.purple], or [Colors.cyan] swatches can be used.
+ /// [Colors.pink], [Colors.purple], or [Colors.cyan] can be used.
/// These are Flutter's tertiary colors.
- final Map<int, Color> swatch;
+ final Color lightColor;
+
+ /// The darker of the two colors used to paint the logo.
+ ///
+ /// See [lightColor] for more information about selecting the logo's colors.
+ final Color darkColor;
/// The color used to paint the "Flutter" text on the logo, if [style] is
/// [FlutterLogoStyle.horizontal] or [FlutterLogoStyle.stacked]. The
@@ -97,9 +96,8 @@
@override
bool debugAssertIsValid() {
- assert(swatch != null
- && swatch[_lightShade] != null
- && swatch[_darkShade] != null
+ assert(lightColor != null
+ && darkColor != null
&& textColor != null
&& style != null
&& _position != null
@@ -126,7 +124,8 @@
return null;
if (a == null) {
return new FlutterLogoDecoration._(
- b.swatch,
+ b.lightColor,
+ b.darkColor,
b.textColor,
b.style,
b._position,
@@ -136,7 +135,8 @@
}
if (b == null) {
return new FlutterLogoDecoration._(
- a.swatch,
+ a.lightColor,
+ a.darkColor,
a.textColor,
a.style,
a._position,
@@ -145,7 +145,8 @@
);
}
return new FlutterLogoDecoration._(
- _lerpSwatch(a.swatch, b.swatch, t),
+ Color.lerp(a.lightColor, b.lightColor, t),
+ Color.lerp(a.darkColor, b.darkColor, t),
Color.lerp(a.textColor, b.textColor, t),
t < 0.5 ? a.style : b.style,
a._position + (b._position - a._position) * t,
@@ -154,15 +155,6 @@
);
}
- static Map<int, Color> _lerpSwatch(Map<int, Color> a, Map<int, Color> b, double t) {
- assert(a != null);
- assert(b != null);
- return <int, Color>{
- _lightShade: Color.lerp(a[_lightShade], b[_lightShade], t),
- _darkShade: Color.lerp(a[_darkShade], b[_darkShade], t),
- };
- }
-
@override
FlutterLogoDecoration lerpFrom(Decoration a, double t) {
assert(debugAssertIsValid());
@@ -199,8 +191,8 @@
if (other is! FlutterLogoDecoration)
return false;
final FlutterLogoDecoration typedOther = other;
- return swatch[_lightShade] == typedOther.swatch[_lightShade]
- && swatch[_darkShade] == typedOther.swatch[_darkShade]
+ return lightColor == typedOther.lightColor
+ && darkColor == typedOther.darkColor
&& textColor == typedOther.textColor
&& _position == typedOther._position
&& _opacity == typedOther._opacity;
@@ -210,8 +202,8 @@
int get hashCode {
assert(debugAssertIsValid());
return hashValues(
- swatch[_lightShade],
- swatch[_darkShade],
+ lightColor,
+ darkColor,
textColor,
_position,
_opacity
@@ -221,9 +213,7 @@
@override
String toString([String prefix = '', String prefixIndent ]) {
final String extra = _inTransition ? ', transition $_position:$_opacity' : '';
- if (swatch == null)
- return '$prefix$runtimeType(null, $style$extra)';
- return '$prefix$runtimeType(${swatch[_lightShade]}/${swatch[_darkShade]} on $textColor, $style$extra)';
+ return '$prefix$runtimeType($lightColor/$darkColor on $textColor, $style$extra)';
}
}
@@ -279,11 +269,11 @@
// Set up the styles.
final Paint lightPaint = new Paint()
- ..color = _config.swatch[_lightShade].withOpacity(0.8);
+ ..color = _config.lightColor.withOpacity(0.8);
final Paint mediumPaint = new Paint()
- ..color = _config.swatch[_lightShade];
+ ..color = _config.lightColor;
final Paint darkPaint = new Paint()
- ..color = _config.swatch[_darkShade];
+ ..color = _config.darkColor;
final ui.Gradient triangleGradient = new ui.Gradient.linear(
const <Point>[
diff --git a/packages/flutter/test/material/colors_test.dart b/packages/flutter/test/material/colors_test.dart
new file mode 100644
index 0000000..cfab64e
--- /dev/null
+++ b/packages/flutter/test/material/colors_test.dart
@@ -0,0 +1,86 @@
+// Copyright 2017 The Chromium Authors. 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:test/test.dart';
+
+import 'package:flutter/material.dart';
+
+const List<int> primaryKeys = const <int>[50, 100, 200, 300, 400, 500, 600, 700, 800, 900];
+const List<int> accentKeys = const <int>[100, 200, 400, 700];
+
+void main() {
+ test('MaterialColor basic functionality', () {
+ final MaterialColor color = new MaterialColor(
+ 500,
+ const <int, Color>{
+ 50: const Color(50),
+ 100: const Color(100),
+ 200: const Color(200),
+ 300: const Color(300),
+ 400: const Color(400),
+ 500: const Color(500),
+ 600: const Color(600),
+ 700: const Color(700),
+ 800: const Color(800),
+ 900: const Color(900),
+ },
+ );
+
+ expect(color.value, 500);
+
+ expect(color[50].value, 50);
+ expect(color[100].value, 100);
+ expect(color[200].value, 200);
+ expect(color[300].value, 300);
+ expect(color[400].value, 400);
+ expect(color[500].value, 500);
+ expect(color[600].value, 600);
+ expect(color[700].value, 700);
+ expect(color[800].value, 800);
+ expect(color[900].value, 900);
+
+ expect(color.shade50.value, 50);
+ expect(color.shade100.value, 100);
+ expect(color.shade200.value, 200);
+ expect(color.shade300.value, 300);
+ expect(color.shade400.value, 400);
+ expect(color.shade500.value, 500);
+ expect(color.shade600.value, 600);
+ expect(color.shade700.value, 700);
+ expect(color.shade800.value, 800);
+ expect(color.shade900.value, 900);
+ });
+
+ test('Colors swatches do not contain duplicates', () {
+ for (MaterialColor color in Colors.primaries)
+ expect(primaryKeys.map((int key) => color[key]).toSet().length, primaryKeys.length);
+
+ expect(primaryKeys.map((int key) => Colors.grey[key]).toSet().length, primaryKeys.length);
+
+ for (MaterialAccentColor color in Colors.accents)
+ expect(accentKeys.map((int key) => color[key]).toSet().length, accentKeys.length);
+ });
+
+ test('All color swatch colors are opaque and equal their primary color', () {
+ for (MaterialColor color in Colors.primaries) {
+ expect(color.value, color.shade500.value);
+ for (int key in primaryKeys) {
+ expect(color[key].alpha, 0xFF);
+ }
+ }
+
+ expect(Colors.grey.value, Colors.grey.shade500.value);
+ for (int key in primaryKeys) {
+ expect(Colors.grey[key].alpha, 0xFF);
+ }
+
+ for (MaterialAccentColor color in Colors.accents) {
+ expect(color.value, color.shade200.value);
+ for (int key in accentKeys) {
+ expect(color[key].alpha, 0xFF);
+ }
+ }
+ });
+
+}