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);
|
final pagesSidebar = find.byType(PagesSidebar);
|
||||||
expect(pagesSidebar, findsOneWidget);
|
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
|
// Scroll to make page 3 thumbnail visible
|
||||||
await tester.drag(pagesSidebar, const Offset(0, -300));
|
await tester.drag(pagesSidebar, const Offset(0, -300));
|
||||||
await tester.pumpAndSettle();
|
await tester.pumpAndSettle();
|
||||||
|
|
@ -181,6 +211,8 @@ void main() {
|
||||||
await tester.pumpAndSettle();
|
await tester.pumpAndSettle();
|
||||||
|
|
||||||
expect(container.read(pdfViewModelProvider).currentPage, 3);
|
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 {
|
testWidgets('PDF View: thumbnails scroll and select', (tester) async {
|
||||||
|
|
|
||||||
|
|
@ -18,6 +18,8 @@ class ThumbnailsView extends ConsumerWidget {
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context, WidgetRef ref) {
|
Widget build(BuildContext context, WidgetRef ref) {
|
||||||
final theme = Theme.of(context);
|
final theme = Theme.of(context);
|
||||||
|
// Access view model to detect mock viewer mode
|
||||||
|
final viewModel = ref.read(pdfViewModelProvider);
|
||||||
|
|
||||||
return Container(
|
return Container(
|
||||||
color: theme.colorScheme.surface,
|
color: theme.colorScheme.surface,
|
||||||
|
|
@ -34,16 +36,24 @@ class ThumbnailsView extends ConsumerWidget {
|
||||||
final isSelected = currentPage == pageNumber;
|
final isSelected = currentPage == pageNumber;
|
||||||
return InkWell(
|
return InkWell(
|
||||||
onTap: () {
|
onTap: () {
|
||||||
// Update both controller and provider page
|
// For real viewer: navigate first and wait for onPageChanged
|
||||||
controller.goToPage(
|
// to update provider when the page is actually reached.
|
||||||
pageNumber: pageNumber,
|
// For mock/unready: update provider immediately to drive scroll.
|
||||||
anchor: PdfPageAnchor.top,
|
final isRealViewer = !viewModel.useMockViewer;
|
||||||
);
|
if (isRealViewer && controller.isReady) {
|
||||||
try {
|
controller.goToPage(
|
||||||
ref
|
pageNumber: pageNumber,
|
||||||
.read(pdfViewModelProvider.notifier)
|
anchor: PdfPageAnchor.top,
|
||||||
.jumpToPage(pageNumber);
|
);
|
||||||
} catch (_) {}
|
// 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(
|
child: DecoratedBox(
|
||||||
decoration: BoxDecoration(
|
decoration: BoxDecoration(
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue