Skip to content

Can't access PageController.page even when hasClients is true #146986

@caseycrogers

Description

@caseycrogers

Steps to reproduce

  1. Create a page view with a page controller
  2. Put a builder or subwidget inside of pages
  3. Display PageController.page from inside the builder/subwidget, checking controller.hasClients first

Expected results

The current page is displayed or a fallback if no page is available (has client is false or the page is null)

Actual results

Page value is only available after content dimensions are established. is thrown and the screen flashes red before properly displaying the page number.

Code sample

Code sample
class PageDemo extends StatefulWidget {
  const PageDemo({super.key});

  @override
  State<PageDemo> createState() => _PageDemoState();
}

class _PageDemoState extends State<PageDemo> {
  final PageController controller = PageController();

  @override
  Widget build(BuildContext context) {
    if (controller.hasClients) {
      print(controller.page);
    }
    return MaterialApp(
      home: Scaffold(
        body: PageView(
          controller: controller,
          children: [
            // Only throws if a builder or sub widget is used here.
            Builder(
              builder: (context) {
                final double currentPage =
                    controller.hasClients ? controller.page ?? -1 : -2;
                return Center(child: Text(currentPage.toString()));
              },
            ),
          ],
        ),
      ),
    );
  }
}

Screenshots or Video

Screenshots / Video demonstration

[Upload media here]

Logs

Logs
[Paste your logs here]

Flutter Doctor output

Doctor output
[Paste your output here]

Metadata

Metadata

Assignees

No one assigned

    Labels

    P2Important issues not at the top of the work listf: scrollingViewports, list views, slivers, etc.found in release: 3.19Found to occur in 3.19found in release: 3.22Found to occur in 3.22frameworkflutter/packages/flutter repository. See also f: labels.has reproducible stepsThe issue has been confirmed reproducible and is ready to work onr: fixedIssue is closed as already fixed in a newer versionteam-frameworkOwned by Framework teamtriaged-frameworkTriaged by Framework team

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions