我有一个带有 PageView 的第一页。
PageController _pageController = PageController();
List<Widget> _screens = [HomeScreen(), PanicScreen(), ChartScreen()];
PageView(
controller: _pageController,
children: _screens
)
我在 HomeScreen() 中有一个按钮,我想跳入 ChartScreen()
HomeScreen.dart
class _HomeScreenState extends State<HomeScreen> {
final PageController _pageController = PageController(initialPage: 0);
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: Colors.white,
body: SafeArea(
child: Stack(
children: [
GestureDetector(
onTap: () {
_pageController.jumpToPage(1);
},
ScrollController not attached to any scroll views.
'package:flutter/src/widgets/scroll_controller.dart':
Failed assertion: line 176 pos 12: '_positions.isNotEmpty'
答案 0 :(得分:0)
在 HomeScreen 中,您刚刚创建了一个新的滚动控制器。但您没有将其设置为 PageView 的控制器属性。所以,它会抛出这样的错误。您必须使用已分配给 PageView 控制器属性的相同控制器变量来执行 jumpToPage
方法。你可以试试下面的代码吗?
PageController _pageController = PageController();
List<Widget> _screens = [HomeScreen(controller: _pageController), PanicScreen(controller: _pageController), ChartScreen(controller: _pageController)];
PageView(
controller: _pageController,
children: _screens
)
使用滚动控制器实现jumpToPage
方法。
class _HomeScreenState extends State<HomeScreen> {
const _HomeScreenState({this.controller});
final PageController controller;
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: Colors.white,
body: SafeArea(
child: Stack(
children: [
GestureDetector(
onTap: () {
controller.jumpToPage(1);
},
}
或将控制器用作全局变量并将其用于主屏幕页面。在使用之前,请确保控制器是否附加到 PageView 的控制器属性。