Flutter仅渲染硬编码的表情符号。动态构造的表情符号显示为纯文本

时间:2019-04-11 13:49:29

标签: dart flutter

我正在创建一个应用程序,该应用程序将显示从Firebase数据库提取的消息。其中一些消息中包含表情符号,它们以以下格式存储:\ udd25。这就是从Instagram抓取它们的方式。

Dart要求这些实体的格式如下:\ u {dd25}。我已经创建了一个动态添加这些花括号的函数,但是问题是这些动态构造的实体没有按预期方式呈现为表情符号。

如果我将这样的表情符号硬编码:


Text('\u{dd25}');

显示的表情符号没有任何问题。

但是,当我恢复到在Instagram上重新格式化任何潜在表情符号的解决方案时:


var emoji = '\\u' + uniqueNumber; // Concatenation with '{dd25}', for example
Text(emoji);

...这将呈现实体的String表示形式,而不是实际的表情符号本身。是否可以通过某种方式“强制” Flutter识别此串联字符串为表情符号,应将其视为表情符号?

非常感谢。

我曾尝试使用substring函数从连接中必须使用的变量中删除“转义”反斜杠(以防万一这是问题所在),但这只是显示了相同的String而没有反斜杠:u {dd25}

2 个答案:

答案 0 :(得分:1)

\u2764是“心脏”表情符号的Unicode。假设这是从数据库中获取的。然后,您可以将其存储在变量中,然后将该变量直接传递到Text小部件中,并且它会呈现表情符号。

String emojiCode = '\u2764'; // assume, we fetched from DB
Text(emojiCode);

完整示例

import 'package:flutter/material.dart';

void main() => runApp(MaterialApp(home: MyApp()));

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    String emojiCode = '\u2764';
    return Scaffold(
        appBar: AppBar(
          backgroundColor: Colors.black,
        ),
        body: Text(emojiCode));
  }
}

输出

答案 1 :(得分:0)

您需要使用JsonObjecthttps://api.dartlang.org/stable/2.2.0/dart-core/String/String.fromCharCode.html)。

不可能只用\ u连接某些东西,因为那是文字构造器,而不是动态构造器。

因此,例如,它们将执行相同的操作:

sudo apt-get install php-xml

除了后者可以是从数据流中读取的值。