0
votes

I'm relatively new to flutter so it might be a very simple solution. I have implemented a drawer in a Scaffold() with a PageView as the body. I want to be able to jump to the PageView page.no as the Drawer list item is TappedOn.

I know I'm not initialising or setting something somewhere. I've also tried keepPage: true, but doesn't make a difference.

class MyScreen extends StatefulWidget {
@override
  State<StatefulWidget> createState() {
    return _MyScreenState();
  }
}

class _MyScreenState extends State<MyScreen> {
  var _currentIndex = 0;
  PageController _pageController;

  @override
  void initState() {
    super.initState();
    _currentIndex = 0;
    PageController(initialPage: _currentIndex, keepPage: false);
  }

  @override
  void dispose() {
    _pageController.dispose();
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return new Scaffold(
      appBar: AppBar(
        title: const Text('AppBar',),
        elevation: 0.0,
        leading: Builder(
          builder: (context) => IconButton(
            icon: new Icon(Icons.toc, size: 35.0),
            onPressed: () => Scaffold.of(context).openDrawer(),
          ),
        ),
        actions: <Widget>[
        ],
      ),

      drawer: Drawer(
        child: ListView(
          padding: EdgeInsets.zero, // Important: Remove any padding from the ListView.
          children: <Widget>[
            Container(
              height: 120,
              child: DrawerHeader(
                child: Text('Heading',),
              ),
            ),
            ListTile(
              title: Text('Home',),
              onTap: () {
                setState(() {
                  _currentIndex = 2;
                });
                Navigator.pop(context);
                _pageController.jumpToPage(_currentIndex);
              },
            ),
            ListTile(),
            ListTile(),
            ....
          ],
        ),
      ),

      body: PageView(
        controller: _pageController,
        onPageChanged: (index) {
          setState(() {
            _currentIndex = index;
          });
        },
        children: <Widget>[
          new Page1(),
          new Page2(),
          ....
        ],
      )

    );

  }

}

The above code is throwing the following error:

flutter: The following NoSuchMethodError was thrown while handling a gesture:

flutter: The method 'jumpToPage' was called on null.

flutter: Receiver: null

flutter: Tried calling: jumpToPage(0)

1
_pageController = PageController(initialPage: _currentIndex, keepPage: false); - user10539074
Thanks Eugene. Works like a charm. I knew it was something simple. - uniflex

1 Answers

0
votes

Just make your PagController public like so: PageController pageController;.