Firebase Firestore新行命令

时间:2018-12-18 06:51:58

标签: firebase flutter google-cloud-firestore

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

是否仍然如此?假设是这样,Flutter是否提供任何功能与以下类似的方法,使我可以解决此问题?

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

*更多上下文: 这是我输入数据的Firestore字符串的图片。 Firestore string with line break

然后我使用将来的构建器从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,
  ),
),

当它出现时,它仍然在字符串中包含\ n。 From the console

3 个答案:

答案 0 :(得分:1)

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

如果您在Firestore控制台中从字面上键入\n,它将在字符串中存储该确切的字面值。这就是两个字符\n

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

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

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

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

Literal two-character <code>\n</code> sequence in a document in the Firestore console

然后是我的代码:

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

Unprintable newlines show as space in Firestore console

因此,字符串中不可打印的\n看起来在控制台中显示为空格。我还没有找到在Firestore控制台中将换行符输入到字符串中的方法。

答案 1 :(得分:1)

我知道旧线程,但是对于任何在这里绊倒的人...

如果您在一段文本中将\n传递到Firestore,那么如果您在Firebase控制台中查找它,您的确不会看到它。它仍然在那里。为了使新行生效,您需要做的就是将white-space: pre-wrap css应用于呈现文本的元素。

答案 2 :(得分:0)

您可以在 html 样式或 css 中使用以下内容:

white-space: pre-line;
line-break: anywhere;