如果 pushReplaceNamed,Flutter PageView 会崩溃

Chr*_*ris 5 routes push dart flutter flutter-pageview

我有一个NavBar我通过 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();
  }
}
Run Code Online (Sandbox Code Playgroud)

问题: 我认为问题是我使用 aProvider来存储我的,PageContrller所以如果我推送到另一个页面,在那里BottomBar使用 ,它总是附加到来自提供者的同一个页面。所以我想我需要一种方法来正确disposePageController。但是我该怎么做呢?

我在我的内部使用它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(),
      ),
    );
  }
}
Run Code Online (Sandbox Code Playgroud)

问题是Onboarding-Process我的应用程序中也有一个,在它的最后一页我可以调用Navigator.pushReplacementNamed(context, '/');它由我的处理Router

  static Route<dynamic> generateRoute(RouteSettings settings) {
    switch (settings.name) {
      case '/':
        return MaterialPageRoute(
          builder: (context) => ApplicationContainer(),
        );
        ...
Run Code Online (Sandbox Code Playgroud)

但这使我的崩溃NavBar

处理手势时抛出以下断言: ScrollController 附加到多个滚动视图。'package:flutter/src/widgets/scroll_controller.dart':断言失败:第 109 行 pos 12:'_positions.length == 1'

这是Stack

抛出异常时,这是堆栈 #2 ScrollController.position package:flutter/…/widgets/scroll_controller.dart:109 #3 PageController.jumpToPage package:flutter/…/widgets/page_view.dart:206 #4 BottomNavBarProvider。 selectTab 包:onkobutler/providers/bottom_nav_bar_provider.dart:10 #5 BottomNavBarItem._fireOnTap 包:onkobutler/…/bottom_navigation_bar/bottom_nav_bar_item.dart:34 #6 BottomNavBarItem.build。包:onkobutler/…/bottom_navigation_bar/bottom_nav_bar_item.dart:46

以及相关的代码:

  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,
      ),
    ];
  }
  }
Run Code Online (Sandbox Code Playgroud)

为什么会这样?我在这里缺少什么?

如果您需要更多信息,请告诉我!