import 'dart:ui'; import 'package:flutter/foundation.dart'; import 'package:flutter/rendering.dart'; /// ImageProvider for raw RGBA pixels class PixelImage extends ImageProvider { PixelImage( this.rgba, this.width, this.height, { this.scale = 1.0, }); @override obtainKey(ImageConfiguration configuration) => SynchronousFuture(this); @override ImageStreamCompleter loadBuffer( PixelImage key, DecoderBufferCallback decode) => OneFrameImageStreamCompleter(_createImageInfo()); Future _createImageInfo() async { final codec = await ImageDescriptor.raw( await ImmutableBuffer.fromUint8List(rgba), width: width, height: height, pixelFormat: PixelFormat.rgba8888, ).instantiateCodec(); final frame = await codec.getNextFrame(); return ImageInfo(image: frame.image, scale: scale); } final Uint8List rgba; final int width; final int height; /// The scale to place in the [ImageInfo] object of the image. final double scale; }