mirror of
https://github.com/zarzet/SpotiFLAC-Mobile.git
synced 2026-10-01 21:59:43 +02:00
perf(mornye): share chrome backdrops and scale blur to clarity
This commit is contained in:
1 parent
718e13f24e
commit
e200879d14
4 files changed
+186
-71
No files matched your search
@@ -137,6 +137,44 @@ void main() {
|
||||
|
||||
const albumBlue = Color(0xff464566);
|
||||
|
||||
testWidgets(
|
||||
'player and navbar share a backdrop while moving capsules remain isolated',
|
||||
(tester) async {
|
||||
await pumpShell(tester, blur: true, liquidGlass: false);
|
||||
void expectSharedBackdrop() {
|
||||
final filters = find.descendant(
|
||||
of: find.byType(MornyeBottomBar),
|
||||
matching: find.byType(BackdropFilter),
|
||||
);
|
||||
final renderers = filters
|
||||
.evaluate()
|
||||
.map(
|
||||
(element) => element.findRenderObject()! as RenderBackdropFilter,
|
||||
)
|
||||
.toList();
|
||||
final shared = renderers
|
||||
.where((filter) => filter.backdropKey != null)
|
||||
.toList();
|
||||
expect(shared, hasLength(2));
|
||||
expect(shared[0].backdropKey, same(shared[1].backdropKey));
|
||||
// Side capsules overlap the folding tabs and must not join their group.
|
||||
expect(
|
||||
renderers.where((filter) => filter.backdropKey == null),
|
||||
hasLength(2),
|
||||
);
|
||||
}
|
||||
|
||||
expectSharedBackdrop();
|
||||
chrome.value = true;
|
||||
await tester.pump();
|
||||
await tester.pump(const Duration(milliseconds: 190));
|
||||
expectSharedBackdrop();
|
||||
await tester.pumpAndSettle();
|
||||
expectSharedBackdrop();
|
||||
expect(tester.takeException(), isNull);
|
||||
},
|
||||
);
|
||||
|
||||
for (final liquidGlass in [false, true]) {
|
||||
testWidgets(
|
||||
'navbar keeps its backdrop blurred throughout motion (liquid: $liquidGlass)',
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
import 'dart:ui' as ui;
|
||||
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
||||
import 'package:flutter_test/flutter_test.dart';
|
||||
@@ -115,6 +117,54 @@ void main() {
|
||||
expect(tester.takeException(), isNull);
|
||||
});
|
||||
|
||||
testWidgets(
|
||||
'low clarity uses a small blur and mid-range glass caps its radius',
|
||||
(tester) async {
|
||||
Future<ui.ImageFilter?> filterFor(double clarity, bool liquid) async {
|
||||
await tester.pumpWidget(
|
||||
ProviderScope(
|
||||
key: UniqueKey(),
|
||||
overrides: [
|
||||
mornyeGlassLevelProvider.overrideWithValue(
|
||||
liquid ? MornyeGlassLevel.liquid : MornyeGlassLevel.frosted,
|
||||
),
|
||||
],
|
||||
child: MaterialApp(
|
||||
theme: MornyeTheme.build(Brightness.light, glassClarity: clarity),
|
||||
home: const MornyeGlass.navigation(
|
||||
blurEnabled: true,
|
||||
child: SizedBox(width: 200, height: 50),
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
final filters = tester.widgetList<BackdropFilter>(
|
||||
find.byType(BackdropFilter),
|
||||
);
|
||||
return filters.isEmpty ? null : filters.single.filter;
|
||||
}
|
||||
|
||||
expect(await filterFor(0, false), isNull);
|
||||
expect(await filterFor(0.1, false), isNull);
|
||||
expect(
|
||||
await filterFor(0.25, false),
|
||||
ui.ImageFilter.blur(sigmaX: 4, sigmaY: 4),
|
||||
);
|
||||
expect(
|
||||
await filterFor(0.1, true),
|
||||
ui.ImageFilter.blur(sigmaX: 4, sigmaY: 4),
|
||||
);
|
||||
expect(
|
||||
await filterFor(1, false),
|
||||
ui.ImageFilter.blur(sigmaX: 8, sigmaY: 8),
|
||||
);
|
||||
expect(
|
||||
await filterFor(1, true),
|
||||
ui.ImageFilter.blur(sigmaX: 18, sigmaY: 18),
|
||||
);
|
||||
},
|
||||
);
|
||||
|
||||
for (final clarity in [0.0, 0.5]) {
|
||||
testWidgets('liquid tab and segment pills follow clarity ($clarity)', (
|
||||
tester,
|
||||
|
||||
Reference in new issue
Block a user