generateThemeName function

String generateThemeName({
  1. required Rng rng,
  2. required int accentArgb,
  3. required ThemeFamily family,
  4. required bool dark,
})

The name of a theme: deterministic from the name stream rng, the final palette's accentArgb (operator face), the family and whether it is dark.

Implementation

String generateThemeName({
  required Rng rng,
  required int accentArgb,
  required ThemeFamily family,
  required bool dark,
}) {
  final colours = colourWordsFor(accentArgb);
  final materials = materialWordsFor(family);
  final places = dark ? darkTimePlaceWords : lightTimePlaceWords;
  for (var attempt = 0; attempt < 16; attempt++) {
    final pattern =
        NamePattern.values[rng.pickWeighted([
          for (final p in NamePattern.values) p.weight,
        ])];
    final (first, second) = switch (pattern) {
      NamePattern.colourMaterial => (rng.pick(colours), rng.pick(materials)),
      NamePattern.moodColour => (rng.pick(moodWords), rng.pick(colours)),
      NamePattern.colourTimePlace => (rng.pick(colours), rng.pick(places)),
      NamePattern.materialMoodNoun => (
        rng.pick(materials),
        rng.pick(moodNouns),
      ),
    };
    if (!isBlockedName(first, second)) return '$first $second';
  }
  return '${colours.first} ${materials.first}';
}