encodeSteeredShareCode function

String encodeSteeredShareCode(
  1. int familyId,
  2. int engineVersion,
  3. int seed,
  4. ThemeIntent intent, {
  5. bool centred = false,
})

Encodes a steered theme as XXXXX-XXXXX-XXXXX-XXXXX-XXXXX: familyId 0–29, engineVersion 0–63, seed modulo 2^32, and intent's generation fields (families and name are not stored).

Implementation

String encodeSteeredShareCode(
  int familyId,
  int engineVersion,
  int seed,
  ThemeIntent intent, {
  bool centred = false,
}) {
  if (familyId < 0 || familyId >= shareFamilyReserved) {
    throw RangeError.range(familyId, 0, shareFamilyReserved - 1, 'familyId');
  }
  if (engineVersion < 0 || engineVersion > 63) {
    throw RangeError.range(engineVersion, 0, 63, 'engineVersion');
  }
  final bits = <int>[];
  _pushBits(bits, steeredCodeFormat, 4);
  _pushBits(bits, familyId, 5);
  _pushBits(bits, engineVersion, 6);
  _pushBits(bits, seed & 0xFFFFFFFF, 32);
  _pushBits(bits, centred ? 1 : 0, 1);
  _pushBits(bits, switch (intent.brightness) {
    null => 0,
    ThemeBrightness.light => 1,
    ThemeBrightness.dark => 2,
  }, 2);
  _pushBits(bits, intent.chroma == null ? 0 : intent.chroma!.index + 1, 2);
  final h = intent.harmony;
  _pushBits(bits, h == null ? 0 : steeredHarmonies.indexOf(h) + 1, 3);
  final colors = intent.colors;
  _pushBits(bits, colors.length, 2);
  for (var i = 0; i < ThemeIntent.maxColors; i++) {
    _pushBits(bits, i < colors.length ? colors[i].code : 0, 5);
  }
  final hr = intent.hueRange;
  _pushBits(bits, hr == null ? 0 : 1, 1);
  _pushBits(bits, hr?.$1 ?? 0, 9);
  _pushBits(bits, hr?.$2 ?? 0, 9);
  _pushBits(bits, 0, 18);
  _pushBits(bits, crc16(bits), 16);
  return _symbols(bits);
}