@@ -207,7 +207,7 @@ class _BroadcastCarouselItemState extends State<BroadcastCarouselItem> {
207207 });
208208 } else if (widget.worker.closed == false ) {
209209 await precacheImage (provider, context);
210- final ui.Image scaledImage = await _imageProviderToScaled (provider);
210+ final ui.Image scaledImage = await imageProviderToScaled (provider);
211211 final imageBytes = await scaledImage.toByteData ();
212212 final response = await _computeImageColors (widget.worker, provider.url, imageBytes! );
213213 if (response != null ) {
@@ -502,65 +502,9 @@ Future<void> preCacheBroadcastImages(
502502 if (imageUrl != null ) {
503503 final provider = NetworkImage (imageUrl);
504504 await precacheImage (provider, context);
505- final ui.Image scaledImage = await _imageProviderToScaled (provider);
505+ final ui.Image scaledImage = await imageProviderToScaled (provider);
506506 final imageBytes = await scaledImage.toByteData ();
507507 await _computeImageColors (worker, imageUrl, imageBytes! );
508508 }
509509 }
510510}
511-
512- // Scale image size down to reduce computation time of color extraction.
513- Future <ui.Image > _imageProviderToScaled (ImageProvider imageProvider) async {
514- const double maxDimension = 112.0 ;
515- final ImageStream stream = imageProvider.resolve (
516- const ImageConfiguration (size: Size (maxDimension, maxDimension)),
517- );
518- final Completer <ui.Image > imageCompleter = Completer <ui.Image >();
519- late ImageStreamListener listener;
520- late ui.Image scaledImage;
521- Timer ? loadFailureTimeout;
522-
523- listener = ImageStreamListener (
524- (ImageInfo info, bool sync ) async {
525- loadFailureTimeout? .cancel ();
526- stream.removeListener (listener);
527- final ui.Image image = info.image;
528- final int width = image.width;
529- final int height = image.height;
530- double paintWidth = width.toDouble ();
531- double paintHeight = height.toDouble ();
532- assert (width > 0 && height > 0 );
533-
534- final bool rescale = width > maxDimension || height > maxDimension;
535- if (rescale) {
536- paintWidth = (width > height) ? maxDimension : (maxDimension / height) * width;
537- paintHeight = (height > width) ? maxDimension : (maxDimension / width) * height;
538- }
539- final ui.PictureRecorder pictureRecorder = ui.PictureRecorder ();
540- final Canvas canvas = Canvas (pictureRecorder);
541- paintImage (
542- canvas: canvas,
543- rect: Rect .fromLTRB (0 , 0 , paintWidth, paintHeight),
544- image: image,
545- filterQuality: FilterQuality .none,
546- );
547-
548- final ui.Picture picture = pictureRecorder.endRecording ();
549- scaledImage = await picture.toImage (paintWidth.toInt (), paintHeight.toInt ());
550- imageCompleter.complete (info.image);
551- },
552- onError: (Object exception, StackTrace ? stackTrace) {
553- stream.removeListener (listener);
554- throw Exception ('Failed to render image: $exception ' );
555- },
556- );
557-
558- loadFailureTimeout = Timer (const Duration (seconds: 5 ), () {
559- stream.removeListener (listener);
560- imageCompleter.completeError (TimeoutException ('Timeout occurred trying to load image' ));
561- });
562-
563- stream.addListener (listener);
564- await imageCompleter.future;
565- return scaledImage;
566- }
0 commit comments