import 'package:cached_network_image/cached_network_image.dart'; import 'package:flutter_cache_manager/flutter_cache_manager.dart'; import 'package:flutter/material.dart'; class MImage extends StatelessWidget { final String src; final String errorSrc; final String fadeSrc; final BorderRadius radius; final double aspectRatio; final double width; final double height; final BoxFit fit; final bool isCircle; MImage(this.src, { this.errorSrc = "assets/image/default_2_1.png", this.fadeSrc = "assets/image/default_2_1.png", this.aspectRatio, this.width, this.height, this.fit, this.isCircle = false, this.radius = BorderRadius.zero, }); @override Widget build(BuildContext context) { Widget image = LayoutBuilder(builder: (context, constraints) { String imageUrl = ""; if (src != null && src != "") { imageUrl = "$src?imageMogr2/thumbnail/${constraints.constrainWidth() * 2}x${constraints.constrainHeight() * 2}/format/webp/blur/1x0/quality/75"; } print("imageUrl: $imageUrl"); return CachedNetworkImage( imageUrl: imageUrl, cacheManager: DefaultCacheManager(), fadeInDuration: Duration(milliseconds: 300), fadeOutDuration: Duration(milliseconds: 300), imageBuilder: (context, provide) { return Image( image: provide, fit: fit, ); }, errorWidget: (context, error, stackTrace) { return Image.asset( errorSrc, fit: fit, ); }, placeholder: (context, placeholder) { return Image.asset( fadeSrc, fit: fit, ); }, ); }); var clipRRect; if (isCircle) { clipRRect = ClipOval( clipBehavior: Clip.antiAlias, child: image ); } else { clipRRect = ClipRRect( borderRadius: radius, child: image, ); } if (aspectRatio != null && aspectRatio > 0) { return Container( child: AspectRatio( aspectRatio: aspectRatio, child: clipRRect, ), ); } else { return Container( width: width, height: height, child: clipRRect, ); } } }