1
1
import 'package:flutter/material.dart' ;
2
2
import 'package:flutter_html/flutter_html.dart' ;
3
+ import 'package:flutter_html_all/flutter_html_all.dart' ;
3
4
import 'package:flutter_math_fork/flutter_math.dart' ;
4
5
5
6
void main () => runApp (new MyApp ());
@@ -268,18 +269,14 @@ class _MyHomePageState extends State<MyHomePage> {
268
269
),
269
270
'h5' : Style (maxLines: 2 , textOverflow: TextOverflow .ellipsis),
270
271
},
271
- tagsList: Html .tags..addAll ([" tex" , " bird" , " flutter" ]),
272
+ tagsList: Html .tags..addAll ([' tex' , ' bird' , ' flutter' ]),
272
273
customRenders: {
273
274
tagMatcher ("tex" ): CustomRender .widget (widget: (context, buildChildren) => Math .tex (
274
275
context.tree.element? .innerHtml ?? '' ,
275
276
mathStyle: MathStyle .display,
276
277
textStyle: context.style.generateTextStyle (),
277
278
onErrorFallback: (FlutterMathException e) {
278
- if (context.parser.onMathError != null ) {
279
- return context.parser.onMathError! .call (context.tree.element? .innerHtml ?? '' , e.message, e.messageWithType);
280
- } else {
281
- return Text (e.message);
282
- }
279
+ return Text (e.message);
283
280
},
284
281
)),
285
282
tagMatcher ("bird" ): CustomRender .inlineSpan (inlineSpan: (context, buildChildren) => TextSpan (text: "🐦" )),
@@ -292,28 +289,34 @@ class _MyHomePageState extends State<MyHomePage> {
292
289
)),
293
290
tagMatcher ("table" ): CustomRender .widget (widget: (context, buildChildren) => SingleChildScrollView (
294
291
scrollDirection: Axis .horizontal,
295
- child: (context.tree as TableLayoutElement ). toWidget (context),
292
+ child: tableRender. call ().widget ! . call (context, buildChildren ),
296
293
)),
297
- },
298
- customImageRenders: {
299
- networkSourceMatcher (domains: ["flutter.dev" ]):
300
- (context, attributes, element) {
301
- return FlutterLogo (size: 36 );
302
- },
303
- networkSourceMatcher (domains: ["mydomain.com" ]):
304
- networkImageRender (
294
+ audioMatcher (): audioRender (),
295
+ iframeMatcher (): iframeRender (),
296
+ mathMatcher (): mathRender (onMathError: (error, exception, exceptionWithType) {
297
+ print (exception);
298
+ return Text (exception);
299
+ }),
300
+ svgTagMatcher (): svgTagRender (),
301
+ svgDataUriMatcher (): svgDataImageRender (),
302
+ svgAssetUriMatcher (): svgAssetImageRende
10000
r (),
303
+ svgNetworkSourceMatcher (): svgNetworkImageRender (),
304
+ networkSourceMatcher (domains: ["flutter.dev" ]): CustomRender .widget (
305
+ widget: (context, buildChildren) {
306
+ return FlutterLogo (size: 36 );
307
+ }),
308
+ networkSourceMatcher (domains: ["mydomain.com" ]): networkImageRender (
305
309
headers: {"Custom-Header" : "some-value" },
306
310
altWidget: (alt) => Text (alt ?? "" ),
307
311
loadingWidget: () => Text ("Loading..." ),
308
312
),
309
313
// On relative paths starting with /wiki, prefix with a base url
310
- (attr, _) =>
311
- attr["src" ] != null && attr["src" ]! .startsWith ("/wiki" ):
312
- networkImageRender (
313
- mapUrl: (url) => "https://upload.wikimedia.org" + url! ),
314
+ (context) => context.tree.element? .attributes["src" ] != null
315
+ && context.tree.element! .attributes["src" ]! .startsWith ("/wiki" ):
316
+ networkImageRender (mapUrl: (url) => "https://upload.wikimedia.org" + url! ),
314
317
// Custom placeholder image for broken links
315
- networkSourceMatcher ():
316
- networkImageRender (altWidget : (_) => FlutterLogo () ),
318
+ networkSourceMatcher (): networkImageRender (altWidget : (_) => FlutterLogo ()),
319
+ videoMatcher () : videoRender ( ),
317
320
},
318
321
onLinkTap: (url, _, __, ___) {
319
322
print ("Opening $url ..." );
@@ -336,3 +339,9 @@ class _MyHomePageState extends State<MyHomePage> {
336
339
);
337
340
}
338
341
}
342
+
343
+ CustomRenderMatcher texMatcher () => (context) => context.tree.element? .localName == 'tex' ;
344
+
345
+ CustomRenderMatcher birdMatcher () => (context) => context.tree.element? .localName == 'bird' ;
346
+
347
+ CustomRenderMatcher flutterMatcher () => (context) => context.tree.element? .localName == 'flutter' ;
0 commit comments