Получить цвет для каждого отправителя сообщения случайным образом (например, ha sh) - PullRequest
0 голосов
/ 27 мая 2020

Я работаю над приложением, которое (среди многих других функций) получает сообщения, отправленные ученику из школьной административной системы Венгрии (ekreta.hu).

Я хотел бы иметь изображения профиля для отправителей этих сообщений, но API не предоставляет их, поэтому я пришел к следующему: как и в Gmail, первая буква их имени появляется в случайно окрашенном кружке.

Мой вопрос is: Как получить случайный цвет, но уникальный для каждого отправителя? Он должен вести себя как ha sh, чтобы генерировать тот же цвет из одного и того же ввода (от того же имени отправителя).

Вот пример макета

Ответы [ 2 ]

0 голосов
/ 27 мая 2020

Я понял это из JavaScript ответа, перевел на Дарт. Это генерирует ha sh из заданной строки и возвращает Dart Color.

Color stringToColor(String str) {
  int hash = 0;

  for (int i = 0; i < str.length; i++) {
    hash = str.codeUnitAt(i) + ((hash << 5) - hash);
  }

  String color = '#';

  for (int i = 0; i < 3; i++) {
    var value = (hash >> (i * 8)) & 0xFF;
    color += value.toRadixString(16);
  }

  color += "0";
  color = color.substring(0, 7);

  print(color);

  return colorFromHex(color);
}
0 голосов
/ 27 мая 2020

вы, вероятно, храните эти сообщения где-то, например, gotMessages. Скажем, ReceiveMessages - это карта с ключом отправителя и значениями, тогда вы можете присвоить этому отправителю случайный цвет при первой отправке сообщения, сохранить его как значение для этого ключа и использовать тот же цвет после.

CircleAvatar( color: (receivedMessages[sender] == null) ? randomColor : receivedMessages[sender][color],  child: Message(), ... other attributes )

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...