addEmojiToRecentlyUsed method

Future<List<RecentEmoji>> addEmojiToRecentlyUsed({
  1. required Emoji emoji,
  2. Config config = const Config(),
})

Add an emoji to recently used list or increase its counter

Implementation

Future<List<RecentEmoji>> addEmojiToRecentlyUsed(
    {required Emoji emoji, Config config = const Config()}) async {
  // Remove emoji's skin tone in Recent-Category
  if (emoji.hasSkinTone) {
    emoji = removeSkinTone(emoji);
  }
  var recentEmoji = await getRecentEmojis();
  var recentEmojiIndex =
      recentEmoji.indexWhere((element) => element.emoji.emoji == emoji.emoji);
  if (recentEmojiIndex != -1) {
    // Already exist in recent list
    // Just update counter
    recentEmoji[recentEmojiIndex].counter++;
  } else if (recentEmoji.length == config.recentsLimit &&
      config.replaceEmojiOnLimitExceed) {
    // Replace latest emoji with the fresh one
    recentEmoji[recentEmoji.length - 1] = RecentEmoji(emoji, 1);
  } else {
    recentEmoji.add(RecentEmoji(emoji, 1));
  }
  // Sort by counter desc
  recentEmoji.sort((a, b) => b.counter - a.counter);
  // Limit entries to recentsLimit
  recentEmoji =
      recentEmoji.sublist(0, min(config.recentsLimit, recentEmoji.length));
  // save locally
  // final prefs = await SharedPreferences.getInstance();
  // prefs.setString('recent', jsonEncode(recentEmoji));
  SpUtil.putString('recent', jsonEncode(recentEmoji));

  return recentEmoji;
}