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使用 ,它总是附加到来自提供者的同一个页面。所以我想我需要一种方法来正确dispose的PageController。但是我该怎么做呢?
我在我的内部使用它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)
为什么会这样?我在这里缺少什么?
如果您需要更多信息,请告诉我!
| 归档时间: |
|
| 查看次数: |
180 次 |
| 最近记录: |