flutter 获取网络图片的尺寸
获取网络图片的尺寸
import 'dart:async';import 'package:flutter/widgets.dart';/// Image Util.
class ImageUtil {late ImageStreamListener _listener;late ImageStream _imageStream;/// get image width height,load error throw exception.(unit px)/// 获取图片宽高,加载错误会抛出异常.(单位 px)/// image/// url network/// local url , packageFuture<Rect> getImageWH({Image? image,String? url,String? localUrl,String? package,ImageConfiguration? configuration,}) {Completer<Rect> completer = Completer<Rect>();_listener = ImageStreamListener((ImageInfo info, bool synchronousCall) {_imageStream.removeListener(_listener);if (!completer.isCompleted) {completer.complete(Rect.fromLTWH(0, 0, info.image.width.toDouble(), info.image.height.toDouble()));}},onError: (dynamic exception, StackTrace? stackTrace) {_imageStream.removeListener(_listener);if (!completer.isCompleted) {completer.completeError(exception, stackTrace);}},);if (image == null &&(url == null || url.isEmpty) &&(localUrl == null || localUrl.isEmpty)) {return Future.value(Rect.zero);}Image? img = image;if (img == null) {img = (url != null && url.isNotEmpty)? Image.network(url): Image.asset(localUrl!, package: package);}_imageStream = img.image.resolve(configuration ?? ImageConfiguration());_imageStream.addListener(_listener);return completer.future;}
}
使用
Rect rect = await ImageUtil().getImageWH(url:"网络图片");