按下后退按钮[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 布尔值。
我想在使用 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 布尔值。