1- import 'dart:async' ;
2- import 'dart:convert' ;
31import 'dart:math' ;
42
53import 'package:chewie/chewie.dart' ;
@@ -10,7 +8,6 @@ import 'package:flutter/material.dart';
108import 'package:flutter/widgets.dart' ;
119import 'package:flutter_html/html_parser.dart' ;
1210import 'package:flutter_html/src/html_elements.dart' ;
13- import 'package:flutter_html/src/utils.dart' ;
1411import 'package:flutter_html/style.dart' ;
1512import 'package:flutter_svg/flutter_svg.dart' ;
1613import 'package:html/dom.dart' as dom;
@@ -81,115 +78,15 @@ class ImageContentElement extends ReplacedElement {
8178
8279 @override
8380 Widget toWidget (RenderContext context) {
84- Widget imageWidget;
85- if (src == null ) {
86- imageWidget = Text (alt ?? "" , style: context.style.generateTextStyle ());
87- } else if (src.startsWith ("data:image" ) && src.contains ("base64," )) {
88- final decodedImage = base64.decode (src.split ("base64," )[1 ].trim ());
89- precacheImage (
90- MemoryImage (decodedImage),
91- context.buildContext,
92- onError: (exception, StackTrace stackTrace) {
93- context.parser.onImageError? .call (exception, stackTrace);
94- },
95- );
96- imageWidget = Image .memory (
97- decodedImage,
98- frameBuilder: (ctx, child, frame, _) {
99- if (frame == null ) {
100- return Text (alt ?? "" , style: context.style.generateTextStyle ());
101- }
102- return child;
103- },
104- );
105- } else if (src.startsWith ("asset:" )) {
106- final assetPath = src.replaceFirst ('asset:' , '' );
107- precacheImage (
108- AssetImage (assetPath),
109- context.buildContext,
110- onError: (exception, StackTrace stackTrace) {
111- context.parser.onImageError? .call (exception, stackTrace);
112- },
113- );
114- imageWidget = Image .asset (
115- assetPath,
116- frameBuilder: (ctx, child, frame, _) {
117- if (frame == null ) {
118- return Text (alt ?? "" , style: context.style.generateTextStyle ());
119- }
120- return child;
121- },
122- );
123- } else if (src.endsWith (".svg" )) {
124- return SvgPicture .network (src);
125- } else {
126- precacheImage (
127- NetworkImage (src),
128- context.buildContext,
129- onError: (exception, StackTrace stackTrace) {
130- context.parser.onImageError? .call (exception, stackTrace);
131- },
132- );
133- Completer <Size > completer = Completer ();
134- Image image = Image .network (src, frameBuilder: (ctx, child, frame, _) {
135- if (frame == null ) {
136- completer.completeError ("error" );
137- return child;
138- } else {
139- return child;
81+ for (final entry in context.parser.imageRenders.entries) {
82+ if (entry.key.call (attributes, element)) {
83+ final widget = entry.value.call (context, attributes, element);
84+ if (widget != null ) {
85+ return widget;
14086 }
141- });
142- image.image.resolve (ImageConfiguration ()).addListener (
143- ImageStreamListener ((ImageInfo image, bool synchronousCall) {
144- var myImage = image.image;
145- Size size =
146- Size (myImage.width.toDouble (), myImage.height.toDouble ());
147- completer.complete (size);
148- }, onError: (object, stacktrace) {
149- completer.completeError (object);
150- }),
151- );
152- imageWidget = FutureBuilder <Size >(
153- future: completer.future,
154- builder: (BuildContext buildContext, AsyncSnapshot <Size > snapshot) {
155- if (snapshot.hasData) {
156- return new Image .network (
157- src,
158- width: snapshot.data.width,
159- frameBuilder: (ctx, child, frame, _) {
160- if (frame == null ) {
161- return Text (alt ?? "" ,
162- style: context.style.generateTextStyle ());
163- }
164- return child;
165- },
166- );
167- } else if (snapshot.hasError) {
168- return Text (alt ?? "" , style: context.style.generateTextStyle ());
169- } else {
170- return new CircularProgressIndicator ();
171- }
172- },
173- );
87+ }
17488 }
175-
176- return ContainerSpan (
177- style: style,
178- newContext: context,
179- shrinkWrap: context.parser.shrinkWrap,
180- child: RawGestureDetector (
181- child: imageWidget,
182- gestures: {
183- MultipleTapGestureRecognizer : GestureRecognizerFactoryWithHandlers <
184- MultipleTapGestureRecognizer >(
185- () => MultipleTapGestureRecognizer (),
186- (instance) {
187- instance..onTap = () => context.parser.onImageTap? .call (src);
188- },
189- ),
190- },
191- ),
192- );
89+ return Container ();
19390 }
19491}
19592
0 commit comments