diff --git a/mobile/lib/features/channels/channels_page.dart b/mobile/lib/features/channels/channels_page.dart index deacde27b6..b60bd5eb66 100644 --- a/mobile/lib/features/channels/channels_page.dart +++ b/mobile/lib/features/channels/channels_page.dart @@ -192,6 +192,12 @@ class ChannelsPage extends HookConsumerWidget { : filterContentHeight, useNativeNavigation: messagesFilters == null, ); + // A sheet's dim barrier can't composite over Home's native soft edge, so + // use the Flutter backdrop while another route covers this page. + final route = ModalRoute.of(context); + final headerNativeSuppressed = useValueNotifier(false); + headerNativeSuppressed.value = + messagesFilters != null && !(route?.isCurrent ?? true); final communityAvatarKey = useMemoized(GlobalKey.new); final nativeCommunityAvatarBounds = useRef(null); final headerKey = useMemoized(GlobalKey.new); @@ -607,6 +613,7 @@ class ChannelsPage extends HookConsumerWidget { onNativeReadyChanged: (ready) => nativeHeaderReady.value = ready, nativeTitle: '', useNativeNavigation: messagesFilters == null, + nativeViewSuppressed: headerNativeSuppressed, nativeLeading: messagesFilters != null ? null : IosNavigationAction( diff --git a/mobile/test/features/home/home_page_test.dart b/mobile/test/features/home/home_page_test.dart index bca16bfc6f..c844d199fd 100644 --- a/mobile/test/features/home/home_page_test.dart +++ b/mobile/test/features/home/home_page_test.dart @@ -12,6 +12,7 @@ import 'package:buzz/features/home/messages_filters.dart'; import 'package:buzz/features/home/messages_navigation_bar.dart'; import 'package:buzz/shared/widgets/ios_message_create_button.dart'; import 'package:buzz/shared/widgets/ios_glass_navigation_button.dart'; +import 'package:buzz/shared/widgets/ios_navigation_bar.dart'; import 'package:buzz/features/search/search_page.dart'; import 'package:buzz/shared/theme/theme.dart'; import 'package:flutter/foundation.dart'; @@ -576,6 +577,20 @@ void main() { await tester.pumpAndSettle(); expect(tester.widget(homeOpacity).opacity, 1); expect(find.text('Messages'), findsOneWidget); + // A sheet's dim barrier can't composite over the native header edge. + final headerNativeView = find.descendant( + of: find.byType(FrostedAppBar), + matching: find.byType(IosNavigationBar), + ); + expect(headerNativeView, findsOneWidget); + await tester.longPress(find.text('General')); + await tester.pumpAndSettle(); + expect(find.text('Copy channel name'), findsOneWidget); + expect(headerNativeView, findsNothing); + await tester.tapAt(const Offset(20, 20)); + await tester.pumpAndSettle(); + expect(find.text('Copy channel name'), findsNothing); + expect(headerNativeView, findsOneWidget); await tester.pumpWidget(const SizedBox.shrink()); debugDefaultTargetPlatformOverride = null; },