[flutter_markdown] Strip leading whitespace from list items (#5294)
In line with standard Markdown practice, whitespace at the beginning of list items is removed.
Fixes [Flutter issue #134847
](https://github.com/flutter/flutter/issues/134847)
diff --git a/packages/flutter_markdown/CHANGELOG.md b/packages/flutter_markdown/CHANGELOG.md
index dcf09ea..dd37dea 100644
--- a/packages/flutter_markdown/CHANGELOG.md
+++ b/packages/flutter_markdown/CHANGELOG.md
@@ -1,3 +1,7 @@
+## 0.6.18+2
+
+* Removes leading whitespace from list items.
+
## 0.6.18+1
* Fixes a typo in README.
diff --git a/packages/flutter_markdown/lib/src/builder.dart b/packages/flutter_markdown/lib/src/builder.dart
index 07cde26..0ab3346 100644
--- a/packages/flutter_markdown/lib/src/builder.dart
+++ b/packages/flutter_markdown/lib/src/builder.dart
@@ -323,7 +323,8 @@
// Leading spaces in paragraph or list item are ignored
// https://github.github.com/gfm/#example-192
// https://github.github.com/gfm/#example-236
- if (const <String>['ul', 'ol', 'p', 'br'].contains(_lastVisitedTag)) {
+ if (const <String>['ul', 'ol', 'li', 'p', 'br']
+ .contains(_lastVisitedTag)) {
text = text.replaceAll(leadingSpacesPattern, '');
}
diff --git a/packages/flutter_markdown/pubspec.yaml b/packages/flutter_markdown/pubspec.yaml
index b2396c2..cb14d71 100644
--- a/packages/flutter_markdown/pubspec.yaml
+++ b/packages/flutter_markdown/pubspec.yaml
@@ -4,7 +4,7 @@
formatted with simple Markdown tags.
repository: https://github.com/flutter/packages/tree/main/packages/flutter_markdown
issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+flutter_markdown%22
-version: 0.6.18+1
+version: 0.6.18+2
environment:
sdk: ">=3.0.0 <4.0.0"
diff --git a/packages/flutter_markdown/test/list_test.dart b/packages/flutter_markdown/test/list_test.dart
index 9e2b1fc..05464e7 100644
--- a/packages/flutter_markdown/test/list_test.dart
+++ b/packages/flutter_markdown/test/list_test.dart
@@ -72,6 +72,28 @@
'two',
]);
});
+
+ testWidgets(
+ 'leading spaces are ignored (non-paragraph test case)',
+ (WidgetTester tester) async {
+ const String data = '- one\n- two\n- three';
+ await tester.pumpWidget(
+ boilerplate(
+ const MarkdownBody(data: data),
+ ),
+ );
+
+ final Iterable<Widget> widgets = tester.allWidgets;
+ expectTextStrings(widgets, <String>[
+ '•',
+ 'one',
+ '•',
+ 'two',
+ '•',
+ 'three',
+ ]);
+ },
+ );
});
group('Ordered List', () {