You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
35 lines
1.4 KiB
35 lines
1.4 KiB
2 years ago
|
import 'package:flutter/material.dart';
|
||
|
|
||
|
MaterialColor getSwatch(Color color) {
|
||
|
final hslColor = HSLColor.fromColor(color);
|
||
|
final lightness = hslColor.lightness;
|
||
|
|
||
|
/// if [500] is the default color, there are at LEAST five
|
||
|
/// steps below [500]. (i.e. 400, 300, 200, 100, 50.) A
|
||
|
/// divisor of 5 would mean [50] is a lightness of 1.0 or
|
||
|
/// a color of #ffffff. A value of six would be near white
|
||
|
/// but not quite.
|
||
|
const lowDivisor = 6;
|
||
|
|
||
|
/// if [500] is the default color, there are at LEAST four
|
||
|
/// steps above [500]. A divisor of 4 would mean [900] is
|
||
|
/// a lightness of 0.0 or color of #000000
|
||
|
const highDivisor = 5;
|
||
|
|
||
|
final lowStep = (1.0 - lightness) / lowDivisor;
|
||
|
final highStep = lightness / highDivisor;
|
||
|
|
||
|
return MaterialColor(color.value, {
|
||
|
50: (hslColor.withLightness(lightness + (lowStep * 5))).toColor(),
|
||
|
100: (hslColor.withLightness(lightness + (lowStep * 4))).toColor(),
|
||
|
200: (hslColor.withLightness(lightness + (lowStep * 3))).toColor(),
|
||
|
300: (hslColor.withLightness(lightness + (lowStep * 2))).toColor(),
|
||
|
400: (hslColor.withLightness(lightness + lowStep)).toColor(),
|
||
|
500: (hslColor.withLightness(lightness)).toColor(),
|
||
|
600: (hslColor.withLightness(lightness - highStep)).toColor(),
|
||
|
700: (hslColor.withLightness(lightness - (highStep * 2))).toColor(),
|
||
|
800: (hslColor.withLightness(lightness - (highStep * 3))).toColor(),
|
||
|
900: (hslColor.withLightness(lightness - (highStep * 4))).toColor(),
|
||
|
});
|
||
|
}
|