11import 'dart:async' ;
22import 'dart:convert' ;
3+ import 'dart:typed_data' ;
34
45import 'package:flutter/material.dart' hide Element;
56import 'package:flutter_chat_types/flutter_chat_types.dart'
67 show PreviewData, PreviewDataImage;
78import 'package:html/dom.dart' show Document, Element;
89import 'package:html/parser.dart' as parser show parse;
910import 'package:http/http.dart' as http show get;
11+ import 'dart:ui' as ui;
1012
1113import 'types.dart' ;
1214
@@ -133,6 +135,14 @@ Future<Size> _getImageSize(String url) {
133135 return completer.future;
134136}
135137
138+ Future <Size > _getImageSizeFromBytes (Uint8List bytes) async {
139+ var image = await decodeImageFromList (bytes);
140+ return Size (
141+ height: image.height.toDouble (),
142+ width: image.width.toDouble (),
143+ );
144+ }
145+
136146Future <String > _getBiggestImageUrl (
137147 List <String > imageUrls,
138148 String ? proxy,
@@ -197,12 +207,12 @@ Future<PreviewData> getPreviewData(
197207 final response = await http.get (uri, headers: {
198208 'User-Agent' : userAgent ?? 'WhatsApp/2' ,
199209 }).timeout (requestTimeout ?? const Duration (seconds: 5 ));
200- final document = parser.parse (utf8.decode (response.bodyBytes));
201210
202211 final imageRegexp = RegExp (regexImageContentType);
203212
204213 if (imageRegexp.hasMatch (response.headers['content-type' ] ?? '' )) {
205- final imageSize = await _getImageSize (previewDataUrl);
214+ final imageSize = await _getImageSizeFromBytes (response.bodyBytes);
215+
206216 previewDataImage = PreviewDataImage (
207217 height: imageSize.height,
208218 url: previewDataUrl,
@@ -214,6 +224,7 @@ Future<PreviewData> getPreviewData(
214224 );
215225 }
216226
227+ final document = parser.parse (utf8.decode (response.bodyBytes));
217228 if (! _hasUTF8Charset (document)) {
218229 return previewData;
219230 }
0 commit comments