Added support for multiple line breaks (#235)
diff --git a/packages/flutter_markdown/example/lib/main.dart b/packages/flutter_markdown/example/lib/main.dart
index 7fbc4cf..c1cd4d8 100644
--- a/packages/flutter_markdown/example/lib/main.dart
+++ b/packages/flutter_markdown/example/lib/main.dart
@@ -93,6 +93,19 @@
Enjoy!
[Google]: https://www.google.com/
+
+## Line Breaks
+
+This is an example of how to create line breaks (tab or two whitespaces):
+
+line 1
+
+
+line 2
+
+
+
+line 3
""";
void main() {
diff --git a/packages/flutter_markdown/lib/src/widget.dart b/packages/flutter_markdown/lib/src/widget.dart
index 1bb30b4..47671ff 100644
--- a/packages/flutter_markdown/lib/src/widget.dart
+++ b/packages/flutter_markdown/lib/src/widget.dart
@@ -161,7 +161,12 @@
_disposeRecognizers();
- final List<String> lines = widget.data.split(RegExp(r'\r?\n'));
+ /// FIXME: Enhance it using a single RegEx
+ final List<String> lines = widget.data
+ .replaceAll(RegExp(r'[ ]{2}(\r?\n)'), ' &')
+ .split(RegExp(r'\r?\n'))
+ .map((e) => e?.replaceAll(RegExp(r' &'), ' \n'))
+ .toList();
final md.Document document = md.Document(
extensionSet: widget.extensionSet ?? md.ExtensionSet.gitHubFlavored,
inlineSyntaxes: [TaskListSyntax()],
diff --git a/packages/flutter_markdown/test/flutter_markdown_test.dart b/packages/flutter_markdown/test/flutter_markdown_test.dart
index f663bca..552df22 100644
--- a/packages/flutter_markdown/test/flutter_markdown_test.dart
+++ b/packages/flutter_markdown/test/flutter_markdown_test.dart
@@ -69,7 +69,7 @@
_expectTextStrings(widgets, <String>['strikethrough']);
});
- testWidgets('Line break', (WidgetTester tester) async {
+ testWidgets('Single line break', (WidgetTester tester) async {
await tester
.pumpWidget(_boilerplate(const MarkdownBody(data: 'line 1 \nline 2')));
@@ -79,6 +79,16 @@
_expectTextStrings(widgets, <String>['line 1\nline 2']);
});
+ testWidgets('Multiple line breaks', (WidgetTester tester) async {
+ await tester
+ .pumpWidget(_boilerplate(const MarkdownBody(data: 'line 1 \n \nline 2')));
+
+ final Iterable<Widget> widgets = tester.allWidgets;
+ _expectWidgetTypes(
+ widgets, <Type>[Directionality, MarkdownBody, Column, Wrap, RichText]);
+ _expectTextStrings(widgets, <String>['line 1\n\nline 2']);
+ });
+
testWidgets('Non-applicable line break', (WidgetTester tester) async {
final body = MarkdownBody(data: 'line 1.\nline 2.');
await tester.pumpWidget(_boilerplate(body));