// ignore_for_file: must_be_immutable import 'dart:io'; import 'package:cached_network_image/cached_network_image.dart'; import 'package:flutter/material.dart'; import 'package:flutter_svg/flutter_svg.dart'; class CustomImageView extends StatelessWidget { ///[url] is required parameter for fetching network image String? url; ///[imagePath] is required parameter for showing png,jpg,etc image String? imagePath; ///[svgPath] is required parameter for showing svg image String? svgPath; ///[file] is required parameter for fetching image file File? file; double? height; double? width; Color? color; BoxFit? fit; final String placeHolder; Alignment? alignment; VoidCallback? onTap; EdgeInsetsGeometry? margin; BorderRadius? radius; BoxBorder? border; ///a [CustomImageView] it can be used for showing any type of images /// it will shows the placeholder image if image is not found on network image CustomImageView({ this.url, this.imagePath, this.svgPath, this.file, this.height, this.width, this.color, this.fit, this.alignment, this.onTap, this.radius, this.margin, this.border, this.placeHolder = 'assets/images/image_not_found.png', }); @override Widget build(BuildContext context) { return alignment != null ? Align( alignment: alignment!, child: _buildWidget(), ) : _buildWidget(); } Widget _buildWidget() { return Padding( padding: margin ?? EdgeInsets.zero, child: InkWell( onTap: onTap, child: _buildCircleImage(), ), ); } ///build the image with border radius _buildCircleImage() { if (radius != null) { return ClipRRect( // borderRadius: radius, borderRadius: radius ?? BorderRadius.zero, child: _buildImageWithBorder(), ); } else { return _buildImageWithBorder(); } } ///build the image with border and border radius style _buildImageWithBorder() { if (border != null) { return Container( decoration: BoxDecoration( border: border, borderRadius: radius, ), child: _buildImageView(), ); } else { return _buildImageView(); } } Widget _buildImageView() { if (svgPath != null && svgPath!.isNotEmpty) { return Container( height: height, width: width, child: SvgPicture.asset( svgPath!, height: height, width: width, fit: fit ?? BoxFit.contain, color: color, ), ); } else if (file != null && file!.path.isNotEmpty) { return Image.file( file!, height: height, width: width, fit: fit ?? BoxFit.cover, color: color, ); } else if (url != null && url!.isNotEmpty) { return CachedNetworkImage( height: height, width: width, fit: fit, imageUrl: url!, color: color, placeholder: (context, url) => Container( height: 30, width: 30, child: LinearProgressIndicator( color: Colors.grey.shade200, backgroundColor: Colors.grey.shade100, ), ), errorWidget: (context, url, error) => Image.asset( placeHolder, height: height, width: width, fit: fit ?? BoxFit.cover, ), ); } else if (imagePath != null && imagePath!.isNotEmpty) { return Image.asset( imagePath!, height: height, width: width, fit: fit ?? BoxFit.cover, color: color, ); } return SizedBox(); } }