鉴于PageView允许使用viewPortFraction显示下一个或上一个项目,如果用户点击其中一个项目,如何在项目之间滚动?如果用户用手指拖动列表,则滚动有效,但我也想启用onTap。
child: PageView(
children: <Widget>[
...widgetsList,
],
scrollDirection: Axis.horizontal,
controller: PageController(
viewportFraction: 0.4,
initialPage: 0,
)),
答案 0 :(得分:0)
您可以将每个页面包装在GestureDetector
中,并且onTap
使用jumpToPage
或animateToPage
来切换页面。
如果每个页面上都有由于GestureDetector
而无法访问的元素,则可能需要使用Stack
小部件。
只需将当前 pageNo 传递到animateToPage
。
这里有一个带有Container
包装的示例,但是您也可以像孩子一样传递完整的页面。
GestureDetector(
child: Container(
width: double.infinity,
height: 50.0,
color: Colors.white60,
child: Text('show')),
onTap: () {
_pageController.animateToPage(pageNo,
duration: Duration(milliseconds: 250), curve: Curves.easeInOut);
//// some alternative navigation:
// _pageController.nextPage(
// duration: Duration(milliseconds: 250),
// curve: Curves.easeOut);
//
//// alternative just jump
// _pageController.jumpToPage(pageNo);
},)