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

问题描述 投票:0回答:2

我正在创建一个应用程序,该应用程序将显示从我们的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}。

dart flutter
2个回答
0
投票

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

用\ u连接某些东西是不可能的,因为这是一个文字构造函数,而不是动态构造函数。

例如,这些将做同样的事情:

print('\u{dd25}');
print(String.fromCharCode(0xdd25));

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


1
投票

\u2764是“Heart”表情符号的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));
  }
}

产量

© www.soinside.com 2019 - 2024. All rights reserved.