我猜你正在尝试听 pageController 来获取 currentPage。如果是这种情况,您应该使用 PageController 通过其方法(animateToPage、jumpToPage、nextPage、previousPage)触发一个事件,以便它可以唤起您的侦听器。
我假设我的页面转换由 PageView.builder 处理
您可以在文档中找到 PageView.builder 描述,如下所示:
此构造函数适用于具有大量(或无限)子级的页面视图,因为仅对那些实际可见的子级调用构建器。
因此,它支持您在大量页面的情况下有效地构建屏幕。您仍然需要自己处理页面之间的导航。
我上面包含的链接有一个您可以参考 PageController 用法的示例。为方便起见,我将其包括在此处:
class MyPageView extends StatefulWidget {
MyPageView({
Key key
}): super(key: key);
_MyPageViewState createState() => _MyPageViewState();
}
class _MyPageViewState extends State < MyPageView > {
PageController _pageController;
@override
void initState() {
super.initState();
_pageController = PageController();
}
@override
void dispose() {
_pageController.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
body: PageView(
controller: _pageController,
children: [
Container(
color: Colors.red,
child: Center(
child: RaisedButton(
color: Colors.white,
onPressed: () {
if (_pageController.hasClients) {
_pageController.animateToPage(
1,
duration: const Duration(milliseconds: 400),
curve: Curves.easeInOut,
);
}
},
child: Text('Next'),
),
),
),
Container(
color: Colors.blue,
child: Center(
child: RaisedButton(
color: Colors.white,
onPressed: () {
if (_pageController.hasClients) {
_pageController.animateToPage(
0,
duration: const Duration(milliseconds: 400),
curve: Curves.easeInOut,
);
}
},
child: Text('Previous'),
),
),
),
],
),
),
);
}
}