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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为每个不同的消息发件人随机获取颜色(如哈希)相关的知识,希望对你有一定的参考价值。

我正在开发一个应用程序(其中包括许多其他功能),它从匈牙利的学校管理系统(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。这将从给定的字符串生成哈希值,并返回Dart颜色。

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

以上是关于为每个不同的消息发件人随机获取颜色(如哈希)的主要内容,如果未能解决你的问题,请参考以下文章

不断获取发送消息所需的发件人(返回路径、发件人或发件人)

如何获取带有发件人时间的时间戳消息

在 Laravel 中获取每个用户的最新消息(行)

多个收件人的 SMIME 解密

消息总线:发件人必须等待来自多个收件人的确认

outlook怎么设置邮件颜色