diff --git a/packages/flutter/lib/src/widgets/page_view.dart b/packages/flutter/lib/src/widgets/page_view.dart index 2a88557637..ed7e6a0e3d 100644 --- a/packages/flutter/lib/src/widgets/page_view.dart +++ b/packages/flutter/lib/src/widgets/page_view.dart @@ -385,10 +385,12 @@ class _PagePosition extends ScrollPositionWithSingleContext implements PageMetri @override double? get page { assert( - !hasPixels || (minScrollExtent != null && maxScrollExtent != null), + !hasPixels || hasContentDimensions, 'Page value is only available after content dimensions are established.', ); - return !hasPixels ? null : getPageFromPixels(pixels.clamp(minScrollExtent, maxScrollExtent), viewportDimension); + return !hasPixels || !hasContentDimensions + ? null + : getPageFromPixels(pixels.clamp(minScrollExtent, maxScrollExtent), viewportDimension); } @override diff --git a/packages/flutter/test/widgets/page_view_test.dart b/packages/flutter/test/widgets/page_view_test.dart index 2207fd229b..0ce4e6312a 100644 --- a/packages/flutter/test/widgets/page_view_test.dart +++ b/packages/flutter/test/widgets/page_view_test.dart @@ -14,6 +14,12 @@ import 'states.dart'; const Duration _frameDuration = Duration(milliseconds: 100); void main() { + testWidgets('PageController cannot return page while unattached', + (WidgetTester tester) async { + final PageController controller = PageController(); + expect(() => controller.page, throwsAssertionError); + }); + testWidgets('PageView control test', (WidgetTester tester) async { final List log = [];