fix(plex): repair alpha jump bar

This commit is contained in:
edde746
2026-05-08 05:36:39 +02:00
parent 92014404f5
commit f07feaaa52
7 changed files with 263 additions and 83 deletions
@@ -0,0 +1,39 @@
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:plezy/media/library_first_character.dart';
import 'package:plezy/screens/libraries/alpha_jump_bar.dart';
void main() {
testWidgets('Enter jumps to the highlighted letter', (tester) async {
final focusNode = FocusNode(debugLabel: 'test_alpha_jump_bar');
addTearDown(focusNode.dispose);
int? jumpedTo;
await tester.pumpWidget(
MaterialApp(
home: Scaffold(
body: SizedBox(
height: 300,
child: AlphaJumpBar(
firstCharacters: const [
LibraryFirstCharacter(key: 'A', title: 'A', size: 3),
LibraryFirstCharacter(key: 'B', title: 'B', size: 4),
LibraryFirstCharacter(key: 'C', title: 'C', size: 2),
],
currentLetter: 'B',
focusNode: focusNode,
onJump: (index) => jumpedTo = index,
),
),
),
),
);
focusNode.requestFocus();
await tester.pump();
await tester.sendKeyEvent(LogicalKeyboardKey.enter);
expect(jumpedTo, 3);
});
}
@@ -0,0 +1,28 @@
import 'package:flutter_test/flutter_test.dart';
import 'package:plezy/screens/libraries/library_alpha_scroll_metrics.dart';
void main() {
test('maps scroll offsets to item indices by row and column count', () {
const metrics = LibraryAlphaScrollMetrics(columnCount: 4, rowHeight: 100, itemWidth: 150, itemHeight: 90);
expect(metrics.itemIndexFromScrollOffset(0, contentStartOffset: 50, totalSize: 40), 0);
expect(metrics.itemIndexFromScrollOffset(149, contentStartOffset: 50, totalSize: 40), 0);
expect(metrics.itemIndexFromScrollOffset(150, contentStartOffset: 50, totalSize: 40), 4);
expect(metrics.itemIndexFromScrollOffset(1050, contentStartOffset: 50, totalSize: 40), 39);
});
test('maps item indices back to scroll offsets', () {
const metrics = LibraryAlphaScrollMetrics(columnCount: 4, rowHeight: 100, itemWidth: 150, itemHeight: 90);
expect(metrics.scrollOffsetForItemIndex(0, contentStartOffset: 50), 50);
expect(metrics.scrollOffsetForItemIndex(3, contentStartOffset: 50), 50);
expect(metrics.scrollOffsetForItemIndex(4, contentStartOffset: 50), 150);
expect(metrics.scrollOffsetForItemIndex(9, contentStartOffset: 50), 250);
});
test('counts visible items using one extra trailing row', () {
const metrics = LibraryAlphaScrollMetrics(columnCount: 3, rowHeight: 100, itemWidth: 150, itemHeight: 90);
expect(metrics.visibleItemCount(250), 12);
});
}