Skip to content

[Impeller] ImageFilterConfig.blur(bounded: true) in BackdropFilter does not apply blur in a ListView #184447

Closed

Description

@dkajiwara

Steps to reproduce

  1. Create a ListView.builder with multiple items
  2. Each item contains an image with a BackdropFilter overlay using ImageFilterConfig.blur(sigmaX: 10, sigmaY: 10, bounded: true)
  3. Run the app on an Android device with Impeller enabled
  4. Observe that blur is not applied correctly — the blur region appears misaligned or missing depending on scroll position
  5. Switch to Skia (--no-enable-impeller) and confirm blur works correctly on all items

Expected results

All items in the ListView should have the BackdropFilter blur applied equally.

Actual results

When using Impeller with bounded: true, the blur effect is not applied correctly. Using Skia or bounded: false, blur works correctly on all items.

Code sample

Code sample
  import 'package:flutter/material.dart';

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

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

    @override
    Widget build(BuildContext context) {
      return MaterialApp(
        title: 'BackdropFilter Bounded Blur Bug',
        theme: ThemeData(colorSchemeSeed: Colors.blue),
        home: const ImageListScreen(),
      );
    }
  }

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

    static const _imageCount = 30;

    String _imageUrl(int index) => 'https://picsum.photos/seed/$index/400/300';

    @override
    Widget build(BuildContext context) {
      return Scaffold(
        appBar: AppBar(title: const Text('BackdropFilter Bounded Blur Bug')),
        body: ListView.builder(
          itemCount: _imageCount,
          itemBuilder: (context, index) {
            return Padding(
              padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 8),
              child: ClipRRect(
                borderRadius: BorderRadius.circular(12),
                child: SizedBox(
                  height: 220,
                  child: Stack(
                    fit: StackFit.expand,
                    children: [
                      Image.network(
                        _imageUrl(index),
                        fit: BoxFit.cover,
                      ),
                      Positioned(
                        left: 0,
                        right: 0,
                        bottom: 0,
                        height: 72,
                        child: ClipRect(
                          child: BackdropFilter(
                            filterConfig: ImageFilterConfig.blur(
                              sigmaX: 10,
                              sigmaY: 10,
                              bounded: true,
                            ),
                            child: Container(
                              color: Colors.black.withValues(alpha: 0.2),
                              alignment: Alignment.centerLeft,
                              padding: const EdgeInsets.symmetric(horizontal: 16),
                              child: Text(
                                'Image #${index + 1}',
                                style: const TextStyle(
                                  color: Colors.white,
                                  fontSize: 18,
                                  fontWeight: FontWeight.bold,
                                ),
                              ),
                            ),
                          ),
                        ),
                      ),
                    ],
                  ),
                ),
              ),
            );
          },
        ),
      );
    }
  }

Screenshots or Video

Screenshots / Video demonstration
  • Impeller:
impeller_recording.mp4
  • Skia:
skia_recording.mp4

Logs

Logs
[Paste your logs here]

Flutter Doctor output

Doctor output
[✓] Flutter (Channel stable, 3.41.6, on macOS 26.3.1 25D2128 darwin-arm64, locale ja-JP) [925ms]
    • Flutter version 3.41.6 on channel stable at /Users/dkajiii/.local/share/mise/http-tarballs/99d17a780e1f8e4bf51665d91611913d064da37d40b16f1dd219f08ba1fc379c
    • Upstream repository https://github.com/flutter/flutter.git
    • Framework revision db50e20168 (6 days ago), 2026-03-25 16:21:00 -0700
    • Engine revision 425cfb54d0
    • Dart version 3.11.4
    • DevTools version 2.54.2
    • Feature flags: enable-web, enable-linux-desktop, enable-macos-desktop, enable-windows-desktop, enable-android, enable-ios, cli-animations, enable-native-assets, omit-legacy-version-file, enable-lldb-debugging, enable-uiscene-migration

[!] Android toolchain - develop for Android devices (Android SDK version 35.0.0-rc3) [1,630ms]
    • Android SDK at /Users/dkajiii/Library/Android/sdk
    • Emulator version 36.3.10.0 (build_id 14472402) (CL:N/A)
    • Platform android-36, build-tools 35.0.0-rc3
    • Java binary at: /Applications/Android Studio Narwhal.app/Contents/jbr/Contents/Home/bin/java
      This is the JDK bundled with the latest Android Studio installation on this machine.
      To manually set the JDK path, use: `flutter config --jdk-dir="path/to/jdk"`.
    • Java version OpenJDK Runtime Environment (build 21.0.10+-117844308-b1163.108)
    ! Some Android licenses not accepted. To resolve this, run: flutter doctor --android-licenses

[✓] Xcode - develop for iOS and macOS (Xcode 26.2) [1,680ms]
    • Xcode at /Applications/Xcode_26.2.app/Contents/Developer
    • Build 17C52
    • CocoaPods version 1.16.2

[✓] Chrome - develop for the web [5ms]
    • Chrome at /Applications/Google Chrome.app/Contents/MacOS/Google Chrome

[✓] Network resources [262ms]
    • All expected network resources are available.

! Doctor found issues in 1 category.

Activity

  1. added
    in triagePresently being triaged by the triage team
    platform-androidAndroid applications specifically
    engineflutter/engine related. See also e: labels.
    e: impellerImpeller rendering backend issues and features requests
    platform-iosiOS applications specifically
    has reproducible stepsThe issue has been confirmed reproducible and is ready to work on
    and removed
    in triagePresently being triaged by the triage team
    on Apr 1, 2026
  2. mbcorona commented on Apr 1, 2026

    @mbcorona
    Member

    Hi @dkajiwara , thanks for reporting this and providing a code sample that reproduces the issue. I can confirm the same results when running with Impeller on both Android and iOS, Flutter 3.41.6.

    Routing to team-engine for further investigation.

  3. jason-simmons commented on Apr 2, 2026

    @jason-simmons
    Contributor

    Bounded blur is not currently implemented for the Skia renderer.

    @dkwingsmt Does something in the GaussianBlurFilterContents mapping of the source bounds need to be adjusted for this use case?

  4. dkwingsmt commented on Apr 2, 2026

    @dkwingsmt
    Contributor

    Might be related to #182066 , which also reported that the blur region mapping is broken in certain cases. I haven't got time to investigate that problem yet, but I plan to. I'll see if fixing that issue also fixes this one.

  5. added
    P2Important issues not at the top of the work list
    on Apr 6, 2026
  6. gaaclarke commented on Aug 24, 2026

    @gaaclarke
    Member

    @dkwingsmt this is still showing up, can you give this another pass please?

  7. github-actions commented on Sep 9, 2026

    @github-actions

    This thread has been automatically locked since there has not been any recent activity after it was closed. If you are still experiencing a similar issue, please open a new bug, including the output of flutter doctor -v and a minimal reproduction of the issue.

  8. locked as resolved and limited conversation to collaborators on Sep 9, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    P2Important issues not at the top of the work liste: impellerImpeller rendering backend issues and features requestsengineflutter/engine related. See also e: labels.has reproducible stepsThe issue has been confirmed reproducible and is ready to work onplatform-androidAndroid applications specificallyplatform-iosiOS applications specificallyteam-engineOwned by Engine teamtriaged-engineTriaged by Engine team

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions