decode static method
Decodes exactly 13 bytes back into an SVG string.
Implementation
static String decode(Uint8List bytes) {
if (bytes.length < 13) {
final padded = Uint8List(13);
for (int i = 0; i < bytes.length; i++) padded[i] = bytes[i];
bytes = padded;
}
final reader = _BitReader(bytes);
int styleIdx = reader.read(3);
AvatarStyle style = styleIdx < AvatarStyle.values.length ? AvatarStyle.values[styleIdx] : AvatarStyle.openPeeps;
switch (style) {
case AvatarStyle.openPeeps:
int headIdx = reader.read(_bits(OpenPeepsAssets.head.length));
int faceIdx = reader.read(_bits(OpenPeepsAssets.face.length));
int facialHairIdx = reader.read(_bits(OpenPeepsAssets.facialHair.length + 1));
int accIdx = reader.read(_bits(OpenPeepsAssets.accessories.length + 1));
int maskIdx = reader.read(_bits(OpenPeepsAssets.mask.length + 1));
int skinColIdx = reader.read(7);
int clothColIdx = reader.read(7);
int hairColIdx = reader.read(7);
return SvgEngine.generateSvg(
style: style,
headOrHairKey: _keyAt(OpenPeepsAssets.head, headIdx),
faceOrEyesKey: _keyAt(OpenPeepsAssets.face, faceIdx),
facialHairKey: facialHairIdx == OpenPeepsAssets.facialHair.length ? null : _keyAt(OpenPeepsAssets.facialHair, facialHairIdx),
accessoriesKey: accIdx == OpenPeepsAssets.accessories.length ? null : _keyAt(OpenPeepsAssets.accessories, accIdx),
maskKey: maskIdx == OpenPeepsAssets.mask.length ? null : _keyAt(OpenPeepsAssets.mask, maskIdx),
skinColor: _colorAt(skinColIdx),
clothingColor: _colorAt(clothColIdx),
hairColor: _colorAt(hairColIdx),
);
case AvatarStyle.personas:
int hairIdx = reader.read(_bits(PersonasAssets.hair.length));
int eyesIdx = reader.read(_bits(PersonasAssets.eyes.length));
int bodyIdx = reader.read(_bits(PersonasAssets.body.length));
int mouthIdx = reader.read(_bits(PersonasAssets.mouth.length));
int noseIdx = reader.read(_bits(PersonasAssets.nose.length));
int facialHairIdx = reader.read(_bits(PersonasAssets.facialHair.length + 1));
int skinColIdx = reader.read(7);
int clothColIdx = reader.read(7);
int hairColIdx = reader.read(7);
return SvgEngine.generateSvg(
style: style,
headOrHairKey: _keyAt(PersonasAssets.hair, hairIdx),
faceOrEyesKey: _keyAt(PersonasAssets.eyes, eyesIdx),
bodyKey: _keyAt(PersonasAssets.body, bodyIdx),
mouthKey: _keyAt(PersonasAssets.mouth, mouthIdx),
noseKey: _keyAt(PersonasAssets.nose, noseIdx),
facialHairKey: facialHairIdx == PersonasAssets.facialHair.length ? null : _keyAt(PersonasAssets.facialHair, facialHairIdx),
skinColor: _colorAt(skinColIdx),
clothingColor: _colorAt(clothColIdx),
hairColor: _colorAt(hairColIdx),
);
case AvatarStyle.micah:
int hairIdx = reader.read(_bits(MicahAssets.hair.length));
int eyesIdx = reader.read(_bits(MicahAssets.eyes.length));
int eyeBrowsIdx = reader.read(_bits(MicahAssets.eyebrows.length));
int earsIdx = reader.read(_bits(MicahAssets.ears.length));
int shirtIdx = reader.read(_bits(MicahAssets.shirt.length));
int noseIdx = reader.read(_bits(MicahAssets.nose.length));
int mouthIdx = reader.read(_bits(MicahAssets.mouth.length));
int facialHairIdx = reader.read(_bits(MicahAssets.facialHair.length + 1));
int glassesIdx = reader.read(_bits(MicahAssets.glasses.length + 1));
int earringsIdx = reader.read(_bits(MicahAssets.earrings.length + 1));
int skinColIdx = reader.read(7);
int hairColIdx = reader.read(7);
int shirtColIdx = reader.read(7);
int glassesColIdx = reader.read(7);
int earringColIdx = reader.read(7);
int shadowColIdx = reader.read(7);
return SvgEngine.generateSvg(
style: style,
headOrHairKey: _keyAt(MicahAssets.hair, hairIdx),
faceOrEyesKey: _keyAt(MicahAssets.eyes, eyesIdx),
eyebrowsKey: _keyAt(MicahAssets.eyebrows, eyeBrowsIdx),
earsKey: _keyAt(MicahAssets.ears, earsIdx),
bodyKey: _keyAt(MicahAssets.shirt, shirtIdx),
noseKey: _keyAt(MicahAssets.nose, noseIdx),
mouthKey: _keyAt(MicahAssets.mouth, mouthIdx),
facialHairKey: facialHairIdx == MicahAssets.facialHair.length ? null : _keyAt(MicahAssets.facialHair, facialHairIdx),
glassesKey: glassesIdx == MicahAssets.glasses.length ? null : _keyAt(MicahAssets.glasses, glassesIdx),
earringsKey: earringsIdx == MicahAssets.earrings.length ? null : _keyAt(MicahAssets.earrings, earringsIdx),
skinColor: _colorAt(skinColIdx),
hairColor: _colorAt(hairColIdx),
clothingColor: _colorAt(shirtColIdx),
glassesColor: _colorAt(glassesColIdx),
earringColor: _colorAt(earringColIdx),
eyeShadowColor: _colorAt(shadowColIdx),
);
case AvatarStyle.toonhead:
int hairIdx = reader.read(_bits(ToonHeadAssets.hair.length));
int eyesIdx = reader.read(_bits(ToonHeadAssets.eyes.length));
int mouthIdx = reader.read(_bits(ToonHeadAssets.mouth.length));
int clothesIdx = reader.read(_bits(ToonHeadAssets.clothes.length));
int eyebrowsIdx = reader.read(_bits(ToonHeadAssets.eyebrows.length));
int rearHairIdx = reader.read(_bits(ToonHeadAssets.rearHair.length + 1));
int beardIdx = reader.read(_bits(ToonHeadAssets.beard.length + 1));
int skinColIdx = reader.read(7);
int hairColIdx = reader.read(7);
int clothColIdx = reader.read(7);
return SvgEngine.generateSvg(
style: style,
headOrHairKey: _keyAt(ToonHeadAssets.hair, hairIdx),
faceOrEyesKey: _keyAt(ToonHeadAssets.eyes, eyesIdx),
mouthKey: _keyAt(ToonHeadAssets.mouth, mouthIdx),
bodyKey: _keyAt(ToonHeadAssets.clothes, clothesIdx),
eyebrowsKey: _keyAt(ToonHeadAssets.eyebrows, eyebrowsIdx),
rearHairKey: rearHairIdx == ToonHeadAssets.rearHair.length ? null : _keyAt(ToonHeadAssets.rearHair, rearHairIdx),
facialHairKey: beardIdx == ToonHeadAssets.beard.length ? null : _keyAt(ToonHeadAssets.beard, beardIdx),
skinColor: _colorAt(skinColIdx),
hairColor: _colorAt(hairColIdx),
clothingColor: _colorAt(clothColIdx),
);
case AvatarStyle.avataaars:
int topIdx = reader.read(_bits(AvataaarsAssets.top.length));
int eyesIdx = reader.read(_bits(AvataaarsAssets.eyes.length));
int eyebrowsIdx = reader.read(_bits(AvataaarsAssets.eyebrows.length));
int mouthIdx = reader.read(_bits(AvataaarsAssets.mouth.length));
int clothingIdx = reader.read(_bits(AvataaarsAssets.clothing.length));
int graphicIdx = reader.read(_bits(AvataaarsAssets.clothingGraphic.length));
int styleIdx2 = reader.read(_bits(AvataaarsAssets.style.length));
int facialHairIdx = reader.read(_bits(AvataaarsAssets.facialHair.length + 1));
int accIdx = reader.read(_bits(AvataaarsAssets.accessories.length + 1));
int skinColIdx = reader.read(7);
int clothColIdx = reader.read(7);
int hairColIdx = reader.read(7);
int facialHairColIdx = reader.read(7);
int accColIdx = reader.read(7);
int hatColIdx = reader.read(7);
int bgColIdx = reader.read(7);
return SvgEngine.generateSvg(
style: style,
headOrHairKey: _keyAt(AvataaarsAssets.top, topIdx),
faceOrEyesKey: _keyAt(AvataaarsAssets.eyes, eyesIdx),
eyebrowsKey: _keyAt(AvataaarsAssets.eyebrows, eyebrowsIdx),
mouthKey: _keyAt(AvataaarsAssets.mouth, mouthIdx),
bodyKey: _keyAt(AvataaarsAssets.clothing, clothingIdx),
clothingGraphicKey: _keyAt(AvataaarsAssets.clothingGraphic, graphicIdx),
avataaarStyleKey: _keyAt(AvataaarsAssets.style, styleIdx2),
facialHairKey: facialHairIdx == AvataaarsAssets.facialHair.length ? null : _keyAt(AvataaarsAssets.facialHair, facialHairIdx),
accessoriesKey: accIdx == AvataaarsAssets.accessories.length ? null : _keyAt(AvataaarsAssets.accessories, accIdx),
skinColor: _colorAt(skinColIdx),
clothingColor: _colorAt(clothColIdx),
hairColor: _colorAt(hairColIdx),
facialHairColor: _colorAt(facialHairColIdx),
accessoriesColor: _colorAt(accColIdx),
hatColor: _colorAt(hatColIdx),
backgroundColor: _colorAt(bgColIdx),
);
case AvatarStyle.miniavs:
int bodyIdx = reader.read(_bits(MiniavsAssets.body.length));
int eyesIdx = reader.read(_bits(MiniavsAssets.eyes.length));
int mouthIdx = reader.read(_bits(MiniavsAssets.mouth.length));
int headIdx = reader.read(_bits(MiniavsAssets.head.length));
int mustacheIdx = reader.read(_bits(MiniavsAssets.mustache.length + 1));
int glassesIdx = reader.read(_bits(MiniavsAssets.glasses.length + 1));
int hairIdx = reader.read(_bits(MiniavsAssets.hair.length));
int skinColIdx = reader.read(7);
int clothColIdx = reader.read(7);
int hairColIdx = reader.read(7);
return SvgEngine.generateSvg(
style: style,
headOrHairKey: _keyAt(MiniavsAssets.hair, hairIdx),
noseKey: _keyAt(MiniavsAssets.head, headIdx),
faceOrEyesKey: _keyAt(MiniavsAssets.eyes, eyesIdx),
bodyKey: _keyAt(MiniavsAssets.body, bodyIdx),
mouthKey: _keyAt(MiniavsAssets.mouth, mouthIdx),
facialHairKey: mustacheIdx == MiniavsAssets.mustache.length ? null : _keyAt(MiniavsAssets.mustache, mustacheIdx),
glassesKey: glassesIdx == MiniavsAssets.glasses.length ? null : _keyAt(MiniavsAssets.glasses, glassesIdx),
skinColor: _colorAt(skinColIdx),
clothingColor: _colorAt(clothColIdx),
hairColor: _colorAt(hairColIdx),
);
}
}