随机获取每个不同消息发件人的颜色(如哈希)

Get color for each different message sender randomly (like a hash)

我正在开发一个应用程序,该应用程序(以及许多其他功能)从匈牙利的学校管理系统 (ekreta.hu) 获取发送给学生的消息。

我想为这些邮件的发件人提供个人资料图片,但 API 没有提供,所以这就是我想出的:类似于 Gmail,首字母他们的名字出现在随机颜色的圆圈上。

我的问题是:如何获得随机但对每个发件人来说都是唯一的颜色?它应该表现得像一个散列,所以它会从相同的输入(来自相同的发件人姓名)生成相同的颜色。

Here's an example of the layout

您可能将这些消息保存在诸如 receivedMessages 之类的地方。假设 receivedMessages 是一个带有发件人键和值的映射,那么您可以在发件人第一次发送消息时为该发件人提供随机颜色,将其保存为该键的值,然后使用相同的颜色。

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

我从 JavaScript 的答案中找出答案,并将其翻译成 Dart。 这会根据给定的字符串和 returns 飞镖颜色生成哈希。

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