随机获取每个不同消息发件人的颜色(如哈希)
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);
}
我正在开发一个应用程序,该应用程序(以及许多其他功能)从匈牙利的学校管理系统 (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);
}