按下返回按钮[Flutter]时如何在PageView中向后移动

时间:2018-07-24 21:44:13

标签: flutter flutter-layout

当我使用pageView按下“后退”按钮时,我想向后移动,我了解了WillPopScope组件,但我没有按下/弹出其他屏幕。我只是在pageView的不同页面中移动。

有什么线索吗?

最诚挚的问候。

3 个答案:

答案 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;
    }

所以它总是返回布尔值。