当我使用pageView按下后退按钮时,我想向后移动,我读到了WillPopScope组件,但我没有推/弹出其他屏幕。我只是在页面上移动不同的页面查看。
知道怎么做吗?
致以最良好的问候。
是的,使用WillPopScope
可以实现。虽然不确定这是否是最佳的,但它非常适合我;请记住,我希望后退按钮能从其中一页工作到它之前的一页,而不是在所有页面上工作,但我相信解决方案适用。
在页面中,我用WillPopScope
包围了所有内容,就像这个
return new WillPopScope(
onWillPop: () => Future.sync(onWillPop),
child: // Whatever your page was
现在,您必须定义proconWillPop
,在我的例子中是这样的
bool onWillPop() {
_controller.previousPage(
duration: Duration(milliseconds: 200),
curve: Curves.linear,
);
return false;
}
在我的情况下,这永远不会失败,因为它只用于其中一个视图,而且只有一个。
在您的情况下,您可能需要这样的条件:
bool onWillPop() {
if (_controller.page.round() == _controller.initialPage)
return true;
else {
_controller.previousPage(
duration: Duration(milliseconds: 200),
curve: Curves.linear,
);
return false;
}
}
希望这能有所帮助。有关覆盖后退按钮的参考,请参阅其他StackOverFlowAnswer。
编辑:为我的onWillPop添加了一个返回值,以删除飞镖警告。
您可以使用PageController来控制您的PageView。
PageController _pageController;
您可以使用PageController到达上一页:
_pageController.previousPage(duration: Duration(milliseconds: 300), curve: Curves.linear);
或者转到初始页面:
_pageController.jumpToPage(_pageController.initialPage);
您也可以像这样编写onWillPop((:
if (_controller.page.round() == _controller.initialPage) {
return true;
} else {
_controller.previousPage(
duration: Duration(milliseconds: 200),
curve: Curves.linear,
);
return false;
}
所以它总是返回一个bool。