multiavatar function

String multiavatar(
  1. String string, {
  2. bool transparentBackground = false,
})

Implementation

String multiavatar(String string, {bool transparentBackground = false}) {
  string += '';

  String hash = '';
  if (string.length == 0) return hash;

  List<int> bytes1 = utf8.encode(string);
  Digest sha256Hash = sha256.convert(bytes1);
  String sha256Numbers =
      sha256Hash.toString().replaceAll(RegExp(r'[^0-9]'), '');

  hash = sha256Numbers.substring(0, 12);

  Map<dynamic, dynamic> p = {};

  p['env'] = hash[0] + '' + hash[1];
  p['env'] = ((47 / 100) * int.parse(p['env'])).round().toString() + '';

  p['clo'] = hash[2] + '' + hash[3];
  p['clo'] = ((47 / 100) * int.parse(p['clo'])).round().toString() + '';

  p['head'] = hash[4] + '' + hash[5];
  p['head'] = ((47 / 100) * int.parse(p['head'])).round().toString() + '';

  p['mouth'] = hash[6] + '' + hash[7];
  p['mouth'] = ((47 / 100) * int.parse(p['mouth'])).round().toString() + '';

  p['eyes'] = hash[8] + '' + hash[9];
  p['eyes'] = ((47 / 100) * int.parse(p['eyes'])).round().toString() + '';

  p['top'] = hash[10] + '' + hash[11];
  p['top'] = ((47 / 100) * int.parse(p['top'])).round().toString() + '';

  for (var part in p.keys) {
    var nr = p[part];

    if (int.parse(nr) > 31) {
      nr = (int.parse(nr) - 32).toString() + '';
      if (nr.length == 1) nr = '0' + nr;
      p[part] = nr + 'C';
    } else if (int.parse(nr) > 15) {
      nr = (int.parse(nr) - 16).toString() + '';
      if (nr.length == 1) nr = '0' + nr;
      p[part] = nr + 'B';
    } else {
      if ((nr + '').length == 1)
        p[part] = '0' + nr + 'A';
      else
        p[part] = nr + 'A';
    }
  }

  String getFinal(part, partV, theme) {
    List<String?>? colors = _themes[partV]?[theme]?[part];
    String? svgString = _sP[partV]?[part];

    String regex = r"(#.*?;)";
    String resultFinal = svgString ?? "";

    final List<String?>? result = RegExp(regex)
        .allMatches(svgString ?? "")
        .toList()
        .map((e) => e.group(1))
        .toList();
    // print(result);

    for (var i = 0; i < (result?.length ?? 0);  i++) {
      // print("change: ${result[i]} ===> with: ${colors[i]}");
      resultFinal =
          resultFinal.replaceFirst(result?[i] ?? "", (colors?[i] ?? "") + ';');
    }

    return resultFinal;
  }

  Map<dynamic, dynamic> _final = {};

  for (var part in p.keys) {
    var partV = p[part].substring(0, 2);
    var theme = p[part].substring(2, 3);

    _final[part] = getFinal(part, partV, theme);
  }

  if (transparentBackground) _final['env'] = '';

  return (_svgStart +
      _final['env'] +
      _final['head'] +
      _final['clo'] +
      _final['top'] +
      _final['eyes'] +
      _final['mouth'] +
      _svgEnd);
}