Add support for Horizontal Rules (#25)
* Add hr tag to list of block tags
* Build Divider widgets for hr elements
* Use BoxDecoration to draw a horizontal rule
* Update changelog
* Add test
* Add test cases
* Revert "Add test cases"
This reverts commit d20cd6f4974ab6d04436ca21f93f168f307c2fd5.
diff --git a/packages/flutter_markdown/CHANGELOG.md b/packages/flutter_markdown/CHANGELOG.md
index 955b872..4d8f1bf 100644
--- a/packages/flutter_markdown/CHANGELOG.md
+++ b/packages/flutter_markdown/CHANGELOG.md
@@ -1,5 +1,6 @@
## 0.1.2
+* Add support for horizontal rules.
* Fix the `onTap` callback on images nested in hyperlinks
## 0.1.1
diff --git a/packages/flutter_markdown/lib/src/builder.dart b/packages/flutter_markdown/lib/src/builder.dart
index 42103d0..0c0dffe 100644
--- a/packages/flutter_markdown/lib/src/builder.dart
+++ b/packages/flutter_markdown/lib/src/builder.dart
@@ -24,6 +24,7 @@
'pre',
'ol',
'ul',
+ 'hr',
]);
const List<String> _kListTags = const <String>['ul', 'ol'];
@@ -214,6 +215,11 @@
child: child,
),
);
+ } else if (tag == 'hr') {
+ child = new DecoratedBox(
+ decoration: styleSheet.horizontalRuleDecoration,
+ child: child,
+ );
}
_addBlockChild(child);
diff --git a/packages/flutter_markdown/lib/src/style_sheet.dart b/packages/flutter_markdown/lib/src/style_sheet.dart
index 5505f7d..e0dc79e 100644
--- a/packages/flutter_markdown/lib/src/style_sheet.dart
+++ b/packages/flutter_markdown/lib/src/style_sheet.dart
@@ -26,7 +26,8 @@
this.blockquotePadding,
this.blockquoteDecoration,
this.codeblockPadding,
- this.codeblockDecoration
+ this.codeblockDecoration,
+ this.horizontalRuleDecoration
}) : _styles = <String, TextStyle>{
'a': a,
'p': p,
@@ -77,7 +78,12 @@
codeblockDecoration: new BoxDecoration(
color: Colors.grey.shade100,
borderRadius: new BorderRadius.circular(2.0)
- )
+ ),
+ horizontalRuleDecoration: new BoxDecoration(
+ border: new Border(
+ top: new BorderSide(width: 5.0, color: Colors.grey.shade300)
+ ),
+ ),
);
}
@@ -115,7 +121,12 @@
codeblockDecoration: new BoxDecoration(
color: Colors.grey.shade100,
borderRadius: new BorderRadius.circular(2.0)
- )
+ ),
+ horizontalRuleDecoration: new BoxDecoration(
+ border: new Border(
+ top: new BorderSide(width: 5.0, color: Colors.grey.shade300)
+ ),
+ ),
);
}
@@ -140,7 +151,8 @@
double blockquotePadding,
Decoration blockquoteDecoration,
double codeblockPadding,
- Decoration codeblockDecoration
+ Decoration codeblockDecoration,
+ Decoration horizontalRuleDecoration
}) {
return new MarkdownStyleSheet(
a: a != null ? a : this.a,
@@ -161,7 +173,8 @@
blockquotePadding: blockquotePadding != null ? blockquotePadding : this.blockquotePadding,
blockquoteDecoration: blockquoteDecoration != null ? blockquoteDecoration : this.blockquoteDecoration,
codeblockPadding: codeblockPadding != null ? codeblockPadding : this.codeblockPadding,
- codeblockDecoration: codeblockDecoration != null ? codeblockDecoration : this.codeblockDecoration
+ codeblockDecoration: codeblockDecoration != null ? codeblockDecoration : this.codeblockDecoration,
+ horizontalRuleDecoration: horizontalRuleDecoration != null ? horizontalRuleDecoration : this.horizontalRuleDecoration
);
}
@@ -222,6 +235,9 @@
/// The decoration to use behind for `pre` elements.
final Decoration codeblockDecoration;
+ /// The decoration to use for `hr` elements.
+ final Decoration horizontalRuleDecoration;
+
/// A [Map] from element name to the cooresponding [TextStyle] object.
Map<String, TextStyle> get styles => _styles;
Map<String, TextStyle> _styles;
@@ -251,7 +267,8 @@
&& typedOther.blockquotePadding == blockquotePadding
&& typedOther.blockquoteDecoration == blockquoteDecoration
&& typedOther.codeblockPadding == codeblockPadding
- && typedOther.codeblockDecoration == codeblockDecoration;
+ && typedOther.codeblockDecoration == codeblockDecoration
+ && typedOther.horizontalRuleDecoration == horizontalRuleDecoration;
}
@override
@@ -276,6 +293,7 @@
blockquoteDecoration,
codeblockPadding,
codeblockDecoration,
+ horizontalRuleDecoration,
);
}
}
diff --git a/packages/flutter_markdown/test/flutter_markdown_test.dart b/packages/flutter_markdown/test/flutter_markdown_test.dart
index 7a6b3b6..7a53a3b 100644
--- a/packages/flutter_markdown/test/flutter_markdown_test.dart
+++ b/packages/flutter_markdown/test/flutter_markdown_test.dart
@@ -73,6 +73,14 @@
]);
});
+ testWidgets('Horizontal Rule', (WidgetTester tester) async {
+ await tester.pumpWidget(_boilerplate(const MarkdownBody(data: '-----')));
+
+ final Iterable<Widget> widgets = tester.allWidgets;
+ _expectWidgetTypes(
+ widgets, <Type>[Directionality, MarkdownBody, DecoratedBox, SizedBox]);
+ });
+
testWidgets('Scrollable wrapping', (WidgetTester tester) async {
await tester.pumpWidget(_boilerplate(const Markdown(data: '')));