当我使用pageView按下“后退”按钮时,我想向后移动,我了解了WillPopScope组件,但我没有按下/弹出其他屏幕。我只是在pageView的不同页面中移动。
有什么线索吗?
最诚挚的问候。
答案 0 :(得分:1)
您可以使用PageController来控制PageView。
PageController _pageController;
您可以使用转到上一页的PageController:
_pageController.previousPage(duration: Duration(milliseconds: 300), curve: Curves.linear);
或转到初始页面:
_pageController.jumpToPage(_pageController.initialPage);
答案 1 :(得分:1)
是的,您可以使用WillPopScope
来实现。虽然不确定这是否是最佳选择,但它对我来说效果很好。请记住,我希望后退按钮可以从一个页面到另一个页面,而不是在所有页面上都可以,但是我确信该解决方案适用。
在页面中,我用WillPopScope
包围了一切
return new WillPopScope(
onWillPop: () => Future.sync(onWillPop),
child: // Whatever your page was
现在,您将必须定义proc onWillPop
,就我而言,就是这样
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,
);
}
}
希望这会有所帮助。有关一般情况下覆盖后退按钮的参考,请参阅此other StackOverFlowAnswer.
EDIT :向我的onWillPop添加了返回值以删除飞镖警告。
答案 2 :(得分:-1)
您还可以这样编写onWillPop():
if (_controller.page.round() == _controller.initialPage) {
return true;
} else {
_controller.previousPage(
duration: Duration(milliseconds: 200),
curve: Curves.linear,
);
return false;
}
所以它总是返回布尔值。