getImage static method

dynamic getImage(
  1. String? url,
  2. bool animate, {
  3. Scope? scope,
  4. String? defaultImage,
  5. double? width,
  6. double? height,
  7. String? fit,
  8. String? filter,
  9. bool fade = true,
  10. int? fadeDuration,
})

Get an image widget from any image type

Implementation

static dynamic getImage(String? url, bool animate, {Scope? scope, String? defaultImage, double? width, double? height, String? fit, String? filter, bool fade = true, int? fadeDuration})
{
  Widget? image;

  try
  {
    // parse the url
    Uri? uri = URI.parse(url);

    // bad url?
    if (uri == null)
    {
      if (defaultImage != null)
      {
        if (defaultImage.toLowerCase().trim() == 'none') {
          return Container();
        } else {
          return getImage(defaultImage, animate, defaultImage: null, fit: fit, width: width, height: height, filter: filter, fade: fade, fadeDuration: fadeDuration);
        }
      }
      return Icon(Icons.broken_image_outlined, size: 36, color: Colors.grey);
    }

    // error handler
    Widget errorHandler(BuildContext content, Object object, StackTrace? stacktrace)
    {
      Log().debug("Bad image url (${url?.substring(0,min(100,url.length - 1))}. Error is $object", caller: "errorHandler");
      if (defaultImage == null) return Icon(Icons.broken_image_outlined, size: 36, color: Colors.grey);
      if (defaultImage.toLowerCase().trim() == 'none') return Container();
      return getImage(defaultImage, animate, defaultImage: null, fit: fit, width: width, height: height, filter: filter, fade: fade, fadeDuration: fadeDuration);
    }

    // get image type
    switch (uri.scheme)
    {
      /// data uri
      case "data":
          if (uri.data != null) image = FadeInImage(placeholder: MemoryImage(placeholder), image: MemoryImage(uri.data!.contentAsBytes()), fit: getFit(fit), width: width, height: height, fadeInDuration: Duration(milliseconds: fadeDuration ?? 300), imageErrorBuilder: errorHandler);
          break;

      /// blob image from camera or file picker
      case "blob":
        image = kIsWeb ? Image.network(url!, fit: getFit(fit)) : Image.file(File(url!), fit: getFit(fit));
        break;

      /// file image
      case "file":

        // file picker and camera return uri references as file:C:/...?
        dynamic file = Platform.getFile(url!.replaceFirst("file:", ""));

        // user defined local files?
        file ??= Platform.getFile(uri.asFilePath());

        // no file found
        if (file == null) break;

        // svg image?
        if (uri.pageExtension == "svg") {
          image = SvgPicture.file(file!, fit: getFit(fit), width: width, height: height);
        } else {
          image = Image.file(file, fit: getFit(fit));
        }
        break;

      /// asset image
      case "assets":
        var assetpath = "${uri.scheme}/${uri.host}${uri.path}";

        // svg image?
        if (uri.pageExtension == "svg") {
          image = SvgPicture.asset(assetpath, fit: getFit(fit), width: width, height: height);
        } else {
          image = Image.asset(assetpath, fit: getFit(fit), width: width, height: height, errorBuilder: errorHandler);
        }
        break;

      /// web image
      default:
        if (uri.pageExtension == "svg") {
          image = SvgPicture.network(uri.url, fit: getFit(fit), width: width, height: height);
        } else
        {
          if (animate) {
            image = FadeInImage.memoryNetwork(placeholder: placeholder, image: uri.url, fit: getFit(fit), width: width, height: height, fadeInDuration: Duration(milliseconds: fadeDuration ?? 300), imageErrorBuilder: errorHandler);
          } else {
            image = Image.network(uri.url, fit: getFit(fit), width: width, height: height);
          }
        }
        break;
    }
  }
  catch(e)
  {
    Log().error("Error decoding image from $url. Error is $e");
  }

  // return widget
  return image ?? Image.memory(placeholder, fit: getFit(fit), width: width, height: height);
}