I’ve implemented a PageView in my Flutter app. When I leave the page by logging out and come back after logging in, I get the following error message:
<code>ScrollController attached to multiple scroll views.
'package:flutter/src/widgets/scroll_controller.dart':
Failed assertion: line 158 pos 12: '_positions.length == 1'
</code>
<code>ScrollController attached to multiple scroll views.
'package:flutter/src/widgets/scroll_controller.dart':
Failed assertion: line 158 pos 12: '_positions.length == 1'
</code>
ScrollController attached to multiple scroll views.
'package:flutter/src/widgets/scroll_controller.dart':
Failed assertion: line 158 pos 12: '_positions.length == 1'
The PageView is stored in a Riverpod provider, which is invalidated when the page is left. However, the error still occurs. Here is my code:
The Logout Method:
<code>menuButton(
onTap: () {
LoginController().logout();
ref.invalidate(homePageProvider);
Navigator.pushNamed(context, LoginNew.routeName);
},
icon: const Icon(Icons.logout),
title: AppLocalizationUtil.of(context)!.log_out
),
</code>
<code>menuButton(
onTap: () {
LoginController().logout();
ref.invalidate(homePageProvider);
Navigator.pushNamed(context, LoginNew.routeName);
},
icon: const Icon(Icons.logout),
title: AppLocalizationUtil.of(context)!.log_out
),
</code>
menuButton(
onTap: () {
LoginController().logout();
ref.invalidate(homePageProvider);
Navigator.pushNamed(context, LoginNew.routeName);
},
icon: const Icon(Icons.logout),
title: AppLocalizationUtil.of(context)!.log_out
),
The Provider:
<code>final homePageProvider = ChangeNotifierProvider.autoDispose((ref) => HomePageState());
class HomePageState extends ChangeNotifier {
int _selectedIndex = 0;
PageController _pageController = PageController();
int get selectedIndex => _selectedIndex;
get pageController => _pageController;
void changeVisibility(int index) {
pageController.animateToPage(index,
duration: const Duration(milliseconds: 200), curve: Curves.easeInOut);
_selectedIndex = index;
notifyListeners();
}
}
</code>
<code>final homePageProvider = ChangeNotifierProvider.autoDispose((ref) => HomePageState());
class HomePageState extends ChangeNotifier {
int _selectedIndex = 0;
PageController _pageController = PageController();
int get selectedIndex => _selectedIndex;
get pageController => _pageController;
void changeVisibility(int index) {
pageController.animateToPage(index,
duration: const Duration(milliseconds: 200), curve: Curves.easeInOut);
_selectedIndex = index;
notifyListeners();
}
}
</code>
final homePageProvider = ChangeNotifierProvider.autoDispose((ref) => HomePageState());
class HomePageState extends ChangeNotifier {
int _selectedIndex = 0;
PageController _pageController = PageController();
int get selectedIndex => _selectedIndex;
get pageController => _pageController;
void changeVisibility(int index) {
pageController.animateToPage(index,
duration: const Duration(milliseconds: 200), curve: Curves.easeInOut);
_selectedIndex = index;
notifyListeners();
}
}
The Page view is stored directly within the body tag of a Scaffold
How can I avoid this error and use the PageController properly?