encodeSteeredShareCode function
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);
}