代码之家  ›  专栏  ›  技术社区  ›  Roger Villamarin

按下后退按钮时如何在页面视图中向后移动[颤振]

  •  3
  • Roger Villamarin  · 技术社区  · 8 年前

    当我使用页面视图按下后退按钮时,我想向后移动,我读到了willPopScope组件,但我没有按下/弹出另一个屏幕。我只是在页面视图上移动不同的页面。

    你知道怎么做吗?

    最好的问候。

    2 回复  |  直到 7 年前
        1
  •  1
  •   Smily    7 年前

    是的,你可以用 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,
        );
      }
    }
    

    希望这有帮助。有关覆盖“后退”按钮的一般参考,请参阅 other StackOverFlowAnswer.

    编辑 :在我的onwillPop中添加了一个返回值以删除dart警告。

        2
  •  1
  •   braulio.cassule    8 年前

    可以使用PageController控制页面视图。

        PageController _pageController;
    

    您可以使用上一页的页面控制器:

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

    或转到初始页:

         _pageController.jumpToPage(_pageController.initialPage);