// Copyright 2016 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. import 'package:flutter/material.dart'; import 'markdown_raw.dart'; import 'markdown_style.dart'; /// A [Widget] that renders markdown formatted text. It supports all standard /// markdowns from the original markdown specification found here: /// https://daringfireball.net/projects/markdown/ The rendered markdown is /// placed in a padded scrolling view port. If you do not want the scrolling /// behaviour, use the [MarkdownBody] class instead. class Markdown extends MarkdownRaw { /// Creates a new Markdown [Widget] that renders the markdown formatted string /// passed in as [data]. By default the markdown will be rendered using the /// styles from the current theme, but you can optionally pass in a custom /// [markdownStyle] that specifies colors and fonts to use. Code blocks are /// by default not using syntax highlighting, but it's possible to pass in /// a custom [syntaxHighlighter]. /// /// new Markdown(data: "Hello _world_!"); Markdown({ String data, SyntaxHighlighter syntaxHighlighter, MarkdownStyle markdownStyle, MarkdownLinkCallback onTapLink }) : super( data: data, syntaxHighlighter: syntaxHighlighter, markdownStyle: markdownStyle, onTapLink: onTapLink ); @override MarkdownBody createMarkdownBody({ String data, MarkdownStyle markdownStyle, SyntaxHighlighter syntaxHighlighter, MarkdownLinkCallback onTapLink }) { return new MarkdownBody( data: data, markdownStyle: markdownStyle, syntaxHighlighter: syntaxHighlighter, onTapLink: onTapLink ); } } /// A [Widget] that renders markdown formatted text. It supports all standard /// markdowns from the original markdown specification found here: /// https://daringfireball.net/projects/markdown/ This class doesn't implement /// any scrolling behavior, if you want scrolling either wrap the widget in /// a [ScrollableViewport] or use the [Markdown] widget. class MarkdownBody extends MarkdownBodyRaw { /// Creates a new Markdown [Widget] that renders the markdown formatted string /// passed in as [data]. By default the markdown will be rendered using the /// styles from the current theme, but you can optionally pass in a custom /// [markdownStyle] that specifies colors and fonts to use. Code blocks are /// by default not using syntax highlighting, but it's possible to pass in /// a custom [syntaxHighlighter]. /// /// Typically, you may want to wrap the [MarkdownBody] widget in a [Padding] and /// a [ScrollableViewport], or use the [Markdown] class /// /// new ScrollableViewport( /// child: new Padding( /// padding: new EdgeInsets.all(16.0), /// child: new Markdown(data: markdownSource) /// ) /// ) MarkdownBody({ String data, SyntaxHighlighter syntaxHighlighter, MarkdownStyle markdownStyle, MarkdownLinkCallback onTapLink }) : super( data: data, syntaxHighlighter: syntaxHighlighter, markdownStyle: markdownStyle, onTapLink: onTapLink ); @override MarkdownStyle createDefaultStyle(BuildContext context) { return new MarkdownStyle.defaultFromTheme(Theme.of(context)); } }