当按下后退按钮[Flutter]时,如何在PageView中向后移动



当我使用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。

最新更新