I have a NavBar which I control via a Provider :
class BottomNavBarProvider extends ChangeNotifier {
  final PageController navigationController = PageController(initialPage: 0);
  int selectedTabIndex = 0;
  BottomNavBarProvider() {}
  void selectTab(int index) {
    navigationController.jumpToPage(index);
    selectedTabIndex = navigationController.page?.round() ?? 0;
    notifyListeners();
  }
}
Problem:
I think the problem is that I am using a Provider to store my PageContrller so if I push to another page, where the BottomBar is used, it is always attached to the same one from the provider. So I guess I need a way to properly dispose the PageController. But how do I do that?
I am using it inside my ApplicationContainer:
class ApplicationContainer extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    initSizeService(context);
    return Scaffold(
      body: PageView(
        controller:
            Provider.of<BottomNavBarProvider>(context).navigationController,
        children: <Widget>[
          HomePage(),
          EntryPage(),
          VitalsHistoryPage(
            Provider.of<VitalsHistoryProvider>(context),
          ),
          SettingsPage(),
        ],
        physics: NeverScrollableScrollPhysics(),
      ),
    );
  }
}
The problem is that I also have a Onboarding-Process in my app and at the last page of it I cam calling Navigator.pushReplacementNamed(context, '/'); which is handled by my Router:
  static Route<dynamic> generateRoute(RouteSettings settings) {
    switch (settings.name) {
      case '/':
        return MaterialPageRoute(
          builder: (context) => ApplicationContainer(),
        );
        ...
But this crashes my NavBar:
The following assertion was thrown while handling a gesture: ScrollController attached to multiple scroll views. 'package:flutter/src/widgets/scroll_controller.dart': Failed assertion: line 109 pos 12: '_positions.length == 1'
Here is the Stack:
When the exception was thrown, this was the stack #2 ScrollController.position package:flutter/…/widgets/scroll_controller.dart:109 #3 PageController.jumpToPage package:flutter/…/widgets/page_view.dart:206 #4 BottomNavBarProvider.selectTab package:onkobutler/providers/bottom_nav_bar_provider.dart:10 #5 BottomNavBarItem._fireOnTap package:onkobutler/…/bottom_navigation_bar/bottom_nav_bar_item.dart:34 #6 BottomNavBarItem.build. package:onkobutler/…/bottom_navigation_bar/bottom_nav_bar_item.dart:46
And the associated code:
  List<BottomNavBarItem> _buildBottomNavBarItems(BuildContext context) {
    return [
      BottomNavBarItem(
        index: 0,
        selectedIndex: Provider.of<BottomNavBarProvider>(context, listen: true)
            .selectedTabIndex,
        text: 'Startseite',
        iconBaseUrl: 'images/icons/home_',
        onTap:
            Provider.of<BottomNavBarProvider>(context, listen: false).selectTab,
      ),
      BottomNavBarItem(
        index: 1,
        selectedIndex: Provider.of<BottomNavBarProvider>(context, listen: true)
            .selectedTabIndex,
        text: 'Eintrag',
        iconBaseUrl: 'images/icons/add_black.png',
        hasDynamicIconColor: false,
        onTap: () {
          AppRouter.openEntryProcedure(context);
        },
      ),
      BottomNavBarItem(
        index: 2,
        selectedIndex: Provider.of<BottomNavBarProvider>(context, listen: true)
            .selectedTabIndex,
        text: 'Verlauf',
        iconBaseUrl: 'images/icons/progress_',
        onTap:
            Provider.of<BottomNavBarProvider>(context, listen: false).selectTab,
      ),
      BottomNavBarItem(
        index: 3,
        selectedIndex: Provider.of<BottomNavBarProvider>(context, listen: true)
            .selectedTabIndex,
        text: 'Einstellungen',
        iconBaseUrl: 'images/icons/settings_',
        onTap:
            Provider.of<BottomNavBarProvider>(context, listen: false).selectTab,
      ),
    ];
  }
  }
Why is this happening? What am I missing here?
Let me know if you need any more info!
