import 'dart:io'; import 'package:flutter/material.dart'; import 'package:huixiang/utils/ImgCachePath.dart'; import 'package:network_to_file_image/network_to_file_image.dart'; import 'package:path/path.dart' as p; class MImage extends StatelessWidget { final String src; final String errorSrc; final String fadeSrc; final BorderRadius radius; final double aspectRatio; double width; double height; final BoxFit fit; final bool isCircle; double scaleIndex = 2.5; 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, }); File fileFromDocsDir(String filename) { String pathName = p.join(ImgCachePath.instance.path, filename); return File(pathName); } @override Widget build(BuildContext context) { Widget image = LayoutBuilder( builder: (context, constraints) { String imageUrl = ""; ///压缩图片 // if (src != null && src != "" && src.startsWith("http")) { // String oper = src.contains("?") ? "" :"?"; // imageUrl = // "$src$oper/imageMogr2/thumbnail/${constraints.constrainWidth() * scaleIndex}" // "x${constraints.constrainHeight() * scaleIndex}/format/webp/quality/100"; // } int _w = ((constraints.constrainWidth()==double.infinity? MediaQuery.of(context).size.width:constraints.constrainWidth()) * scaleIndex).toInt(); int _h = ((constraints.constrainHeight()==double.infinity? MediaQuery.of(context).size.height:constraints.constrainHeight()) * scaleIndex).toInt(); ///压缩图片 if ((src??"").startsWith("http")) { imageUrl = "$src?imageView2/1/w/${_w}/h/${_h}/format/jpg/q/75"; } // print("imageUrl:$imageUrl"); // print("constrainWidth: ${constraints.constrainWidth()}"); // print("constrainHeight: ${constraints.constrainHeight()}"); if (imageUrl == null || imageUrl == "") { return Image.asset( "assets/image/default_2_1.png", fit: fit, ); } Widget cachedNetworkImage; if (src.startsWith("http")) { cachedNetworkImage = Image( image: ResizeImage(NetworkToFileImage( url: imageUrl, file: fileFromDocsDir("resize"+src.replaceAll("https:", "") .replaceAll("http:", "") .replaceAll("pos.upload.gznl.top", "") .replaceAll("/", "")), debug: true, ), width: _w, height: _h), errorBuilder: (context, error, stackTrace) { return Image.asset( errorSrc, fit: fit, ); }, fit: fit, ); } else if (src.startsWith("file")) { cachedNetworkImage = Image.file( File(src), fit: fit, errorBuilder: (context, error, stackTrace) { return Image.asset( errorSrc, fit: fit, ); }, ); } return cachedNetworkImage; }, ); 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, ); } } }