首页 > 解决方案 > Firebase Firestore 新行命令

问题描述

我正在尝试使用新行命令在文本中创建新行。从这个问题看来这是不可能的:New Line Command (\n) Not Working With Firebase Firestore Database Strings

现在还是这样吗?假设是这样,Flutter 是否提供了与以下功能相似的任何方法,可以让我解决这个问题?

label.text = stringRecived.replacingOccurrences(of: "\n", with: "\n")

*更多上下文:这是我输入数据的 Firestore 字符串的图片。 带换行符的 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(),

在新的小部件中,我将它作为字符串传递给它,并通过 Text 小部件提供,如下所示:

new Text(
  comment,
  style: new TextStyle(
    color: Color.fromRGBO(74, 74, 74, 1.0),
    fontSize: 13.0,
  ),
),

当它出现时,它仍然在字符串中包含 \n。 从控制台

标签: firebasefluttergoogle-cloud-firestore

解决方案


在大多数编程语言中,如果您包含\n在一个字符串中,它会将这两个字符解释为一个(转义)序列,并且它实际上存储了一个 ASCII 码 10 的不可打印字符。

如果您\n在 Firestore 控制台中逐字键入文档,它会将确切的文本值存储在字符串中。所以这是两个字符\n

这两个是不一样的。事实上,如果您想在大多数编程语言中输入字符串中的两个字符序列,您最终会得到"\\n". 这是两个反斜杠:第一个开始转义序列,第二个表示它是文字\,然后是文字n

因此,在 Flutter 中,如果您已将文字两个字符存储\n在一个字符串中,并且希望将其显示为换行符,则需要将字符串解码回单个换行符。幸运的是,这很简单:

yourString.replaceAll("\\n", "\n");

例如,这是我刚刚在应用程序中测试的。我在 Firestore 控制台中的文档显示:

Firestore 控制台中文档中的文字两字符 \n 序列

然后我的代码:

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 控制台中显示如下:

不可打印的换行符在 Firestore 控制台中显示为空格

所以看起来\n字符串中的不可打印在控制台中显示为一个空格。我还没有找到在 Firestore 控制台中将换行符输入到字符串中的方法。不过,API 会正确检索换行符,因此这只影响 Firebase 控制台。


推荐阅读