我正在尝试使用新行命令在文本中创建新行。从此问题看来,这是不可能的:New Line Command (\n) Not Working With Firebase Firestore Database Strings
是否仍然如此?假设是这样,Flutter是否提供任何功能与以下类似的方法,使我可以解决此问题?
label.text = stringRecived.replacingOccurrences(of: "\n", with: "\n")
*更多上下文: 这是我输入数据的Firestore字符串的图片。
然后我使用将来的构建器从Firestore调用此函数,然后将字符串(在本例中为注释)传递到另一个小部件中。
return new SocialFeedWidget(
filter: false,
articleID: document['article'],
article_header: document['article_title'],
userName: document['author'],
spectrumValue: document['spectrum_value'].toDouble(),
comment: document['comment'],
fullName: document['firstName'] + " " + document['lastName'],
user_id: document['user_id'],
postID: document.documentID,
posterID: userID,
);
}).toList(),
在新的小部件中,我将其作为字符串传递,然后通过文本小部件传递给它,如下所示:
new Text(
comment,
style: new TextStyle(
color: Color.fromRGBO(74, 74, 74, 1.0),
fontSize: 13.0,
),
),
答案 0 :(得分:1)
在大多数编程语言中,如果您在字符串中包含\n
,它将两个字符解释为一个(转义)序列,并且实际上存储了一个非可打印字符,其ASCII码为10。
如果您在Firestore控制台中从字面上键入\n
,它将在字符串中存储该确切的字面值。这就是两个字符\
和n
。
这两个不一样。实际上,如果您想在大多数编程语言中以字符串形式输入两个字符的序列,则最终会以"\\n"
结尾。这是两个反斜杠:第一个反斜杠开始转义序列,第二个反斜杠表示它是文字\
,然后是文字n
。
因此,在Flutter中,如果您在字符串中存储了原义的两个字符\n
,并且希望将其显示为换行符,则需要将字符串解码回一个换行符。幸运的是,这很简单:
yourString.replaceAll("\\n", "\n");
例如,这就是我刚刚在应用程序中测试过的内容。我在Firestore控制台中的文档显示:
然后是我的代码:
var doc = await Firestore.instance.collection("weather").document("sf").get();
var weather = doc.data["condition"]
print(weather);
print(weather.replaceAll("\\n", "\n"));
第一个print
语句输出:
Sunny\nI think
第二次打印时:
Sunny
I think
有趣的事实:当我在Flutter中运行此代码时:
Firestore.instance.collection("weather").document("test").setData({ 'condition': "nice\nand\nsunny" });
它在Firestore控制台中显示如下:
因此,字符串中不可打印的\n
看起来在控制台中显示为空格。我还没有找到在Firestore控制台中将换行符输入到字符串中的方法。
答案 1 :(得分:1)
我知道旧线程,但是对于任何在这里绊倒的人...
如果您在一段文本中将\n
传递到Firestore,那么如果您在Firebase控制台中查找它,您的确不会看到它。它仍然在那里。为了使新行生效,您需要做的就是将white-space: pre-wrap
css应用于呈现文本的元素。
答案 2 :(得分:0)
您可以在 html 样式或 css 中使用以下内容:
white-space: pre-line;
line-break: anywhere;