Search packages, repositories and app categories

blurhash_ffi cover
Package detailsv1.2.7

blurhash_ffi

A compact, fast and easy to use blurry image placeholder generator for Flutter using native ffi bindings.

AndroidiOSmacOSWindowsLinux
30-day downloads
3.2K
Likes
107
Pub points
130

Install package

flutter pub add blurhash_ffi

Package Overview

Package selection guidance compiled from public package information, community data, and project usage.

blurhash_ffi is a high-performance Flutter package that generates compact, visually appealing blurry image placeholders using native FFI bindings. It efficiently encodes and decodes BlurHash strings, enabling fast placeholder rendering without relying on pure Dart implementations. Ideal for improving perceived performance during image loading, it works across Android, iOS, macOS, Windows, and Linux. The package prioritizes speed and minimal memory usage while maintaining visual quality.

Use cases

  • Loading screen placeholders
  • Image gallery previews
  • Network image loading indicators
  • Offline content placeholders
  • Performance optimization in media-heavy apps

Key features

  • Native FFI performance
  • Cross-platform support
  • Compact hash encoding
  • Fast decoding
  • Low memory footprint

Suitable for

  • Apps with heavy image loading
  • High-performance UI requirements
  • Developers seeking native speed
  • Projects needing lightweight placeholders
  • Multi-platform Flutter apps

Considerations

  • Requires native compilation setup
  • Limited to BlurHash format only
  • May increase app size slightly
  • Not suitable for complex image processing
  • Depends on platform-specific FFI libraries

Original README

Original README snapshot from the linked source repository. Visit the repository for the latest content.

blurhash_ffi

A Blurhash compact Image placeholder encoder and decoder FFI implementation for Flutter in Rust via experemental feature Native Assets.

Matches the official Blurhash implementation in performance and quality.

blurhash_ffi

Supports

Platform Status Description
Android ✅ -
iOS ✅ -
macOS ✅ -
Linux ⚠️ Not tested
Windows ✅ -
Web ❌ Rust can compiled to WebAssembly, but no supported yet. This library compiled on standalone wasm module (not in Empscripten, AssemblyScript) that Dart can't be use non-JS enviroments. Also, Dart should use FFI bindings for call wasm module. Stopped issues: comment

Installation

Add dependency to your pubspec.yaml file following the command below:

For dart projects:

dart pub add dart_blurhash_ffi

For flutter projects:

dart pub add flutter_blurhash_ffi

Usage

To use this plugin, add blurhash_ffi as a dependency in your pubspec.yaml file

Flutter usage

import 'package:flutter_blurhash_ffi/flutter_blurhash_ffi.dart';

/// Encoding and Decoding all in One Step
///
/// `ImageProvider` in    -> Send your Image to be encoded.
/// `ImageProvider` out   -> Get your blurry image version.
class BlurhashMyImage extends StatelessWidget {
  final String imageUrl;
  const BlurhashMyImage({required this.imageUrl, super.key});

  @override
  Widget build(BuildContext context) {
    return Image(
      image: BlurhashFfiImage.fromImageProvider(
        NetworkImage(imageUrl),  // you can use any image provider of your choice.
        decodingHeight: 1920,
        decodingWidth: 1080,
      ),
      alignment: Alignment.center,
      fit: BoxFit.cover
    );
  }
}


class BlurhashMyImage2 extends StatelessWidget {
  final String blurhash;
  const BlurhashMyImage2({required this.blurhash, super.key});

  @override
  Widget build(BuildContext context) {
    return Image(
      image: BlurhashFfiImage(blurhash),
      width: 200,
      height: 200,
      alignment: Alignment.center,
      fit: BoxFit.cover
    );
  }
}

[!WARNING] Not recommend use it (without blurhash string param), because in this case, encoding and decoding will be performed. This effect can be obtained almost through ImageFiltered.

Encoding

Encoding now uses sync interface (without Future).

import 'package:dart_blurhash_ffi/dart_blurhash_ffi.dart';

final Uint8List blurhashImageBytes = File('assets/image.webp').readAsBytesSync();

/// Signature
/// static String encode(
///   Uint8List data, {
///   int componentX = 4,
///   int componentY = 3,
/// })
/// may throw `BlurhashFFIException` if encoding fails.
final String blurHash = BlurhashFFI.encode(blurhashImageBytes);

// Or via codec

final String blurHashSame = BlurhashFfiCodec().encoder.convert(blurhashImageBytes);

Decoding

Decoding now uses sync interface (without Future).

import 'package:dart_blurhash_ffi/dart_blurhash_ffi.dart';

final String blurhash = 'LGFO~6Yk^6#M@-5c,1Ex@@or[j6o';

/// Signature
///
/// static Uint8List decode(
///   String blurhash, {
///   int width = 32,
///   int height = 32,
///   int punch = 1,
/// })
/// may throw `BlurhashFFIException` if decoding fails.
final decoded = BlurhashFFI.decode(blurhash);

// or via codec

final String decodedSame = BlurhashFfiCodec().decoder.convert(blurhash);

Check the example for more details

contributions in the form of PR's and Issues are a welcome

Categories

Dependencies

Dependency list 2 items

Source repository

Projects using this package

No data available yet.