Skip to content
This repository was archived by the owner on Jul 19, 2025. It is now read-only.

Commit ec294a4

Browse files
Merge pull request #62 from haorendashu/main
fix download image link get empty info bug and fix image download twice bug
2 parents 2b56883 + a7d3744 commit ec294a4

File tree

1 file changed

+13
-2
lines changed

1 file changed

+13
-2
lines changed

lib/src/utils.dart

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,14 @@
11
import 'dart:async';
22
import 'dart:convert';
3+
import 'dart:typed_data';
34

45
import 'package:flutter/material.dart' hide Element;
56
import 'package:flutter_chat_types/flutter_chat_types.dart'
67
show PreviewData, PreviewDataImage;
78
import 'package:html/dom.dart' show Document, Element;
89
import 'package:html/parser.dart' as parser show parse;
910
import 'package:http/http.dart' as http show get;
11+
import 'dart:ui' as ui;
1012

1113
import '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+
136146
Future<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

Comments
 (0)