Open Source

Flutter package

flutter_shaders_ui

GPU-accelerated GLSL shader effects for Flutter UI — ten drop-in widgets, zero dependencies.

v1.1.223.2k / month40 likesMIT10 effectsFlutter SDK only

flutter_shaders_ui

Ten GPU shader effects as drop-in widgets: how they work, what they cost, and how to ship your first one.

source: README.md

Overview

What it is

flutter_shaders_ui is a collection of ready-to-use Flutter widgets powered by GLSL fragment shaders. Every effect — aurora, fire, glass, glow, ripple, shimmer, snow, water and waves — runs on the GPU and drops into your tree as an ordinary widget. There are zero external dependencies: the package uses only the Flutter SDK.

Each widget wraps a compiled fragment shader that renders behind or over its child. Shaders are compiled once and cached, animation is driven by a Flutter Ticker, and every effect can be switched off with a single enabled flag that renders only the child at zero GPU cost.

The ten effects

Ten drop-in widgets, grouped as backgrounds, overlays and interactive effects. Each one is documented in full on the effects reference.

  • AuroraEffectanimated aurora/northern-lights background.
  • FireEffectflickering flame effect.
  • GlassEffectfrosted-glass blur overlay.
  • GlowOrbpositionable glowing orb (static or bouncing).
  • PulseEffectbreathing pulse highlight.
  • RippleEffectexpanding ripple distortion.
  • ShimmerEffectsweeping shimmer for placeholders.
  • SnowEffectfalling snow particles.
  • WaterEffectanimated water surface distortion.
  • WaveBackgroundanimated wave gradient background.

How they perform

Effects are built to be cheap by default. The GPU does the work, the shader is compiled a single time, and a disabled effect costs nothing.

  • GPU-accelerated all effects run as GLSL fragment shaders on the GPU.
  • Compiled once and cached ShaderCache prevents recompilation.
  • Zero cost when disabled enabled: false renders only child, no GPU work.
  • Ticker-based animation respects Flutter's frame scheduling.
  • RepaintBoundary isolates shader repaints from the widget tree.

Requires Flutter 3.10.0 or newer and Dart 3.0.0 or newer.

Accessibility

Because animation respects the enabled flag, wire it to your reduced-motion setting — with enabled: false the widget renders only its child and does no GPU work.

Install

Add the package to your pubspec.yaml and run flutter pub get. The shaders ship with the package — no native code or extra setup.

pubspec.yamlyaml
dependencies:
  flutter_shaders_ui: ^1.0.4

Quick start

Import the library and wrap any widget. A WaveBackground fills the screen behind its child; a GlassEffect lays a frosted overlay on top.

Quick Startdart
import 'package:flutter_shaders_ui/flutter_shaders_ui.dart';

// Wave background
Scaffold(
  body: WaveBackground(
    color1: const Color(0xFF0D1B2A),
    color2: const Color(0xFF1B263B),
    child: Center(child: Text('Hello Shaders')),
  ),
)

// Glass card
ClipRRect(
  borderRadius: BorderRadius.circular(20),
  child: GlassEffect(
    frost: 0.4,
    opacity: 0.3,
    child: Padding(
      padding: EdgeInsets.all(16),
      child: CardContent(),
    ),
  ),
)

A minimal, complete app that layers a glass card over falling snow:

Minimal complete appdart
import 'package:flutter/material.dart';
import 'package:flutter_shaders_ui/flutter_shaders_ui.dart';

void main() {
  runApp(const ExampleApp());
}

class ExampleApp extends StatelessWidget {
  const ExampleApp({super.key});

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        body: SnowEffect(
          density: 0.5,
          speed: 1.0,
          child: Center(
            child: GlassEffect(
              frost: 0.4,
              opacity: 0.3,
              child: Padding(
                padding: const EdgeInsets.all(24),
                child: Text(
                  'flutter_shaders_ui',
                  style: Theme.of(context).textTheme.headlineMedium,
                ),
              ),
            ),
          ),
        ),
      ),
    );
  }
}

Composing effects

Effects compose naturally in a Stack. Layer a background, an ambient glow and your content, bottom to top.

Layered compositiondart
Stack(
  children: [
    // Layer 1: Wave background
    Positioned.fill(
      child: WaveBackground(
        color1: const Color(0xFF0B0E1A),
        color2: const Color(0xFF131B2E),
        amplitude: 0.15,
        speed: 0.4,
      ),
    ),
    // Layer 2: Ambient glow
    Positioned.fill(
      child: GlowOrb.bouncing(
        color: const Color(0xFF6366F1),
        radius: 0.18,
        glowIntensity: 0.3,
        speed: 0.08,
      ),
    ),
    // Layer 3: Content
    SafeArea(child: YourContent()),
  ],
)

Where next

Let's make something together.

If you have any questions about a new project or other inquiries, feel free to contact us. We will get back to you as soon as possible.

Codigee
We are using cookies. Learn more