backdrop filter grouping

This commit is contained in:
Thibault Deckers 2025-02-15 00:01:40 +01:00
parent ae9e2977b4
commit 98537339bd
4 changed files with 37 additions and 34 deletions

View file

@ -180,10 +180,11 @@ class _AvesAppState extends State<AvesApp> with WidgetsBindingObserver {
final EventChannel _errorChannel = const OptionalEventChannel('deckers.thibault/aves/error');
// Flutter has various page transition implementations for Android:
// - `FadeUpwardsPageTransitionsBuilder` on Oreo / API 27 and below
// - `OpenUpwardsPageTransitionsBuilder` on Pie / API 28
// - `ZoomPageTransitionsBuilder` on Android 10 / API 29 and above (default in Flutter v3.22.0)
// - `PredictiveBackPageTransitionsBuilder` for Android 15 / API 35 intra-app predictive back
// - `FadeUpwardsPageTransitionsBuilder` on Oreo / Android 8 / API 27 and below
// - `OpenUpwardsPageTransitionsBuilder` on Pie / Android 9 / API 28
// - `ZoomPageTransitionsBuilder` on Q / Android 10 / API 29 (default in Flutter v3.22.0)
// - `FadeForwardsPageTransitionsBuilder` on U / Android 14 / API 34
// - `PredictiveBackPageTransitionsBuilder` for Android 15 / API 35 intra-app predictive back (default to `ZoomPageTransitionsBuilder`)
static const _defaultPageTransitionsBuilder = FadeUpwardsPageTransitionsBuilder();
static final GlobalKey<NavigatorState> _navigatorKey = GlobalKey(debugLabel: 'app-navigator');
static ScreenBrightness? _screenBrightness;

View file

@ -7,8 +7,6 @@ final _filter = ImageFilter.blur(sigmaX: 4, sigmaY: 4);
// as it yields performance issues when there are other layers on top
final _identity = ImageFilter.matrix(Matrix4.identity().storage);
// TODO TLAD [impeller] use `BackdropKey`
class BlurredRect extends StatelessWidget {
final bool enabled;
final Widget child;
@ -22,7 +20,7 @@ class BlurredRect extends StatelessWidget {
@override
Widget build(BuildContext context) {
return ClipRect(
child: BackdropFilter(
child: BackdropFilter.grouped(
// do not modify tree when disabling filter
filter: enabled ? _filter : _identity,
child: child,
@ -61,7 +59,7 @@ class BlurredRRect extends StatelessWidget {
Widget build(BuildContext context) {
return ClipRRect(
borderRadius: borderRadius ?? BorderRadius.zero,
child: BackdropFilter(
child: BackdropFilter.grouped(
// do not modify tree when disabling filter
filter: enabled ? _filter : _identity,
child: child,
@ -83,7 +81,7 @@ class BlurredOval extends StatelessWidget {
@override
Widget build(BuildContext context) {
return ClipOval(
child: BackdropFilter(
child: BackdropFilter.grouped(
// do not modify tree when disabling filter
filter: enabled ? _filter : _identity,
child: child,

View file

@ -249,12 +249,14 @@ class _GeoMapState extends State<GeoMap> {
child = Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
mapHeight != null
BackdropGroup(
child: mapHeight != null
? SizedBox(
height: mapHeight,
child: child,
)
: Expanded(child: child),
),
SafeArea(
top: false,
bottom: false,

View file

@ -261,7 +261,8 @@ class _EntryViewerStackState extends State<EntryViewerStack> with EntryViewContr
return ValueListenableBuilder<bool>(
valueListenable: _viewLocked,
builder: (context, locked, child) {
return Stack(
return BackdropGroup(
child: Stack(
children: [
child!,
if (!pipEnabled) ...[
@ -282,6 +283,7 @@ class _EntryViewerStackState extends State<EntryViewerStack> with EntryViewContr
const BottomGestureAreaProtector(),
],
],
),
);
},
child: viewer,