flutter_markdown 多换行符不起作用

问题描述 投票:0回答:10

我正在尝试使用 flutter_markdown 包来标记一些内容。但对于多个换行符,它无法正常工作。

 String exampleData="\n\nLine 1. \n\nLine2.\n\n\n\n### Heading \n\nLine3";
 Markdown(data: exampleData,)

输出是

我尝试使用换行符“
”,但没有成功

 String exampleData="Line 1. \n\nLine2. <br /> <br /> \n\n### Heading \n\nLine3";

输出是

有人可以帮我解决这个换行符或任何替代包吗。

flutter dart markdown
10个回答
13
投票

查看下面的链接!!

在此输入链接描述

br 标签不起作用,因此使用 3 个反斜杠 + n 代替 br 标签

String exampleData="Line 1. \\\nLine2. \\\n## Heading \\\nLine3";

3
投票

一个不错的解决方法。

从版本 0.6.8 开始,Flutter_markdown 包中添加了一个名为

paddingBuilders
的新功能。您可以向 Markdown 中可用的所有块添加填充,如下所示。

MarkdownBody(
  data: markDown,
  paddingBuilders: <String,
  MarkdownPaddingBuilder>{
    'p': PPaddingBuilder(),
    'h3': H3PaddingBuilder(),
  },
)

您必须像下面一样定义填充生成器。

class PPaddingBuilder extends MarkdownPaddingBuilder {
  @override
  EdgeInsets getPadding() => const EdgeInsets.only(top: SGSpacing.xlarge);
}

class H3PaddingBuilder extends MarkdownPaddingBuilder {
  @override
  EdgeInsets getPadding() => const EdgeInsets.only(top: SGSpacing.xxlarge);
}

源代码中

Flutter_markdown
中可用的所有blockTag列表如下:

const List<String> _kBlockTags = <String>[
  'p',
  'h1',
  'h2',
  'h3',
  'h4',
  'h5',
  'h6',
  'li',
  'blockquote',
  'pre',
  'ol',
  'ul',
  'hr',
  'table',
  'thead',
  'tbody',
  'tr'
];

PS:填充不适用于内联标签。仅适用块标签。


2
投票

我发现了一个令人讨厌的技巧(不是解决方案),在这种特定情况下可能会有所帮助。我不推荐它,但到目前为止找不到使用 flutter_markdown 的任何其他解决方法,而且我也找不到任何其他包来替代。

您可以利用三个撇号来添加垂直空间。

这是一个令人讨厌的解决方法,但到目前为止找不到更好的方法来添加垂直空间。


2
投票

只需添加“\u2028”作为换行符。 这是 Unicode 字符 '行分隔符'


1
投票

<br>
替换为
\x03
,如下所示。
\x03
是 ASCII 文本结束 (
ETX
):

text.replaceAll('<br>', '\x03');

1
投票

嗨,我找到了这个包https://pub.dev/packages/markdown_widget

这不是一个完整的解决方案,但这个包支持一些 html 标签,例如 <\br>,在这种情况下,我在 markdown 中添加了该标签并且可以工作


1
投票

根据一个现已删除的问题,flutter_markdown 支持在行尾使用反斜杠来显式换行。使用此语法,您的示例将是:

\
\
Line 1.\
\
Line2.\
\
\
\
### Heading
\
Line3

1
投票

所有给定的解决方案都不适合我的用例。我有一个文本,其中新行标记为 。如果我想插入,就会出现问题 。 我解决了这个问题如下:

text.replaceAll('\n\n', '''
\n
\u200B 
\n
'''
);

这会插入一个零宽度的空格,足以让我有两条新行。


0
投票

我的解决方案,当使用String单行时,不使用“””或''',使用 有 2 个空间 下面的代码显示相同的 UI

var _markdownSingleLine = '演示 休息 线';

var _markdownMultiLine = ''' 演示
休息
线 ''';

Demo break line


0
投票

就我而言。

text.replaceAll('\n', '  \n');
© www.soinside.com 2019 - 2024. All rights reserved.