imagePreviewImage function

Widget imagePreviewImage(
  1. String imagePath, {
  2. required String fallbackTitle,
  3. BoxFit fit = BoxFit.contain,
  4. int? cacheWidth,
  5. int? cacheHeight,
  6. Color gradientStart = const Color(0xFFE8EDF5),
  7. Color gradientEnd = const Color(0xFFDCE4F0),
  8. Color accentColor = const Color(0xFF4F5D9A),
  9. Color iconColor = const Color(0xFF94A3B8),
})

Implementation

Widget imagePreviewImage(
  String imagePath, {
  required String fallbackTitle,
  BoxFit fit = BoxFit.contain,
  int? cacheWidth,
  int? cacheHeight,
  Color gradientStart = const Color(0xFFE8EDF5),
  Color gradientEnd = const Color(0xFFDCE4F0),
  Color accentColor = const Color(0xFF4F5D9A),
  Color iconColor = const Color(0xFF94A3B8),
}) {
  final trimmed = imagePath.trim();
  if (trimmed.isEmpty) {
    return Builder(
      builder: (context) => imagePreviewPlaceholder(
        context,
        fallbackTitle,
        gradientStart: gradientStart,
        gradientEnd: gradientEnd,
        accentColor: accentColor,
        iconColor: iconColor,
      ),
    );
  }

  final image = trimmed.startsWith('http://') || trimmed.startsWith('https://')
      ? Image.network(
          trimmed,
          fit: fit,
          width: double.infinity,
          height: double.infinity,
          alignment: Alignment.center,
          filterQuality: FilterQuality.medium,
          cacheWidth: cacheWidth,
          cacheHeight: cacheHeight,
          gaplessPlayback: true,
          errorBuilder: (context, _, _) => imagePreviewPlaceholder(
            context,
            fallbackTitle,
            gradientStart: gradientStart,
            gradientEnd: gradientEnd,
            accentColor: accentColor,
            iconColor: iconColor,
          ),
        )
      : Image.asset(
          trimmed,
          fit: fit,
          width: double.infinity,
          height: double.infinity,
          alignment: Alignment.center,
          filterQuality: FilterQuality.medium,
          cacheWidth: cacheWidth,
          cacheHeight: cacheHeight,
          gaplessPlayback: true,
          errorBuilder: (context, _, _) => imagePreviewPlaceholder(
            context,
            fallbackTitle,
            gradientStart: gradientStart,
            gradientEnd: gradientEnd,
            accentColor: accentColor,
            iconColor: iconColor,
          ),
        );

  return image;
}