Flutter Widget from HTML
This is a Flutter package to render html as widgets that supports hyperlink, image, audio, video, iframe and also 70+ other tags. In one word, this package supports most common HTML tags for easy usage.
First of all, create a new project and run this command to add this to your app's pubspec.yaml file
flutter pub add flutter_widget_from_html
Basic of HTML Widget
This package is not work as web view. We can only show HTML content as flutter widget. Here is the use casesHtmlWidget(
// put your HTML Content inside ''' it's required
'''
<h3>Heading</h3>
<p>
A paragraph with <strong>strong</strong>, <em>emphasized</em>
and <span style="color: red">colored</span> text.
</p>
<!-- anything goes here -->
''',
// all other parameters are optional, a few notable params:
// specify custom styling for an element
// see supported inline styling below
customStylesBuilder: (element) {
if (element.classes.contains('widget-title')) {
return {'color': 'red'};
}
return null;
},
// these callbacks are called when a complicated element is loading
// or failed to render allowing the app to render progress indicator
// and fallback widget
onErrorBuilder: (context, element, error) => Text('$element error: $error'),
onLoadingBuilder: (context, element, loadingProgress) => CircularProgressIndicator(),
// this callback will be triggered when user taps a link
onTapUrl: (url) => print('tapped $url'),
// select the render mode for HTML body
// by default, a simple `Column` is rendered
// consider using `ListView` or `SliverList` for better performance
renderMode: RenderMode.column,
// set the default styling for text
textStyle: TextStyle(fontSize: 14),
)Applying to our own Project
We put our HTML content inside a String variable and used it on this project. Play with this code.
import 'dart:math';
import 'package:flutter/material.dart';
import 'package:flutter_widget_from_html/flutter_widget_from_html.dart';
class HTMLtoWidget extends StatelessWidget{
final String htmlcode = """
<h1>H1 Title</h1>
<h2>H2 Title</h2>
<p>A paragraph with <strong>bold</strong> and <u>underline</u> text.</p>
<ol>
<li>List 1</li>
<li>List 2<ul>
<li>List 2.1 (nested)</li>
<li>List 2.2</li>
</ul>
</li>
<li>Three</li>
</ol>
<a href="https://www.orkitt.com">Orkitt.com Home</a>
<img src='https://picsum.photos/536/354'/>
""";
const HTMLtoWidget({super.key});
@override
Widget build(BuildContext context) {
return Scaffold(
appBar:AppBar(title: const Text("HTML to Widget")),
body:SingleChildScrollView(
scrollDirection: Axis.vertical,
child:HtmlWidget( //to show HTML as widget.
htmlcode,
baseUrl: Uri.parse("https://www.orkitt.com"),
//baseURl (optional)
onTapUrl:(url) async {
print("Clicked url is $url");
//by default it shows app to open url.
//or you can do it in your own way
throw(e);
},
textStyle: const TextStyle(fontSize: 16),
),
),
);
}
}



0 تعليقات
No Link Share ! No Spaming