当来自 Firebase 时,颤动文本输出不抛出段落行

Posted

技术标签:

【中文标题】当来自 Firebase 时,颤动文本输出不抛出段落行【英文标题】:Flutter text output not throwing paragraph line when comes from Firebase 【发布时间】:2020-06-01 00:49:13 【问题描述】:

我有一个 Text 小部件,其中包含 \n\n 以在段落更改时抛出一个空行:

Text('Sibling Rivalry \n\n some more text\n\n> and even more text')

这可以正常工作并在定义 \n\n 的位置打印空白行。但是,当我尝试输出完全相同的文本但从 Cloud Firestore 检索时,不会抛出空行。

这是加载代码:

final extracted = await _firestore
    .collection('items')
    .where("active", isEqualTo: true)
    .orderBy("playCount", descending: true)
    .getDocuments();

extracted.documents.forEach(
  (mediaData) 

    if (mediaData['itemType'] == 'V') 
      loadedMedia.add(
        MediaItem(
          // load fields for VIDEO,
          title: mediaData['title'],
          description: mediaData['description'],
          itemCatCode: mediaData['itemCatCode'],
          imageUrl: mediaData['imageUrl'],
          itemUrl: mediaData['itemUrl'],
          itemType: mediaData['itemType'],
        ),
      );
    

然后我尝试通过相同的 Text 小部件将其输出到屏幕:

Text(mediaItem.description),

顺便说一句,我将文本直接输入到 Firestore 中,并且描述字段在 Firestore 中定义为字符串。我不知道为什么 /n/n 没有被识别为来自 Firestore 的字符串看起来与上面的硬编码字符串完全相同。

非常感谢您对此提供的任何帮助,因为在最终的应用程序中,有很多文本和很多段落。

【问题讨论】:

【参考方案1】:

Firestore 不支持字符串值中的任何转义序列。如果你在一个字符串中写“\n”,当你阅读它时,你会得到完全正确的结果。如果您需要存储一些特殊的东西,您可能需要自己编码和解码。

只需使用 mediaItem.description 将“\n”替换为:“\n”(如果您使用 \n 创建了字符串)

您可以尝试另一件事 mediaItem.description 将“\\n”替换为:“\n”(如果它是使用某些文本区域等自动创建的)

【讨论】:

我试过了:final _reformattedDescription = mediaItem.description.replaceAll("\n", "\n");然后:文本(_reformattedDescription)。但是屏幕上仍然只有一行带有 \n 试试 mediaItem.description.replaceAll("\\n", "\n") 其实我发现重要的是你提到的双\\。这确实是个问题。对其他人来说很好的学习:所有解决方案拆分,替换等都应该遵循,例如mediaItem.description.replaceAll("\\n, "\n")。感谢您的帮助。 欢迎@Kitcc。

以上是关于当来自 Firebase 时,颤动文本输出不抛出段落行的主要内容,如果未能解决你的问题,请参考以下文章

C++ unordered_map emplace() 函数抛出段错误,我不知道为啥

Phpunit测试既不输出也不抛出错误

颤动中的Firebase列表

不抛出的方法的快速错误处理[重复]

使用firebase时颤动的Gradle问题

为啥设置 DataSource 时 ComboBox 不抛出异常?