Skip to content

Instantly share code, notes, and snippets.

@daohoangson
Created September 14, 2019 05:06
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save daohoangson/9fa6ae66431048ee11f085edb50ffdcd to your computer and use it in GitHub Desktop.
Save daohoangson/9fa6ae66431048ee11f085edb50ffdcd to your computer and use it in GitHub Desktop.
import 'dart:convert';
import 'package:flutter/material.dart';
import 'package:flutter_widget_from_html/flutter_widget_from_html.dart';
import 'package:html/dom.dart' as dom;
const html = """<p><span style=\"color: rgb(255, 0, 0);\">الوكيل الاخباري</span></p><p>&nbsp;</p><p>يترقب عشاق النجمة العالمية أنجلينا جولي، عرض الجزء الثاني من فيلم \"مالفيسينت\"، الذي تم عرض أول أجزائه عام 2014.</p><p><br>وذكرت الصفحة الرسمية لاستوديوهات والت ديزني، على موقع التواصل الاجتماعي \"تويتر\"، أن عرض الفيلم، سيتم في يوم 18 أكتوبر/ تشرين الأول المقبل.&nbsp;</p><p><br>ونشرت الصفحة فيديو جديدا، يرصد تحضيرات الممثلة العالمية أنجلينا جولي لشخصية \"مالفيسينت\"، خلال الجزء الثاني من الفيلم الذي يحمل اسم \"مالفيسينت ميستريس أوف إيفل\".</p><p>&nbsp;</p><p>ويرصد الفيديو تحول أنجلينا جولي إلى الشخصية الشريرة من خلال تغيير بعض ملامح وجهها، في الجزء الثاني من الفيلم، الذي شاركت في الجزء الأول منه عام 2014.&nbsp;</p><p><br>ويشارك عدد كبير من نجوم هوليوود، مع الفنانة العالمية أنجلينا جولي، في الجزء الثاني من الفيلم، وأبرزهم آيلي فانينج وشويتال أجيوفور وجونو تامبل وتيريزا ماهوني وهاريس ديكنسون.</p><p><br>ومن المقرر طرح الفيلم في دور العديد من دور العرض العالمية، كما نشر الحساب بعض من الصور لأنجلينا جولي في أثناء إزالة ماكياج الشخصية.</p><p>&nbsp;</p><p><blockquote class=\"twitter-tweet\" data-lang=\"en\"><div lang=\"en\" dir=\"ltr\">She’s back in black! Go behind the horns as Angelina Jolie transforms into <a href=\"https://twitter.com/hashtag/Maleficent?src=hash&amp;ref_src=twsrc%5Etfw\">#Maleficent</a>: Mistress of Evil. See the film in theaters October 18! <a href=\"https://t.co/9IcFONTvk2\">pic.twitter.com/9IcFONTvk2</a></div>— Walt Disney Studios (@DisneyStudios) <a href=\"https://twitter.com/DisneyStudios/status/1171604522797543425?ref_src=twsrc%5Etfw\">September 11, 2019</a></blockquote>\n<script async=\"\" src=\"https://platform.twitter.com/widgets.js\" charset=\"utf-8\"></script></p><p>&nbsp;</p><p>المصدر:<a href=\"https://arabic.sputniknews.com/mosaic/201909121042861998-%25D9%2581%25D9%258A%25D8%25AF%25D9%258A%25D9%2588-%25D9%2585%25D8%25B1%25D8%25B9%25D8%25A8-%25D9%2584%25D8%25AA%25D8%25AD%25D9%2588%25D9%2584-%25D8%25A3%25D9%2586%25D8%25AC%25D9%2584%25D9%258A%25D9%2586%25D8%25A7-%25D8%25AC%25D9%2588%25D9%2584%25D9%258A-%25D9%2581%25D9%258A-%25D9%2581%25D9%258A%25D9%2584%25D9%2585-%25D9%2585%25D8%25A7%25D9%2584%25D9%2581%25D9%258A%25D8%25B3%25D9%258A%25D9%2586%25D8%25AA/\" target=\"_blank\"> عربي</a></p><p><customurllink><p class=\"hint-admin\" style=\"border: 1px solid #ccc; padding: 10px; font-size: 16px; text-align:center; color: #ccc;\">اظهار أخبار متعلقة</p></customurllink><br><customurllink><p class=\"hint-admin\" style=\"border: 1px solid #ccc; padding: 10px; font-size: 16px; text-align:center; color: #ccc;\">اظهار أخبار متعلقة</p></customurllink><br><customurllink><p class=\"hint-admin\" style=\"border: 1px solid #ccc; padding: 10px; font-size: 16px; text-align:center; color: #ccc;\">اظهار أخبار متعلقة</p></customurllink><br><customurllink><p class=\"hint-admin\" style=\"border: 1px solid #ccc; padding: 10px; font-size: 16px; text-align:center; color: #ccc;\">اظهار أخبار متعلقة</p></customurllink><br><customurllink><p class=\"hint-admin\" style=\"border: 1px solid #ccc; padding: 10px; font-size: 16px; text-align:center; color: #ccc;\">اظهار أخبار متعلقة</p></customurllink><br></p>""";
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) => MaterialApp(
home: Scaffold(
appBar: AppBar(),
body: SingleChildScrollView(
child: HtmlWidget(
html,
webView: true,
factoryBuilder: (c, hw) => _BlockquoteWebViewWf(c, hw),
),
),
),
);
}
class _BlockquoteWebViewWf extends WidgetFactory {
final buildOp = BuildOp(
onWidgets: (meta, _) => [
WebView(
Uri.dataFromString(
"""<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width">
</head>
<body>
${meta.domElement.outerHtml}
<script async src="https://www.instagram.com/embed.js"></script>
<script async src="https://platform.twitter.com/widgets.js"></script>
</body>
</html>""",
mimeType: 'text/html',
encoding: Encoding.getByName('utf-8'),
).toString(),
aspectRatio: 16 / 9,
getDimensions: true,
)
],
);
_BlockquoteWebViewWf(BuildContext context, HtmlWidget htmlWidget)
: super(context, htmlWidget);
@override
NodeMetadata parseElement(NodeMetadata meta, dom.Element e) {
switch (e.localName) {
case 'blockquote':
return lazySet(null, buildOp: buildOp);
}
return super.parseElement(meta, e);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment