diff --git a/lib/widgets/aves_app.dart b/lib/widgets/aves_app.dart index 19d924632..b8ed7390b 100644 --- a/lib/widgets/aves_app.dart +++ b/lib/widgets/aves_app.dart @@ -180,10 +180,11 @@ class _AvesAppState extends State 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 _navigatorKey = GlobalKey(debugLabel: 'app-navigator'); static ScreenBrightness? _screenBrightness; diff --git a/lib/widgets/common/fx/blurred.dart b/lib/widgets/common/fx/blurred.dart index c20fd1d4f..796188fa7 100644 --- a/lib/widgets/common/fx/blurred.dart +++ b/lib/widgets/common/fx/blurred.dart @@ -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, diff --git a/lib/widgets/common/map/geo_map.dart b/lib/widgets/common/map/geo_map.dart index a73b0886a..b8a43c7aa 100644 --- a/lib/widgets/common/map/geo_map.dart +++ b/lib/widgets/common/map/geo_map.dart @@ -249,12 +249,14 @@ class _GeoMapState extends State { child = Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ - mapHeight != null - ? SizedBox( - height: mapHeight, - child: child, - ) - : Expanded(child: child), + BackdropGroup( + child: mapHeight != null + ? SizedBox( + height: mapHeight, + child: child, + ) + : Expanded(child: child), + ), SafeArea( top: false, bottom: false, diff --git a/lib/widgets/viewer/entry_viewer_stack.dart b/lib/widgets/viewer/entry_viewer_stack.dart index 4d84853dd..b5fe46efd 100644 --- a/lib/widgets/viewer/entry_viewer_stack.dart +++ b/lib/widgets/viewer/entry_viewer_stack.dart @@ -261,27 +261,29 @@ class _EntryViewerStackState extends State with EntryViewContr return ValueListenableBuilder( valueListenable: _viewLocked, builder: (context, locked, child) { - return Stack( - children: [ - child!, - if (!pipEnabled) ...[ - if (locked) ...[ - const Positioned.fill( - child: AbsorbPointer(), - ), - Positioned.fill( - child: GestureDetector( - onTap: () => _overlayVisible.value = !_overlayVisible.value, + return BackdropGroup( + child: Stack( + children: [ + child!, + if (!pipEnabled) ...[ + if (locked) ...[ + const Positioned.fill( + child: AbsorbPointer(), ), - ), - _buildViewerLockedBottomOverlay(), - ] else - ..._buildOverlays(availableSize).map(_decorateOverlay), - const TopGestureAreaProtector(), - const SideGestureAreaProtector(), - const BottomGestureAreaProtector(), + Positioned.fill( + child: GestureDetector( + onTap: () => _overlayVisible.value = !_overlayVisible.value, + ), + ), + _buildViewerLockedBottomOverlay(), + ] else + ..._buildOverlays(availableSize).map(_decorateOverlay), + const TopGestureAreaProtector(), + const SideGestureAreaProtector(), + const BottomGestureAreaProtector(), + ], ], - ], + ), ); }, child: viewer,