sortBy method

void sortBy(
  1. ColorSortingProperty property
)

Sorts the palette by property.

property must not be null.

Implementation

void sortBy(ColorSortingProperty property) {
  if (colors.length <= 1) return;

  if (property == ColorSortingProperty.similarity ||
      property == ColorSortingProperty.difference) {
    _sortByDifference(property);
    return;
  }

  colors.sort((a, b) {
    late num value1;
    late num value2;
    var inverse = false;

    switch (property) {
      case ColorSortingProperty.brightest:
        value1 = a.toHspColor().perceivedBrightness;
        value2 = b.toHspColor().perceivedBrightness;
        inverse = true;
        break;
      case ColorSortingProperty.dimmest:
        value1 = a.toHspColor().perceivedBrightness;
        value2 = b.toHspColor().perceivedBrightness;
        break;
      case ColorSortingProperty.lightest:
        value1 = a.toHslColor().lightness;
        value2 = b.toHslColor().lightness;
        inverse = true;
        break;
      case ColorSortingProperty.darkest:
        value1 = a.toHslColor().lightness;
        value2 = b.toHslColor().lightness;
        break;
      case ColorSortingProperty.mostIntense:
        value1 = a.toHsiColor().intensity;
        value2 = b.toHsiColor().intensity;
        inverse = true;
        break;
      case ColorSortingProperty.leastIntense:
        value1 = a.toHsiColor().intensity;
        value2 = b.toHsiColor().intensity;
        break;
      case ColorSortingProperty.deepest:
        value1 = a.saturation;
        value2 = b.saturation;
        inverse = true;
        break;
      case ColorSortingProperty.dullest:
        value1 = a.saturation;
        value2 = b.saturation;
        break;
      case ColorSortingProperty.richest:
        var color1 = a.toHsbColor();
        var color2 = b.toHsbColor();
        value1 = color1.saturation + color1.brightness;
        value2 = color2.saturation + color2.brightness;
        inverse = true;
        break;
      case ColorSortingProperty.muted:
        var color1 = a.toHsbColor();
        var color2 = b.toHsbColor();
        value1 = color1.saturation + color1.brightness;
        value2 = color2.saturation + color2.brightness;
        break;
      case ColorSortingProperty.red:
        value1 = a.hue.calculateDistance(0);
        value2 = b.hue.calculateDistance(0);
        break;
      case ColorSortingProperty.redOrange:
        value1 = a.hue.calculateDistance(30);
        value2 = b.hue.calculateDistance(30);
        break;
      case ColorSortingProperty.orange:
        value1 = a.hue.calculateDistance(60);
        value2 = b.hue.calculateDistance(60);
        break;
      case ColorSortingProperty.yellowOrange:
        value1 = a.hue.calculateDistance(90);
        value2 = b.hue.calculateDistance(90);
        break;
      case ColorSortingProperty.yellow:
        value1 = a.hue.calculateDistance(120);
        value2 = b.hue.calculateDistance(120);
        break;
      case ColorSortingProperty.yellowGreen:
        value1 = a.hue.calculateDistance(150);
        value2 = b.hue.calculateDistance(150);
        break;
      case ColorSortingProperty.green:
        value1 = a.hue.calculateDistance(180);
        value2 = b.hue.calculateDistance(180);
        break;
      case ColorSortingProperty.cyan:
        value1 = a.hue.calculateDistance(210);
        value2 = b.hue.calculateDistance(210);
        break;
      case ColorSortingProperty.blue:
        value1 = a.hue.calculateDistance(240);
        value2 = b.hue.calculateDistance(240);
        break;
      case ColorSortingProperty.blueViolet:
        value1 = a.hue.calculateDistance(270);
        value2 = b.hue.calculateDistance(270);
        break;
      case ColorSortingProperty.violet:
        value1 = a.hue.calculateDistance(300);
        value2 = b.hue.calculateDistance(300);
        break;
      case ColorSortingProperty.magenta:
        value1 = a.hue.calculateDistance(330);
        value2 = b.hue.calculateDistance(330);
        break;
      default:
        break;
    }

    return inverse ? value2.compareTo(value1) : value1.compareTo(value2);
  });
}