Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

A Flutter widget for rendering static html as Flutter widgets (Will render over 80 different html tags!)

License

NotificationsYou must be signed in to change notification settings

Sub6Resources/flutter_html

Repository files navigation

pub packagecodecovGitHub ActionsMIT License

A Flutter widget for rendering HTML and CSS as Flutter widgets.

Widgetbuild(context) {returnHtml(    data:"""        <h1>Hello, World!</h1>        <p><span>flutter_html</span> supports a variety of HTML and CSS tags and attributes.</p>        <p>Over a hundred static tags are supported out of the box.</p>        <p>Or you can even define your own using an <code>Extension</code>: <flutter></flutter></p>        <p>Its easy to add custom styles to your Html as well using the <code>Style</code> class:</p>        <p>Here's a fancy &lt;p&gt; element!</p>        """,    extensions: [TagExtension(        tagsToExtend: {"flutter"},        child:constFlutterLogo(),      ),    ],    style: {"p.fancy":Style(        textAlign:TextAlign.center,        padding:constEdgeInsets.all(16),        backgroundColor:Colors.grey,        margin:Margins(left:Margin(50,Unit.px), right:Margin.auto()),        width:Width(300,Unit.px),        fontWeight:FontWeight.bold,      ),    },  );}

becomes...

A screenshot showing the above code snippet rendered using flutter_html

Table of Contents:

Why this package?

This package is designed with simplicity in mind. Originally created to allow basic rendering of HTML content into the Flutter widget tree,this project has expanded to include support for basic styling as well!

If you need something more robust and customizable, the package also provides a number of extension APIs for extremely granular control over widget rendering!

Migration Guides

3.0.0 Migration Guide

API Reference:

For the full API reference, seehere.

For a full example, seehere.

Below, you will find brief descriptions of the parameters theHtml widget accepts and some code snippets to help you use this package.

Constructors:

The package currently has two different constructors -Html() andHtml.fromDom().

TheHtml() constructor is for those who would like to directly pass HTML from the source to the package to be rendered.

If you would like to modify or sanitize the HTML before rendering it, thenHtml.fromDom() is for you - you can convert the HTML string to aDocument and use its methods to modify the HTML as you wish. Then, you can directly pass the modifiedDocument to the package. This eliminates the need to parse the modifiedDocument back to a string, pass toHtml(), and convert back to aDocument, thus cutting down on load times.

Parameters:

ParametersDescription
dataThe HTML data passed to theHtml widget. This is required and cannot be null when usingHtml().
documentThe DOM document passed to theHtml widget. This is required and cannot be null when usingHtml.fromDom().
onLinkTapOptional. A function that defines what the widget should do when a link is tapped. The function exposes thesrc of the link as aString to use in your implementation.
extensionsOptional. A powerful API that allows you to customize everything when rendering a specific HTML tag.
shrinkWrapOptional. Abool used while rendering different widgets to specify whether they should be shrink-wrapped or not, likeContainerSpan
onlyRenderTheseTagsOptional. An exclusive set of elements theHtml widget should render. Note that your html will be wrapped in<body> and<html> if it isn't already, so you should include those in this list.
doNotRenderTheseTagsOptional. A set of tags that should not be rendered by theHtml widget.
styleOptional. A powerful API that allows you to customize the style that should be used when rendering a specific HTMl tag.

More examples and in-depth details are available:

External Packages

flutter_html_all

This package is simply a convenience package that exports all the other external packages below. You should use this if you plan to render all the tags that require external dependencies.

flutter_html_audio

This package renders audio elements using thechewie_audio and thevideo_player plugin.

The package considers the attributescontrols,loop,src,autoplay,width, andmuted when rendering the audio widget.

Adding theAudioHtmlExtension:

Add the dependency to your pubspec.yaml:

flutter pub add flutter_html_audio
import'package:flutter_html_audio/flutter_html_audio.dart';Widget html=Html(  data: myHtml,  extensions: [AudioHtmlExtension(),  ],);

flutter_html_iframe

This package renders iframes using thewebview_flutter plugin.

When rendering iframes, the package considers the width, height, and sandbox attributes.

Sandbox controls the JavaScript mode of the webview - a value ofnull orallow-scripts will setjavascriptMode: JavascriptMode.unrestricted, otherwise it will setjavascriptMode: JavascriptMode.disabled.

Adding theIframeHtmlExtension:

Add the dependency to your pubspec.yaml:

flutter pub add flutter_html_iframe
import'package:flutter_html_iframe/flutter_html_iframe.dart';Widget html=Html(  data: myHtml,  extensions: [IframeHtmlExtension(),  ],);

You can set thenavigationDelegate of the webview with thenavigationDelegate property onIframeHtmlExtension. This allows you to block or allow the loading of certain URLs.

flutter_html_math

This package renders MathML elements using theflutter_math_fork plugin.

When rendering MathML, the package takes the MathML data within the<math> tag and tries to parse it to Tex. Then, it will pass the parsed string toflutter_math_fork.

Because this package is parsing MathML to Tex, it may not support some functionalities. The current list of supported tags can be foundon the Wiki, but some of these only have partial support at the moment.

Adding theMathHtmlExtension:

Add the dependency to your pubspec.yaml:

flutter pub add flutter_html_math
import'package:flutter_html_math/flutter_html_math.dart';Widget html=Html(  data: myHtml,  extensions: [MathHtmlExtension(),  ],);

If the parsing errors, you can use theonMathErrorBuilder property ofMathHtmlException to catch the error and potentially fix it on your end.

The function exposes the parsed TexString, as well as the error and error with type fromflutter_math_fork as aString.

You can analyze the error and the parsed string, and finally return a new instance ofMath.tex() with the corrected Tex string.

Tex

If you have a Tex string you'd like to render inside your HTML you can do that using the sameflutter_math_fork plugin.

Use a custom tag inside your HTML (an example could be<tex>), and place yourraw Tex string inside.

Then, use theextensions parameter to add the widget to render Tex. It could look like this:

Widget htmlWidget=Html(  data:r"""<tex>i\hbar\frac{\partial}{\partial t}\Psi(\vec x,t) = -\frac{\hbar}{2m}\nabla^2\Psi(\vec x,t)+ V(\vec x)\Psi(\vec x,t)</tex>""",  extensions: [TagExtension(      tagsToExtend: {"tex"},      builder: (extensionContext) {returnMath.tex(          extensionContext.innerHtml,          mathStyle:MathStyle.display,          textStyle: extensionContext.styledElement?.style.generateTextStyle(),          onErrorFallback: (FlutterMathException e) {//optionally try and correct the Tex string herereturnText(e.message);          },        );      }    ),  ],);

flutter_html_svg

This package renders svg elements using theflutter_svg plugin.

When rendering SVGs, the package takes the SVG data within the<svg> tag and passes it toflutter_svg. Thewidth andheight attributes are considered while rendering, if given.

The package also exposes a few ways to render SVGs within an<img> tag, specifically base64 SVGs, asset SVGs, and network SVGs.

Adding theSvgHtmlExtension:

Add the dependency to your pubspec.yaml:

flutter pub add flutter_html_svg
import'package:flutter_html_svg/flutter_html_svg.dart';Widget html=Html(  data: myHtml,  extensions: [SvgHtmlExtension(),  ],);

flutter_html_table

This package renders table elements using theflutter_layout_grid plugin.

When rendering table elements, the package tries to calculate the best fit for each element and size its cell accordingly.Rowspans andcolspans are considered in this process, so cells that span across multiple rows and columns are rendered as expected. Heights are determined intrinsically to maintain an optimal aspect ratio for the cell.

Adding theTableHtmlExtension:

Add the dependency to your pubspec.yaml:

flutter pub add flutter_html_table
import'package:flutter_html_table/flutter_html_table.dart';Widget html=Html(  data: myHtml,  extensions: [TableHtmlExtension(),  ],);

flutter_html_video

This package renders video elements using thechewie and thevideo_player plugin.

The package considers the attributescontrols,loop,src,autoplay,poster,width,height, andmuted when rendering the video widget.

Adding theVideoHtmlExtension:

Add the dependency to your pubspec.yaml:

flutter pub add flutter_html_video
import'package:flutter_html_video/flutter_html_video.dart';Widget html=Html(  data: myHtml,  extensions: [VideoHtmlExtension(),  ],);

FAQ

Why can't I get<audio>/<iframe>/<math>/<svg>/<table>/

Have you followed the instructions as describedabove?

If so, feel free to file an issue or start a discussion for some extra help.

How can I renderLaTex in my HTML?

See theabove example.

How do I use this inside of aRow()?

If you'd like to use this widget inside of aRow(), make sure to setshrinkWrap: true and place your widget inside expanded:

Widget row=Row(   children: [Expanded(            child:Html(              shrinkWrap:true,//other params            )        ),//whatever other widgets   ]);

Example

Here's what the example in example/lib/main.dart looks like after being run (in Chrome):

A screenshot showing the result of running the exampleA second screenshot showing the result of running the exampleA third screenshot showing the result of running the exampleA fourth screenshot showing the result of running the example

About

A Flutter widget for rendering static html as Flutter widgets (Will render over 80 different html tags!)

Topics

Resources

License

Stars

Watchers

Forks

Sponsor this project

  •  

Packages

No packages published

Contributors71


[8]ページ先頭

©2009-2025 Movatter.jp