最近在写flutter项目的时候,遇到报错 :
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'
出现报错的原因:
1.项目添加的Drawer功能,需要通过 Drawer 的菜单项 导航到不同的页面。
2.在主页添加了 BottomNavigationBar ,通过pagecontroller 导航到不同的页面。
3.项目通过Getx 做路由和状态管理。
问题出现说明:通过 Drawer 导航到设置或者其他页面,然后又通过 Drawer 重新导航到 主页,点击 BottomNavigationBar 的item项 就会出现
Failed assertion: line 109 pos 12: '_positions.length == 1’
的报错提示。
具体 *** 作:
Drawer 导航部分代码:
class AppRouteProvide {
Future onRouteTo(String routeName) {
switch (routeName) {
case Routes.Auth:
Get.toNamed(Routes.Auth);
break;
case Routes.Home:
Get.offAndToNamed(Routes.Home);
break;
case Routes.Help:
Get.offAndToNamed(Routes.Help);
break;
case Routes.Splash:
Get.toNamed(Routes.Splash);
break;
case Routes.Connect:
Get.offAndToNamed(Routes.Connect);
break;
case Routes.Setting:
Get.offAndToNamed(Routes.Setting);
break;
}
return Future.value();
}
}
主页view部分代码:
class HomeScreen extends GetView<HomeController> {
@override
Widget build(BuildContext context) {
// print('HomeScreen build');
if (controller.pageController.hasClients) {
controller.onClose();
controller.onInit();
}
return AppbarWidgetScreen(
body: _buildBody(context),
bottomBar: _buildBottomNavigationBar(context),
);
}
主页 controller 部分代码
class HomeController extends GetxController {
final ApiRepository apiRepository;
RxInt selectedIndex = 0.obs;
late PageController pageController;
RxList<Widget> widgetPage = <Widget>[
HomeMainScreen(),
HomeBuyScreen(),
HomeCertScreen(),
HomeSellScreen(),
HomeMineScreen(),
].obs;
HomeController({required this.apiRepository});
@override
void onReady() {
super.onReady();
}
@override
void onInit() {
print('HomeController onInit()');
pageController = PageController(
initialPage: selectedIndex.value,
keepPage: true,
);
super.onInit();
}
@override
void onClose() {
super.onClose();
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)