import 'package:flutter/material.dart'; import 'package:lottie/lottie.dart'; // animations from: https://googlefonts.github.io/noto-emoji-animation/ // from https://github.com/eitanliu/emoji_regex/tree/master RegExp emojiRegex() => RegExp( r'[#*0-9]\uFE0F?\u20E3|[\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u231A\u231B\u2328\u23CF\u23ED-\u23EF\u23F1\u23F2\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB\u25FC\u25FE\u2600-\u2604\u260E\u2611\u2614\u2615\u2618\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u2648-\u2653\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u267F\u2692\u2694-\u2697\u2699\u269B\u269C\u26A0\u26A7\u26AA\u26B0\u26B1\u26BD\u26BE\u26C4\u26C8\u26CF\u26D1\u26D3\u26E9\u26F0-\u26F5\u26F7\u26F8\u26FA\u2702\u2708\u2709\u270F\u2712\u2714\u2716\u271D\u2721\u2733\u2734\u2744\u2747\u2757\u2763\u27A1\u2934\u2935\u2B05-\u2B07\u2B1B\u2B1C\u2B55\u3030\u303D\u3297\u3299]\uFE0F?|[\u261D\u270C\u270D](?:\uFE0F|\uD83C[\uDFFB-\uDFFF])?|[\u270A\u270B](?:\uD83C[\uDFFB-\uDFFF])?|[\u23E9-\u23EC\u23F0\u23F3\u25FD\u2693\u26A1\u26AB\u26C5\u26CE\u26D4\u26EA\u26FD\u2705\u2728\u274C\u274E\u2753-\u2755\u2795-\u2797\u27B0\u27BF\u2B50]|\u26F9(?:\uFE0F|\uD83C[\uDFFB-\uDFFF])?(?:\u200D[\u2640\u2642]\uFE0F?)?|\u2764\uFE0F?(?:\u200D(?:\uD83D\uDD25|\uD83E\uDE79))?|\uD83C(?:[\uDC04\uDD70\uDD71\uDD7E\uDD7F\uDE02\uDE37\uDF21\uDF24-\uDF2C\uDF36\uDF7D\uDF96\uDF97\uDF99-\uDF9B\uDF9E\uDF9F\uDFCD\uDFCE\uDFD4-\uDFDF\uDFF5\uDFF7]\uFE0F?|[\uDF85\uDFC2\uDFC7](?:\uD83C[\uDFFB-\uDFFF])?|[\uDFC3\uDFC4\uDFCA](?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDFCB\uDFCC](?:\uFE0F|\uD83C[\uDFFB-\uDFFF])?(?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDCCF\uDD8E\uDD91-\uDD9A\uDE01\uDE1A\uDE2F\uDE32-\uDE36\uDE38-\uDE3A\uDE50\uDE51\uDF00-\uDF20\uDF2D-\uDF35\uDF37-\uDF7C\uDF7E-\uDF84\uDF86-\uDF93\uDFA0-\uDFC1\uDFC5\uDFC6\uDFC8\uDFC9\uDFCF-\uDFD3\uDFE0-\uDFF0\uDFF8-\uDFFF]|\uDDE6\uD83C[\uDDE8-\uDDEC\uDDEE\uDDF1\uDDF2\uDDF4\uDDF6-\uDDFA\uDDFC\uDDFD\uDDFF]|\uDDE7\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEF\uDDF1-\uDDF4\uDDF6-\uDDF9\uDDFB\uDDFC\uDDFE\uDDFF]|\uDDE8\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDEE\uDDF0-\uDDF5\uDDF7\uDDFA-\uDDFF]|\uDDE9\uD83C[\uDDEA\uDDEC\uDDEF\uDDF0\uDDF2\uDDF4\uDDFF]|\uDDEA\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDED\uDDF7-\uDDFA]|\uDDEB\uD83C[\uDDEE-\uDDF0\uDDF2\uDDF4\uDDF7]|\uDDEC\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEE\uDDF1-\uDDF3\uDDF5-\uDDFA\uDDFC\uDDFE]|\uDDED\uD83C[\uDDF0\uDDF2\uDDF3\uDDF7\uDDF9\uDDFA]|\uDDEE\uD83C[\uDDE8-\uDDEA\uDDF1-\uDDF4\uDDF6-\uDDF9]|\uDDEF\uD83C[\uDDEA\uDDF2\uDDF4\uDDF5]|\uDDF0\uD83C[\uDDEA\uDDEC-\uDDEE\uDDF2\uDDF3\uDDF5\uDDF7\uDDFC\uDDFE\uDDFF]|\uDDF1\uD83C[\uDDE6-\uDDE8\uDDEE\uDDF0\uDDF7-\uDDFB\uDDFE]|\uDDF2\uD83C[\uDDE6\uDDE8-\uDDED\uDDF0-\uDDFF]|\uDDF3\uD83C[\uDDE6\uDDE8\uDDEA-\uDDEC\uDDEE\uDDF1\uDDF4\uDDF5\uDDF7\uDDFA\uDDFF]|\uDDF4\uD83C\uDDF2|\uDDF5\uD83C[\uDDE6\uDDEA-\uDDED\uDDF0-\uDDF3\uDDF7-\uDDF9\uDDFC\uDDFE]|\uDDF6\uD83C\uDDE6|\uDDF7\uD83C[\uDDEA\uDDF4\uDDF8\uDDFA\uDDFC]|\uDDF8\uD83C[\uDDE6-\uDDEA\uDDEC-\uDDF4\uDDF7-\uDDF9\uDDFB\uDDFD-\uDDFF]|\uDDF9\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDED\uDDEF-\uDDF4\uDDF7\uDDF9\uDDFB\uDDFC\uDDFF]|\uDDFA\uD83C[\uDDE6\uDDEC\uDDF2\uDDF3\uDDF8\uDDFE\uDDFF]|\uDDFB\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDEE\uDDF3\uDDFA]|\uDDFC\uD83C[\uDDEB\uDDF8]|\uDDFD\uD83C\uDDF0|\uDDFE\uD83C[\uDDEA\uDDF9]|\uDDFF\uD83C[\uDDE6\uDDF2\uDDFC]|\uDFF3\uFE0F?(?:\u200D(?:\u26A7\uFE0F?|\uD83C\uDF08))?|\uDFF4(?:\u200D\u2620\uFE0F?|\uDB40\uDC67\uDB40\uDC62\uDB40(?:\uDC65\uDB40\uDC6E\uDB40\uDC67|\uDC73\uDB40\uDC63\uDB40\uDC74|\uDC77\uDB40\uDC6C\uDB40\uDC73)\uDB40\uDC7F)?)|\uD83D(?:[\uDC08\uDC26](?:\u200D\u2B1B)?|[\uDC3F\uDCFD\uDD49\uDD4A\uDD6F\uDD70\uDD73\uDD76-\uDD79\uDD87\uDD8A-\uDD8D\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDE8\uDDEF\uDDF3\uDDFA\uDECB\uDECD-\uDECF\uDEE0-\uDEE5\uDEE9\uDEF0\uDEF3]\uFE0F?|[\uDC42\uDC43\uDC46-\uDC50\uDC66\uDC67\uDC6B-\uDC6D\uDC72\uDC74-\uDC76\uDC78\uDC7C\uDC83\uDC85\uDC8F\uDC91\uDCAA\uDD7A\uDD95\uDD96\uDE4C\uDE4F\uDEC0\uDECC](?:\uD83C[\uDFFB-\uDFFF])?|[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6](?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDD74\uDD90](?:\uFE0F|\uD83C[\uDFFB-\uDFFF])?|[\uDC00-\uDC07\uDC09-\uDC14\uDC16-\uDC25\uDC27-\uDC3A\uDC3C-\uDC3E\uDC40\uDC44\uDC45\uDC51-\uDC65\uDC6A\uDC79-\uDC7B\uDC7D-\uDC80\uDC84\uDC88-\uDC8E\uDC90\uDC92-\uDCA9\uDCAB-\uDCFC\uDCFF-\uDD3D\uDD4B-\uDD4E\uDD50-\uDD67\uDDA4\uDDFB-\uDE2D\uDE2F-\uDE34\uDE37-\uDE44\uDE48-\uDE4A\uDE80-\uDEA2\uDEA4-\uDEB3\uDEB7-\uDEBF\uDEC1-\uDEC5\uDED0-\uDED2\uDED5-\uDED7\uDEDC-\uDEDF\uDEEB\uDEEC\uDEF4-\uDEFC\uDFE0-\uDFEB\uDFF0]|\uDC15(?:\u200D\uD83E\uDDBA)?|\uDC3B(?:\u200D\u2744\uFE0F?)?|\uDC41\uFE0F?(?:\u200D\uD83D\uDDE8\uFE0F?)?|\uDC68(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDC68\uDC69]\u200D\uD83D(?:\uDC66(?:\u200D\uD83D\uDC66)?|\uDC67(?:\u200D\uD83D[\uDC66\uDC67])?)|[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC66(?:\u200D\uD83D\uDC66)?|\uDC67(?:\u200D\uD83D[\uDC66\uDC67])?)|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C(?:\uDFFB(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF-\uDDB3\uDDBC\uDDBD]|\uDD1D\u200D\uD83D\uDC68\uD83C[\uDFFC-\uDFFF])))?|\uDFFC(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF-\uDDB3\uDDBC\uDDBD]|\uDD1D\u200D\uD83D\uDC68\uD83C[\uDFFB\uDFFD-\uDFFF])))?|\uDFFD(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF-\uDDB3\uDDBC\uDDBD]|\uDD1D\u200D\uD83D\uDC68\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])))?|\uDFFE(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF-\uDDB3\uDDBC\uDDBD]|\uDD1D\u200D\uD83D\uDC68\uD83C[\uDFFB-\uDFFD\uDFFF])))?|\uDFFF(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF-\uDDB3\uDDBC\uDDBD]|\uDD1D\u200D\uD83D\uDC68\uD83C[\uDFFB-\uDFFE])))?))?|\uDC69(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?[\uDC68\uDC69]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC66(?:\u200D\uD83D\uDC66)?|\uDC67(?:\u200D\uD83D[\uDC66\uDC67])?|\uDC69\u200D\uD83D(?:\uDC66(?:\u200D\uD83D\uDC66)?|\uDC67(?:\u200D\uD83D[\uDC66\uDC67])?))|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C(?:\uDFFB(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF-\uDDB3\uDDBC\uDDBD]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFC-\uDFFF])))?|\uDFFC(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF-\uDDB3\uDDBC\uDDBD]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFB\uDFFD-\uDFFF])))?|\uDFFD(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF-\uDDB3\uDDBC\uDDBD]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])))?|\uDFFE(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF-\uDDB3\uDDBC\uDDBD]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFB-\uDFFD\uDFFF])))?|\uDFFF(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF-\uDDB3\uDDBC\uDDBD]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFB-\uDFFE])))?))?|\uDC6F(?:\u200D[\u2640\u2642]\uFE0F?)?|\uDD75(?:\uFE0F|\uD83C[\uDFFB-\uDFFF])?(?:\u200D[\u2640\u2642]\uFE0F?)?|\uDE2E(?:\u200D\uD83D\uDCA8)?|\uDE35(?:\u200D\uD83D\uDCAB)?|\uDE36(?:\u200D\uD83C\uDF2B\uFE0F?)?)|\uD83E(?:[\uDD0C\uDD0F\uDD18-\uDD1F\uDD30-\uDD34\uDD36\uDD77\uDDB5\uDDB6\uDDBB\uDDD2\uDDD3\uDDD5\uDEC3-\uDEC5\uDEF0\uDEF2-\uDEF8](?:\uD83C[\uDFFB-\uDFFF])?|[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD](?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDDDE\uDDDF](?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDD0D\uDD0E\uDD10-\uDD17\uDD20-\uDD25\uDD27-\uDD2F\uDD3A\uDD3F-\uDD45\uDD47-\uDD76\uDD78-\uDDB4\uDDB7\uDDBA\uDDBC-\uDDCC\uDDD0\uDDE0-\uDDFF\uDE70-\uDE7C\uDE80-\uDE88\uDE90-\uDEBD\uDEBF-\uDEC2\uDECE-\uDEDB\uDEE0-\uDEE8]|\uDD3C(?:\u200D[\u2640\u2642]\uFE0F?|\uD83C[\uDFFB-\uDFFF])?|\uDDD1(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF-\uDDB3\uDDBC\uDDBD]|\uDD1D\u200D\uD83E\uDDD1))|\uD83C(?:\uDFFB(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFC-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF-\uDDB3\uDDBC\uDDBD]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF])))?|\uDFFC(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFB\uDFFD-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF-\uDDB3\uDDBC\uDDBD]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF])))?|\uDFFD(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF-\uDDB3\uDDBC\uDDBD]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF])))?|\uDFFE(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFB-\uDFFD\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF-\uDDB3\uDDBC\uDDBD]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF])))?|\uDFFF(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFB-\uDFFE]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF-\uDDB3\uDDBC\uDDBD]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF])))?))?|\uDEF1(?:\uD83C(?:\uDFFB(?:\u200D\uD83E\uDEF2\uD83C[\uDFFC-\uDFFF])?|\uDFFC(?:\u200D\uD83E\uDEF2\uD83C[\uDFFB\uDFFD-\uDFFF])?|\uDFFD(?:\u200D\uD83E\uDEF2\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])?|\uDFFE(?:\u200D\uD83E\uDEF2\uD83C[\uDFFB-\uDFFD\uDFFF])?|\uDFFF(?:\u200D\uD83E\uDEF2\uD83C[\uDFFB-\uDFFE])?))?)'); bool isEmoji(String character) { final matches = emojiRegex().allMatches(character); if (matches.length == 1) { final match = matches.first; return match.start == 0 && match.end == character.length; } return false; } class EmojiAnimation extends StatelessWidget { final String emoji; static final Map animatedIcons = { "โค": "red_heart.json", "๐Ÿ˜‚": "joy.json", "๐Ÿ”ฅ": "fire.json", "๐Ÿ’ช": "muscle.json", "๐Ÿ˜ญ": "loudly-crying.json", "๐Ÿคฏ": "mind-blown.json", "โค๏ธโ€๐Ÿ”ฅ": "red_heart_fire.json", "๐Ÿ˜€": "smile.json", "๐Ÿ˜ƒ": "smile-with-big-eyes.json", "๐Ÿ˜„": "grin.json", "๐Ÿ˜": "grinning.json", "๐Ÿ˜†": "laughing.json", "๐Ÿ˜…": "grin-sweat.json", "๐Ÿคฃ": "rofl.json", "๐Ÿ˜‰": "wink.json", "๐Ÿ˜—": "kissing.json", "๐Ÿ˜™": "kissing-smiling-eyes.json", "๐Ÿ˜š": "kissing-closed-eyes.json", "๐Ÿ˜˜": "kissing-heart.json", "๐Ÿฅฐ": "heart-face.json", "๐Ÿ˜": "heart-eyes.json", "๐Ÿคฉ": "star-struck.json", "๐Ÿฅณ": "partying-face.json", "๐Ÿ™ƒ": "upside-down-face.json", "๐Ÿ™‚": "slightly-happy.json", "๐Ÿฅฒ": "happy-cry.json", "๐Ÿ˜Š": "blush.json", "๐Ÿ˜Œ": "relieved.json", "๐Ÿ˜": "smirk.json", "๐Ÿคค": "drool.json", "๐Ÿ˜‹": "yum.json", "๐Ÿ˜›": "stuck-out-tongue.json", "๐Ÿ˜": "squinting-tongue.json", "๐Ÿ˜œ": "winky-tongue.json", "๐Ÿคช": "zany-face.json", "๐Ÿฅด": "woozy.json", "๐Ÿ˜”": "pensive.json", "๐Ÿฅบ": "pleading.json", "๐Ÿ˜ฌ": "grimacing.json", "๐Ÿ˜‘": "expressionless.json", "๐Ÿ˜": "neutral-face.json", "๐Ÿ˜ถ": "mouth-none.json", "๐Ÿค": "zipper-face.json", "๐Ÿค”": "thinking-face.json", "๐Ÿคซ": "shushing-face.json", "๐Ÿคญ": "smiling-eyes-with-hand-over-mouth.json", "๐Ÿฅฑ": "yawn.json", "๐Ÿค—": "hug-face.json", "๐Ÿ˜ฑ": "screaming.json", "๐Ÿคจ": "raised-eyebrow.json", "๐Ÿง": "monocle.json", "๐Ÿ˜’": "unamused.json", "๐Ÿ™„": "rolling-eyes.json", "๐Ÿ˜ค": "triumph.json", "๐Ÿ˜ ": "angry.json", "๐Ÿ˜ก": "rage.json", "๐Ÿคฌ": "cursing.json", "๐Ÿ˜ž": "sad.json", "๐Ÿ˜“": "sweat.json", "๐Ÿ˜Ÿ": "worried.json", "๐Ÿ˜ฅ": "concerned.json", "๐Ÿ˜ข": "cry.json", "๐Ÿ™": "frown.json", "๐Ÿ˜•": "slightly-frowning.json", "๐Ÿ˜ฐ": "anxious-with-sweat.json", "๐Ÿ˜จ": "scared.json", "๐Ÿ˜ง": "anguished.json", "๐Ÿ˜ฆ": "gasp.json", "๐Ÿ˜ฎ": "mouth-open.json", "๐Ÿ˜ฏ": "surprised.json", "๐Ÿ˜ฒ": "astonished.json", "๐Ÿ˜ณ": "flushed.json", "๐Ÿ˜–": "scrunched-mouth.json", "๐Ÿ˜ฃ": "scrunched-eyes.json", "๐Ÿ˜ฉ": "weary.json", "๐Ÿ˜ซ": "distraught.json", "๐Ÿ˜ต": "x-eyes.json", "๐Ÿฅถ": "cold-face.json", "๐Ÿฅต": "hot-face.json", "๐Ÿคข": "sick.json", "๐Ÿคฎ": "vomit.json", "๐Ÿ˜ด": "sleep.json", "๐Ÿ˜ช": "sleepy.json", "๐Ÿคง": "sneeze.json", "๐Ÿค’": "thermometer-face.json", "๐Ÿค•": "bandage-face.json", "๐Ÿ˜ท": "mask.json", "๐Ÿคฅ": "liar.json", "๐Ÿ˜‡": "halo.json", "๐Ÿค ": "cowboy.json", "๐Ÿค‘": "money-face.json", "๐Ÿค“": "nerd-face.json", "๐Ÿ˜Ž": "sunglasses-face.json", "๐Ÿฅธ": "disguise.json", "๐Ÿคก": "clown.json", "๐Ÿ’ฉ": "poop.json", "๐Ÿ˜ˆ": "imp-smile.json", "๐Ÿ‘ฟ": "imp-frown.json", "๐Ÿ‘ป": "ghost.json", "๐Ÿ’€": "skull.json", "โ›„": "snowman.json", "๐ŸŽƒ": "jack-o-lantern.json", "๐Ÿค–": "robot.json", "๐Ÿ‘ฝ": "alien.json", "๐Ÿ‘พ": "alien-monster.json", "๐ŸŒž": "sun-with-face.json", "๐ŸŒ›": "moon-face-first-quarter.json", "๐ŸŒœ": "moon-face-last-quarter.json", "๐Ÿ˜บ": "smiley-cat.json", "๐Ÿ˜ธ": "smile-cat.json", "๐Ÿ˜น": "joy-cat.json", "๐Ÿ˜ป": "heart-eyes-cat.json", "๐Ÿ˜ผ": "smirk-cat.json", "๐Ÿ˜ฝ": "kissing-cat.json", "๐Ÿ™€": "scream-cat.json", "๐Ÿ˜ฟ": "crying-cat-face.json", "๐Ÿ˜พ": "pouting-cat.json", "๐Ÿ™ˆ": "see-no-evil-monkey.json", "๐Ÿ™‰": "hear-no-evil-monkey.json", "๐Ÿ™Š": "speak-no-evil-monkey.json", "๐ŸŒŸ": "glowing-star.json", "โœจ": "sparkles.json", "โšก": "electricity.json", "๐Ÿ’ฅ": "collision.json", "๐Ÿ’ฏ": "100.json", "๐ŸŽ‰": "party-popper.json", "๐ŸŽŠ": "confetti-ball.json", "๐Ÿงก": "orange-heart.json", "๐Ÿ’›": "yellow-heart.json", "๐Ÿ’š": "green-heart.json", "๐Ÿ’™": "blue-heart.json", "๐Ÿ’œ": "purple-heart.json", "๐ŸคŽ": "brown-heart.json", "๐Ÿ–ค": "black-heart.json", "๐Ÿค": "white-heart.json", "๐Ÿ’˜": "cupid.json", "๐Ÿ’": "gift-heart.json", "๐Ÿ’–": "sparkling-heart.json", "๐Ÿ’—": "heart-grow.json", "๐Ÿ’“": "beating-heart.json", "๐Ÿ’ž": "revolving-hearts.json", "๐Ÿ’•": "two-hearts.json", "๐Ÿ’Œ": "love-letter.json", "๐Ÿ’Ÿ": "heart-box.json", "๐Ÿ’”": "broken-heart.json", "๐Ÿ’‹": "kiss.json", "๐Ÿ‘ฃ": "footprints.json", "๐Ÿซ€": "anatomical-heart.json", "๐Ÿฉธ": "blood.json", "๐Ÿฆ ": "microbe.json", "๐Ÿ‘€": "eyes.json", "๐Ÿ‘ƒ": "nose.json", "๐Ÿ‘‚": "ear.json", "๐Ÿฆป": "hearing-aid.json", "๐Ÿฆถ": "foot.json", "๐Ÿฆต": "leg.json", "๐Ÿฆฟ": "leg-mechanical.json", "๐Ÿฆพ": "arm-mechanical.json", "๐Ÿ‘": "clap.json", "๐Ÿ‘": "thumbs-up.json", "๐Ÿ‘Ž": "thumbs-down.json", "๐Ÿ™Œ": "raising-hands.json", "๐Ÿ‘": "open-hands.json", "๐Ÿคฒ": "palms-up.json", "๐Ÿคœ": "fist-rightwards.json", "๐Ÿค›": "fist-leftwards.json", "โœŠ": "raised-fist.json", "๐Ÿ‘Š": "fist.json", "๐Ÿ‘‹": "wave.json", "๐Ÿคš": "back-hand.json", "โœ‹": "raised-hand.json", "๐Ÿ––": "vulcan.json", "๐Ÿค˜": "metal.json", "๐Ÿคž": "crossed-fingers.json", "๐Ÿค™": "call-me-hand.json", "๐ŸคŒ": "pinched-fingers.json", "๐Ÿค": "pinch.json", "๐Ÿ‘Œ": "ok.json", "๐Ÿ‘‰": "point-right.json", "๐Ÿ‘ˆ": "point-left.json", "๐Ÿ‘†": "point-up.json", "๐Ÿ‘‡": "point-down.json", "๐Ÿ–•": "middle-finger.json", "๐Ÿคณ": "selfie.json", "๐Ÿ™": "folded-hands.json", "๐Ÿ’…": "nail-care.json", "๐Ÿค": "handshake.json", "๐Ÿ’ƒ": "dancer-woman.json", "๐Ÿ’": "bouquet.json", "๐ŸŒน": "rose.json", "๐Ÿฅ€": "wilted-flower.json", "๐Ÿ‚": "fallen-leaf.json", "๐ŸŒฑ": "plant.json", "๐Ÿƒ": "leaves.json", "๐Ÿ€": "luck.json", "๐ŸŒ‹": "volcano.json", "๐ŸŒ…": "sunrise.json", "๐ŸŒ„": "sunrise-over-mountains.json", "๐ŸŒˆ": "rainbow.json", "๐ŸŒŠ": "ocean.json", "๐Ÿ’ง": "droplet.json", "๐ŸŒ": "globe-showing-Europe-Africa.json", "๐ŸŒŽ": "globe-showing-Americas.json", "๐ŸŒ": "globe-showing-Asia-Australia.json", "๐Ÿฎ": "cow-face.json", "๐Ÿฆ„": "unicorn.json", "๐ŸฆŽ": "lizard.json", "๐Ÿ‰": "dragon.json", "๐Ÿฆ–": "t-rex.json", "๐Ÿฆ•": "dinosaur.json", "๐Ÿข": "turtle.json", "๐ŸŠ": "crocodile.json", "๐Ÿ": "snake.json", "๐Ÿธ": "frog.json", "๐Ÿ‡": "rabbit.json", "๐Ÿ€": "rat.json", "๐Ÿฉ": "poodle.json", "๐Ÿ•": "dog.json", "๐Ÿฆฎ": "guide-dog.json", "๐Ÿ–": "pig.json", "๐ŸŽ": "racehorse.json", "๐Ÿ‚": "ox.json", "๐Ÿ": "goat.json", "๐Ÿฆ˜": "kangaroo.json", "๐Ÿ…": "tiger.json", "๐Ÿ’": "monkey.json", "๐Ÿฆ": "gorilla.json", "๐Ÿฆง": "orangutan.json", "๐Ÿฆฆ": "otter.json", "๐Ÿฆ‡": "bat.json", "๐Ÿฆ": "bird.json", "๐Ÿ“": "rooster.json", "๐Ÿฃ": "hatching-chick.json", "๐Ÿค": "baby-chick.json", "๐Ÿฅ": "hatched-chick.json", "๐Ÿฆ…": "eagle.json", "๐Ÿฆ‰": "owl.json", "๐Ÿฆš": "peacock.json", "๐Ÿฆญ": "seal.json", "๐Ÿฆˆ": "shark.json", "๐Ÿฌ": "dolphin.json", "๐Ÿณ": "whale.json", "๐ŸŸ": "fish.json", "๐Ÿก": "blowfish.json", "๐Ÿฆž": "lobster.json", "๐Ÿฆ€": "crab.json", "๐Ÿ™": "octopus.json", "๐Ÿฆ‚": "scorpion.json", "๐ŸŒ": "snail.json", "๐Ÿœ": "ant.json", "๐ŸฆŸ": "mosquito.json", "๐Ÿชณ": "cockroach.json", "๐Ÿชฐ": "fly.json", "๐Ÿ": "bee.json", "๐Ÿž": "lady-bug.json", "๐Ÿฆ‹": "butterfly.json", "๐Ÿ›": "bug.json", "๐Ÿชฑ": "worm.json", "๐Ÿพ": "paw prints.json", "๐Ÿ…": "tomato.json", "๐Ÿณ": "cooking.json", "๐ŸŒฏ": "burrito.json", "๐Ÿ": "spaghetti.json", "๐Ÿœ": "steaming-bowl.json", "๐Ÿฟ": "popcorn.json", "โ˜•": "hot-beverage.json", "๐Ÿป": "clinking-beer-mugs.json", "๐Ÿฅ‚": "clinking-glasses.json", "๐Ÿพ": "bottle-with-popping-cork.json", "๐Ÿท": "wine-glass.json", "๐Ÿน": "tropical-drink.json", "๐Ÿšง": "construction.json", "๐Ÿšจ": "police-car-light.json", "๐Ÿšฒ": "bicycle.json", "๐Ÿš—": "automobile.json", "๐Ÿš•": "taxi.json", "๐ŸšŒ": "bus.json", "โ›ต": "sailboat.json", "๐Ÿ›ถ": "canoe.json", "๐Ÿ›ธ": "flying-saucer.json", "๐Ÿš€": "rocket.json", "๐Ÿ›ซ": "airplane-departure.json", "๐Ÿ›ฌ": "airplane-arrival.json", "๐ŸŽข": "roller-coaster.json", "๐ŸŽก": "ferris-wheel.json", "๐ŸŽˆ": "balloon.json", "๐ŸŽ‚": "birthday-cake.json", "๐ŸŽ": "wrapped-gift.json", "๐ŸŽ†": "fireworks.json", "๐Ÿช…": "piรฑata.json", "๐Ÿฅ‡": "gold-medal.json", "๐Ÿฅˆ": "silver-medal.json", "๐Ÿฅ‰": "bronze-medal.json", "๐Ÿ†": "trophy.json", "โšฝ": "soccer-ball.json", "โšพ": "baseball.json", "๐ŸฅŽ": "softball.json", "๐ŸŽพ": "tennis.json", "๐Ÿธ": "badminton.json", "๐Ÿฅ": "lacrosse.json", "๐Ÿ": "cricket-game.json", "๐Ÿ‘": "field-hockey.json", "๐Ÿ’": "ice-hockey.json", "๐Ÿ›ผ": "roller-skates.json", "๐Ÿฉฐ": "ballet-shoes.json", "๐Ÿ›น": "skateboard.json", "โ›ณ": "flag-in-hole.json", "๐ŸŽฏ": "direct-hit.json", "๐Ÿฅ": "flying-disc.json", "๐Ÿชƒ": "boomerang.json", "๐Ÿช": "kite.json", "๐ŸŽฃ": "fishing-pole.json", "๐Ÿฅ‹": "martial-arts-uniform.json", "๐ŸŽฑ": "8-ball.json", "๐Ÿ“": "ping-pong.json", "๐ŸŽณ": "bowling.json", "๐ŸŽฒ": "die.json", "๐ŸŽฐ": "slot-machine.json", "๐Ÿช„": "wand.json", "๐Ÿ“ธ": "camera-flash.json", "๐ŸŽท": "saxophone.json", "๐ŸŽบ": "trumpet.json", "๐ŸŽป": "violin.json", "๐Ÿฅ": "drum.json", "๐ŸŽฌ": "clapper.json", "๐Ÿ”‹": "battery-full.json", "๐Ÿช™": "coin.json", "๐Ÿ’ธ": "money-with-wings.json", "๐Ÿ’Ž": "gem-stone.json", "๐Ÿ’ก": "light-bulb.json", "๐ŸŽ“": "graduation-cap.json", "๐Ÿ’": "ring.json", "โฐ": "alarm-clock.json", "๐Ÿ””": "bell.json", "๐Ÿ”ฎ": "crystal-ball.json", "๐Ÿ’ฃ": "bomb.json", "๐Ÿชค": "mouse-trap.json", "๐Ÿ”’": "locked.json", "โ™ˆ": "Aries.json", "โ™‰": "Taurus.json", "โ™Š": "Gemini.json", "โ™‹": "Cancer.json", "โ™Œ": "Leo.json", "โ™": "Virgo.json", "โ™Ž": "Libra.json", "โ™": "Scorpio.json", "โ™": "Sagittarius.json", "โ™‘": "Capricorn.json", "โ™’": "Aquarius.json", "โ™“": "Pisces.json", "โ›Ž": "Ophiuchus.json", "โ—": "exclamation.json", "โ“": "question.json", "โŒ": "cross-mark.json", "๐Ÿ†˜": "sos.json", "๐Ÿ“ด": "phone-off.json", "โœ…": "check-mark.json", "๐Ÿ†•": "new.json", "๐Ÿ†“": "free.json", "๐Ÿ†™": "up!.json", "๐Ÿ†’": "cool.json", "๐Ÿšฎ": "litter.json", "๐ŸŽถ": "musical-notes.json", "โž•": "plus-sign.json", "๐Ÿ": "chequered-flag.json", "๐Ÿšฉ": "triangular-flag.json", "๐Ÿด": "black-flag.json", }; const EmojiAnimation({super.key, required this.emoji}); static bool supported(String emoji) { if (emoji.length > 4) return false; return animatedIcons.containsKey(emoji) || isEmoji(emoji); } @override Widget build(BuildContext context) { // List of emojis and their corresponding Lottie file names // Check if the emoji has a corresponding Lottie animation if (animatedIcons.containsKey(emoji)) { return Lottie.asset("assets/animated_icons/${animatedIcons[emoji]}"); } else if (isEmoji(emoji)) { return Text( emoji, style: TextStyle(fontSize: 60), ); } else { return Text( emoji, style: TextStyle(fontSize: 15), ); } } } class EmojiAnimationFlying extends StatelessWidget { final String emoji; final Duration duration; final double startPosition; final int size; const EmojiAnimationFlying({ super.key, required this.emoji, required this.duration, required this.startPosition, required this.size, }); @override Widget build(BuildContext context) { return TweenAnimationBuilder( tween: Tween( begin: startPosition, end: 1), // Adjust end value as needed duration: duration, curve: Curves.linearToEaseOut, builder: (context, value, child) { return Padding( padding: EdgeInsets.only(bottom: 20 * value), child: SizedBox( width: size + 30 * value, child: EmojiAnimation(emoji: emoji), ), ); }, ); } }