Ignore HTML in flutter_markdown content without error (#8420)
* Gracefully ignore html content
* Test for less than, consolidate table tests
* Specify missing type annotation
* Add Mike Hoolehan to AUTHORS
diff --git a/AUTHORS b/AUTHORS
index 1532b60..b5c914b 100644
--- a/AUTHORS
+++ b/AUTHORS
@@ -14,3 +14,4 @@
Alexandre Ardhuin <alexandre.ardhuin@gmail.com>
Luke Freeman <luke@goposse.com>
Vincent Le Quéméner <eu.lequem@gmail.com>
+Mike Hoolehan <mike@hoolehan.com>
diff --git a/packages/flutter_markdown/lib/src/markdown_raw.dart b/packages/flutter_markdown/lib/src/markdown_raw.dart
index 3a460f0..fcdc50c 100644
--- a/packages/flutter_markdown/lib/src/markdown_raw.dart
+++ b/packages/flutter_markdown/lib/src/markdown_raw.dart
@@ -219,13 +219,16 @@
@override
void visitText(md.Text text) {
- _MarkdownNodeList topList = _currentBlock.stack.last;
- List<_MarkdownNode> top = topList.list;
+ if (_currentBlock != null) { // ignore if no corresponding block
+ _MarkdownNodeList topList = _currentBlock.stack.last;
+ List<_MarkdownNode> top = topList.list;
- if (_currentBlock.tag == 'pre')
- top.add(new _MarkdownNodeTextSpan(_syntaxHighlighter.format(text.text)));
- else
- top.add(new _MarkdownNodeString(text.text));
+ if (_currentBlock.tag == 'pre')
+ top.add(
+ new _MarkdownNodeTextSpan(_syntaxHighlighter.format(text.text)));
+ else
+ top.add(new _MarkdownNodeString(text.text));
+ }
}
@override
diff --git a/packages/flutter_markdown/pubspec.yaml b/packages/flutter_markdown/pubspec.yaml
index fb17122..117d734 100644
--- a/packages/flutter_markdown/pubspec.yaml
+++ b/packages/flutter_markdown/pubspec.yaml
@@ -7,7 +7,7 @@
dependencies:
flutter:
sdk: flutter
- markdown: '^0.9.0'
+ markdown: '^0.11.0'
string_scanner: ^1.0.0
dev_dependencies:
diff --git a/packages/flutter_markdown/test/flutter_markdown_test.dart b/packages/flutter_markdown/test/flutter_markdown_test.dart
index 0f5be57..7552eef 100644
--- a/packages/flutter_markdown/test/flutter_markdown_test.dart
+++ b/packages/flutter_markdown/test/flutter_markdown_test.dart
@@ -84,6 +84,28 @@
expect(span.children[0].recognizer.runtimeType, equals(TapGestureRecognizer));
});
+ testWidgets('HTML tag ignored ', (WidgetTester tester) async {
+ final List<String> mdData = <String>[
+ 'Line 1\n<p>HTML content</p>\nLine 2',
+ 'Line 1\n<!-- HTML\n comment\n ignored --><\nLine 2'
+ ];
+
+ for (String mdLine in mdData) {
+ await tester.pumpWidget(new MarkdownBody(data: mdLine));
+
+ Iterable<Widget> widgets = tester.allWidgets;
+ _expectTextStrings(widgets, <String>['Line 1', 'Line 2']);
+ }
+ });
+
+ testWidgets('Less than', (WidgetTester tester) async {
+ final String mdLine = 'Line 1 <\n\nc < c c\n\n< Line 2';
+ await tester.pumpWidget(new MarkdownBody(data: mdLine));
+
+ Iterable<Widget> widgets = tester.allWidgets;
+ _expectTextStrings(widgets, <String>['Line 1 <','c < c c','< Line 2']);
+ });
+
testWidgets('Changing config - data', (WidgetTester tester) async {
await tester.pumpWidget(new Markdown(data: 'Data1'));
_expectTextStrings(tester.allWidgets, <String>['Data1']);