network static method

Image network(
  1. String src, {
  2. Key? key,
  3. double scale = 1.0,
  4. Map<String, String>? headers,
  5. ImageFrameBuilder? frameBuilder,
  6. ImageLoadingBuilder? loadingBuilder,
  7. ImageErrorWidgetBuilder? errorBuilder,
  8. String? semanticLabel,
  9. bool excludeFromSemantics = false,
  10. double? width,
  11. double? height,
  12. Color? color,
  13. Animation<double>? opacity,
  14. BlendMode? colorBlendMode,
  15. BoxFit? fit,
  16. AlignmentGeometry alignment = Alignment.center,
  17. ImageRepeat repeat = ImageRepeat.noRepeat,
  18. Rect? centerSlice,
  19. bool matchTextDirection = false,
  20. bool gaplessPlayback = false,
  21. FilterQuality filterQuality = FilterQuality.medium,
  22. bool isAntiAlias = false,
  23. int? cacheWidth,
  24. int? cacheHeight,
})

Drop-in replacement for Image.network that records image.load spans.

Caveat: passing cacheWidth / cacheHeight wraps the provider in ResizeImage, whose default resolveStreamForKey only calls loadImage on a cache miss. Memory hits on the resized key therefore emit no image.load span. Omit both (or resize at the widget layer) if memory-hit visibility matters.

Implementation

static Image network(
  String src, {
  Key? key,
  double scale = 1.0,
  Map<String, String>? headers,
  ImageFrameBuilder? frameBuilder,
  ImageLoadingBuilder? loadingBuilder,
  ImageErrorWidgetBuilder? errorBuilder,
  String? semanticLabel,
  bool excludeFromSemantics = false,
  double? width,
  double? height,
  Color? color,
  Animation<double>? opacity,
  BlendMode? colorBlendMode,
  BoxFit? fit,
  AlignmentGeometry alignment = Alignment.center,
  ImageRepeat repeat = ImageRepeat.noRepeat,
  Rect? centerSlice,
  bool matchTextDirection = false,
  bool gaplessPlayback = false,
  FilterQuality filterQuality = FilterQuality.medium,
  bool isAntiAlias = false,
  int? cacheWidth,
  int? cacheHeight,
}) {
  return Image(
    key: key,
    image: ResizeImage.resizeIfNeeded(
      cacheWidth,
      cacheHeight,
      VuNetworkImage(src, scale: scale, headers: headers),
    ),
    frameBuilder: frameBuilder,
    loadingBuilder: loadingBuilder,
    errorBuilder: errorBuilder,
    semanticLabel: semanticLabel,
    excludeFromSemantics: excludeFromSemantics,
    width: width,
    height: height,
    color: color,
    opacity: opacity,
    colorBlendMode: colorBlendMode,
    fit: fit,
    alignment: alignment,
    repeat: repeat,
    centerSlice: centerSlice,
    matchTextDirection: matchTextDirection,
    gaplessPlayback: gaplessPlayback,
    filterQuality: filterQuality,
    isAntiAlias: isAntiAlias,
  );
}