You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
BackdropFilter blur ignores ClipOval when a UiKitView is in the tree (Impeller, iOS, regression persists in 3.44.4) #188971
On iOS with Impeller, a BackdropFilter wrapped in a ClipOval samples and
paints its blur over the widget's rectangular bounds — a square halo — as
soon as a UiKitView is present in the same scene. Without the platform
view the clip is honored. #175048 describes this family and was closed as
fixed via #115926's fix (available since 3.41), but this reproduces on
stable 3.44.4.
@foux Thanks for the report. Can you verify if the issue persists in the latest master? If it does, can you provide a minimal reproducible example (MRE) or a self-contained main.dart to replicate the behavior as the provided sample in not enough?
Self-contained main.dart below. The only dependency is webview_flutter (flutter pub add webview_flutter), used purely as a convenient first-party platform view — any UiKitView triggers the bug (in our app it is an AVFoundation video layer). The FAB swaps the platform view for an identical Flutter-drawn stripe pattern; with the platform view gone the blur is correctly clipped to the circle, with it present the blur paints over the widget's full rectangular bounds.
main.dart
// Minimal reproduction for https://github.com/flutter/flutter/issues/188971//// A BackdropFilter wrapped in a ClipOval paints its blur over the widget's// rectangular bounds (square halo) as soon as a UiKitView is present in the// same scene. webview_flutter is used only as a convenient first-party// platform view rendering bright content underneath the filter.//// Tap the FAB to swap the platform view for an identical Flutter-drawn// stripe pattern: the blur is then correctly clipped to a circle.import'dart:ui';
import'package:flutter/material.dart';
import'package:webview_flutter/webview_flutter.dart';
voidmain() =>runApp(constReproApp());
classReproAppextendsStatefulWidget {
constReproApp({super.key});
@overrideState<ReproApp> createState() =>_ReproAppState();
}
class_ReproAppStateextendsState<ReproApp> {
latefinalWebViewController _controller;
bool _usePlatformView =true;
@overridevoidinitState() {
super.initState();
_controller =WebViewController()
..loadHtmlString(
'<body style="margin:0;height:100vh;background:''repeating-linear-gradient(45deg,#000 0 20px,#fff 20px 40px)"></body>',
);
}
// Same stripes as the HTML page, rendered by Flutter itself.staticconst _stripes =DecoratedBox(
decoration:BoxDecoration(
gradient:LinearGradient(
begin:Alignment.topLeft,
end:Alignment(-0.98, -0.96),
colors: [Colors.black, Colors.black, Colors.white, Colors.white],
stops: [0, 0.5, 0.5, 1],
tileMode:TileMode.repeated,
),
),
);
@overrideWidgetbuild(BuildContext context) {
returnMaterialApp(
home:Scaffold(
body:Stack(
children: [
// Bright background: platform view (bug) or plain widget (OK).SizedBox.expand(
child: _usePlatformView
?WebViewWidget(controller: _controller)
: _stripes,
),
Center(
child:SizedBox(
width:120,
height:120,
child:ClipOval(
child:BackdropFilter(
filter:ImageFilter.blur(sigmaX:10, sigmaY:10),
child:constColoredBox(color:Color(0x66000000)),
),
),
),
),
],
),
floatingActionButton:FloatingActionButton.extended(
onPressed: () =>setState(() => _usePlatformView =!_usePlatformView),
label:Text(_usePlatformView
?'platform view (bug)':'plain widget (OK)'),
),
),
);
}
}
To rule out the iOS 27 beta as a factor: re-ran the same main.dart on a second device running iOS 26.5.2 (stable) — iPad Pro 12.9" 3rd gen (iPad8,7), same master build (a3222d4a24). Identical result: square blur halo with the platform view in the tree, correct circular clip without it.
So the bug reproduces on both iOS 26 (stable) and iOS 27 (beta), and is not tied to the OS version.
This isn't a regression - with the reproducible main.dart shared by OP even though the bug is present, the linked issue was about ClipRRect which is indeed fixed
@foux as a workaround you can do ClipRRect (if a circle is fine) for the moment. Will get this working soon :)
Looks like the current internal implementation of ClipOval on a backdrop propogates as a ClipPath . We do already have an issue that for ClipPath this currently no ops. Which means this issue with get fixed automatically when #179127 is fixed.
A better fix for this is to actually add the optimization that'd make a ClipOval a ClipRRect under the hood since thats more efficient anyway. ApplyClip already has these optimizations so it makes sense that PushClipToEmbeddedNativeViewMutatorStack mirrors them.
Reopening this issue since that'd seperate the 2 issues
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.
Activity
saurabh-mirajkar commentedon Jul 6, 2026
@foux Thanks for the report. Can you verify if the issue persists in the latest master? If it does, can you provide a minimal reproducible example (MRE) or a self-contained
main.dartto replicate the behavior as the provided sample in not enough?foux commentedon Jul 6, 2026
@saurabh-mirajkar Thanks for looking at this. Verified on latest master — still reproduces, identical to stable.
a3222d4a24(2026-07-06) → square blur haloSelf-contained
main.dartbelow. The only dependency iswebview_flutter(flutter pub add webview_flutter), used purely as a convenient first-party platform view — anyUiKitViewtriggers the bug (in our app it is an AVFoundation video layer). The FAB swaps the platform view for an identical Flutter-drawn stripe pattern; with the platform view gone the blur is correctly clipped to the circle, with it present the blur paints over the widget's full rectangular bounds.main.dart
a3222d4a24Device: iPhone 13 Pro Max, iOS 27.0, Impeller (default renderer), hybrid composition.
foux commentedon Jul 6, 2026
To rule out the iOS 27 beta as a factor: re-ran the same
main.darton a second device running iOS 26.5.2 (stable) — iPad Pro 12.9" 3rd gen (iPad8,7), same master build (a3222d4a24). Identical result: square blur halo with the platform view in the tree, correct circular clip without it.So the bug reproduces on both iOS 26 (stable) and iOS 27 (beta), and is not tied to the OS version.
saurabh-mirajkar commentedon Jul 6, 2026
@foux Thanks for the updated repro and verification on both stable and current master. Labeling and routing for further investigation.
4 remaining items
jmagman commentedon Jul 7, 2026
@Hari-07 you may be interested in this one 🙂
Hari-07 commentedon Jul 7, 2026
Ty for the mention.
This isn't a regression - with the reproducible main.dart shared by OP even though the bug is present, the linked issue was about ClipRRect which is indeed fixed
@foux as a workaround you can do ClipRRect (if a circle is fine) for the moment. Will get this working soon :)
Hari-07 commentedon Jul 7, 2026
Looks like the current internal implementation of
ClipOvalon a backdrop propogates as aClipPath. We do already have an issue that forClipPaththis currently no ops. Which means this issue with get fixed automatically when #179127 is fixed.Not sure if that counts as duplicate
jmagman commentedon Jul 7, 2026
Makes sense as a duplicate, thanks @Hari-07!
ClipPathon backdrop filter #179127Hari-07 commentedon Jul 8, 2026
A better fix for this is to actually add the optimization that'd make a
ClipOvalaClipRRectunder the hood since thats more efficient anyway.ApplyClipalready has these optimizations so it makes sense thatPushClipToEmbeddedNativeViewMutatorStackmirrors them.Reopening this issue since that'd seperate the 2 issues
Add `ClipPath` optimizations to backdrop clips as well (flutter#189118)
github-actions commentedon Aug 25, 2026
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 -vand a minimal reproduction of the issue.