Merge branch 'refactor/model' into feat/ui
This commit is contained in:
commit
34f6abad32
|
|
@ -171,6 +171,36 @@ void main() {
|
|||
final pagesSidebar = find.byType(PagesSidebar);
|
||||
expect(pagesSidebar, findsOneWidget);
|
||||
|
||||
// Helper to read the background color of a thumbnail tile by page label
|
||||
Color? tileBgForPage(int page) {
|
||||
final pageLabel = find.descendant(
|
||||
of: pagesSidebar,
|
||||
matching: find.text('$page'),
|
||||
);
|
||||
if (pageLabel.evaluate().isEmpty) return null; // not visible yet
|
||||
final decoratedAncestors = find.ancestor(
|
||||
of: pageLabel,
|
||||
matching: find.byType(DecoratedBox),
|
||||
);
|
||||
final decoratedBoxes =
|
||||
decoratedAncestors
|
||||
.evaluate()
|
||||
.map((e) => e.widget)
|
||||
.whereType<DecoratedBox>()
|
||||
.toList();
|
||||
for (final d in decoratedBoxes) {
|
||||
final dec = d.decoration;
|
||||
if (dec is BoxDecoration && dec.color != null) {
|
||||
return dec.color;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
final theme = Theme.of(tester.element(pagesSidebar));
|
||||
// Initially, page 1 should be highlighted
|
||||
expect(tileBgForPage(1), theme.colorScheme.primaryContainer);
|
||||
|
||||
// Scroll to make page 3 thumbnail visible
|
||||
await tester.drag(pagesSidebar, const Offset(0, -300));
|
||||
await tester.pumpAndSettle();
|
||||
|
|
@ -181,6 +211,8 @@ void main() {
|
|||
await tester.pumpAndSettle();
|
||||
|
||||
expect(container.read(pdfViewModelProvider).currentPage, 3);
|
||||
// After navigation completes, page 3 should be highlighted
|
||||
expect(tileBgForPage(3), theme.colorScheme.primaryContainer);
|
||||
});
|
||||
|
||||
testWidgets('PDF View: thumbnails scroll and select', (tester) async {
|
||||
|
|
|
|||
|
|
@ -18,6 +18,8 @@ class ThumbnailsView extends ConsumerWidget {
|
|||
@override
|
||||
Widget build(BuildContext context, WidgetRef ref) {
|
||||
final theme = Theme.of(context);
|
||||
// Access view model to detect mock viewer mode
|
||||
final viewModel = ref.read(pdfViewModelProvider);
|
||||
|
||||
return Container(
|
||||
color: theme.colorScheme.surface,
|
||||
|
|
@ -34,16 +36,24 @@ class ThumbnailsView extends ConsumerWidget {
|
|||
final isSelected = currentPage == pageNumber;
|
||||
return InkWell(
|
||||
onTap: () {
|
||||
// Update both controller and provider page
|
||||
// For real viewer: navigate first and wait for onPageChanged
|
||||
// to update provider when the page is actually reached.
|
||||
// For mock/unready: update provider immediately to drive scroll.
|
||||
final isRealViewer = !viewModel.useMockViewer;
|
||||
if (isRealViewer && controller.isReady) {
|
||||
controller.goToPage(
|
||||
pageNumber: pageNumber,
|
||||
anchor: PdfPageAnchor.top,
|
||||
);
|
||||
// Do not set provider here; let onPageChanged handle it
|
||||
} else {
|
||||
// In tests or when controller isn't ready, drive state directly
|
||||
try {
|
||||
ref
|
||||
.read(pdfViewModelProvider.notifier)
|
||||
.jumpToPage(pageNumber);
|
||||
} catch (_) {}
|
||||
}
|
||||
},
|
||||
child: DecoratedBox(
|
||||
decoration: BoxDecoration(
|
||||
|
|
|
|||
Loading…
Reference in New Issue