Polish iOS header glass and scroll-edge blur (#8097)

Wrap channel and DM titles in native glass and remove the
temporary-channel clock. Apply a soft status-area fade across iPhone
navigation, and fade the large title with scroll progress and fade in
the centered title, with Reduce Motion support.

Validation: mobile formatting/analysis and the full mobile suite passed.
Native iOS 26/27 simulator checks covered actual text opacity, header
resizing, quick reversal, and restored heading position; signed iPhone
build, installation, and launch succeeded. `just ci` was blocked by disk
exhaustion during Rust compilation.

---------

Signed-off-by: kenny lopez <klopez4212@gmail.com>
This commit is contained in:
klopez4212
2026-10-05 11:55:11 -04:00
committed by GitHub
parent 46e60206a4
commit 8746bfebff
7 changed files with 483 additions and 130 deletions

View File

@@ -10,6 +10,34 @@ import 'package:flutter_test/flutter_test.dart';
import 'package:hooks_riverpod/hooks_riverpod.dart';
void main() {
testWidgets('iOS conversations request a backdrop before scrolling', (
tester,
) async {
debugDefaultTargetPlatformOverride = TargetPlatform.iOS;
addTearDown(() => debugDefaultTargetPlatformOverride = null);
await tester.pumpWidget(
ProviderScope(
child: MaterialApp(
theme: AppTheme.light(),
home: const Stack(
children: [
FrostedAppBar(
title: Text('Alice'),
nativeSubtitle: 'Online',
alwaysFrosted: true,
),
],
),
),
),
);
final view = tester.widget<UiKitView>(find.byType(UiKitView));
expect(view.creationParams, containsPair('alwaysFrosted', true));
expect(view.creationParams, containsPair('subtitle', 'Online'));
await tester.pumpWidget(const SizedBox());
debugDefaultTargetPlatformOverride = null;
});
testWidgets(
'conversation backdrop stays mounted across scroll and keyboard changes',
(tester) async {