我正在使用Collin Jackson的this要点来实现带点指示器的综合浏览。我想通过点击按钮而不是滑动来移至下一屏幕,这是我面临的问题。
physics
属性使用AlwaysScrollableScrollPhysics()
,但是在我的情况下,由于我不想让用户滑动,所以我使用NeverScrollableScrollPhysics
禁用了滑动,但这导致了点指示符当我移至下一屏幕时(第一个屏幕上显示了点指示符),该按钮没有显示。
如何在单击按钮时实现移至下一个屏幕并保持显示正确点的点指示器?
final _controller = PageController();
final List<Widget> _pages = [
FirstScreen(),
SecondScreen(),
ThirdScreen()
];
int page = 0;
@override
void initState() {
super.initState();
}
@override
Widget build(BuildContext context) {
bool isDone = page == _pages.length - 1;
return new Scaffold(
resizeToAvoidBottomPadding: false,
body: new Stack(
children: <Widget>[
Positioned.fill(
child:PageView.builder(
physics: NeverScrollableScrollPhysics(),
controller: _controller,
itemCount: _pages.length,
itemBuilder: (BuildContext context, int index) {
return _pages[index % _pages.length];
},
onPageChanged: (int p) {
setState(() {
page = p;
});
},
)
),
Positioned(
bottom: 10.0,
left: 0.0,
right: 0.0,
child: new SafeArea(
child: Column(
children: <Widget>[
new Padding(
padding: const EdgeInsets.all(8.0),
child: DotsIndicator(
color: Colors.black,
controller: _controller,
itemCount: _pages.length,
onPageSelected: (int page) {
_controller.animateToPage(
page,
duration: const Duration(milliseconds: 300),
curve: Curves.ease,
);
},
),
),
],
),
)
)
]
),
);
}