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

How to move backward in PageView when press back button [Flutter]

我想在使用 pageView 按下后退按钮时向后移动,我阅读了有关 WillPopScope 组件的信息,但我不是 pushing/poping 另一个屏幕。我只是在 pageView 的不同页面中移动。

知道怎么做吗?

此致。

您可以使用 PageController 来控制您的 PageView。

    PageController _pageController;

您可以使用 PageController 转到上一页:

    _pageController.previousPage(duration: Duration(milliseconds: 300), curve: Curves.linear);

或转到初始页面:

     _pageController.jumpToPage(_pageController.initialPage);

是的,您可以使用 WillPopScope 实现。虽然不确定这是否是最佳选择,但它非常适合我;请记住,我希望后退按钮从其中一页到它之前的一页起作用,而不是在所有页面上起作用,但我确信该解决方案适用。

在页面中,我用WillPopScope包围了所有内容,像这样

return new WillPopScope(
  onWillPop: () => Future.sync(onWillPop),
  child: // Whatever your page was

现在,您必须定义过程 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,
    );
    return false;
  }
}

希望这对您有所帮助。有关一般覆盖后退按钮的参考,请参阅此

编辑:向我的 onWillPop 添加了一个 return 值以删除飞镖警告。

你也可以这样写onWillPop():

if (_controller.page.round() == _controller.initialPage) {
      return true;
    } else {
      _controller.previousPage(
        duration: Duration(milliseconds: 200),
        curve: Curves.linear,
      );
      return false;
    }

所以它总是 return 布尔值。