我正在创建一个应用程序,该应用程序将显示从我们的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}。
你需要使用String.fromCharCode
(https://api.dartlang.org/stable/2.2.0/dart-core/String/String.fromCharCode.html)。
用\ u连接某些东西是不可能的,因为这是一个文字构造函数,而不是动态构造函数。
例如,这些将做同样的事情:
print('\u{dd25}');
print(String.fromCharCode(0xdd25));
除了后者可以是从数据流中读取的值。
\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));
}
}
产量