protonimage

Protonimage is a Flutter package that provides a customizable image widget with built-in shimmer loading effect.

A Flutter plugin for preloading images.

Android iOS Linux macOS Web Windows
Support SDK 16+ 12.0+ Any 10.14+ Any Windows 10+

About

Protonimage offers a convenient way to display images in your Flutter applications with the added benefit of a shimmer loading effect, giving your UI a polished and professional look. It allows you to easily load images from network URLs, customize the appearance, and control the loading process.

Screenshots

Shimmer Feed
Screenshot 1 Screenshot 2

Features

  • Customizable Shimmer Effect: Easily add a shimmer loading effect to your images.
  • Flexible Configuration: Adjust height, aspect ratio, border radius, and more.
  • Network Image Support: Load images from network URLs effortlessly.
  • Fit Options: Control how the image is inscribed into the widget with BoxFit.
  • Fallback Background Color: Specify a fallback color while the image is loading.
  • Tested: The widget is thoroughly tested with unit tests to ensure reliability.

Installation

With Dart:

dart pub add protonimage

With Flutter:

flutter pub add protonimage

This will add a line like this to your package's pubspec.yaml (and run an implicit flutter pub get):

dependencies:
  protonimage: ^1.0.0  # Replace with the latest version

Alternatively, your editor might support flutter pub get. Check the docs for your editor to learn more.

Import it

Now in your Dart code, you can use:

import 'package:protonimage/protonimage.dart';

Usage

The easiest way to use this library via top-level function format(date):

Quick Usage

import 'package:flutter/material.dart';
import 'package:protonimage/protonimage.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('ProtonImage Example'),
      ),
      body: Center(
        child: ProtonImage(
          path: 'https://example.com/image.jpg',
          height: 200,
          radius: 20,
        ),
      ),
    );
  }
}

Customization

ProtonImage(
  path: 'https://example.com/image.jpg',
  height: 200,
  radius: 20,
  aspectRatio: 16 / 9,
  baseColor: Colors.white24,
  highlightColor: Colors.white54,
  backgroundColor: Colors.white,
)

Customization Options

The "Customization Options" section outlines properties to customize image widgets, covering image source, dimensions, border radius, aspect ratio, shimmer effect colors, loading background color, and gradient overlay.

Property Description
path The URL or path of the image to be displayed.
height The height of the image widget.
radius The border radius for rounded corners.
aspectRatio The aspect ratio of the image (width/height).
baseColor The base color of the shimmer effect.
highlightColor The highlight color of the shimmer effect.
backgroundColor The background color while the image is loading.
overlayGradient The gradient overlay to be applied on the image.

Image Overlay

ProtonImage(
  path: 'https://example.com/image2.jpg',
  height: 200,
  radius: 20,
  overlayGradient: LinearGradient(
    begin: Alignment.bottomRight,
    stops: const [0.1, 0.8],
    colors: [
      Colors.black45.withOpacity(.1),
      Colors.black45.withOpacity(.0),
    ],
  ),
)

Available Gradients Overlay

Gradient Type Description
LinearGradient A linear gradient that transitions along a straight line.
RadialGradient A radial gradient that transitions outward from the center.
SweepGradient A gradient that follows the perimeter of a circle.
Aspect Ratio Description
1:1 Square
16:9 Widescreen
4:3 Standard TV
3:2 Classic Photography
21:9 Ultra-Widescreen
9:16 Portrait (for mobile)
3:4 Portrait (for photography)

Examples

For more examples and usage, please refer to the example directory.

Contributing

Contributions are welcome! If you encounter any issues or have suggestions for improvements, please open an issue or submit a pull request on GitHub.

Libraries

protonimage
A library for providing custom image widgets with various configurations.