Flutter Android开发实用技巧
2023-12-29 17:27:04
一,当前页面路由处在栈中“最底部”的位置时,按两次返回键退出app。
第一次按返回键弹出“再按一次退出”的提示。
DateTime? lastPressedTime; //上一次的最后点击时间
@override
Widget build(BuildContext context) {
return PopScope(
canPop: false,
onPopInvoked: (bool didPop) {
if (didPop) return;
SmartDialog.showToast('再按一次退出', alignment: Alignment.center);
if (lastPressedTime == null ||
DateTime.now().difference(lastPressedTime!) >
const Duration(seconds: 1)) {
// 两次点击间隔超过1秒则重新计时
lastPressedTime = DateTime.now();
return;
}
SystemNavigator.pop();
},
child: widget.child,
);
}
在摸索如何使用自定义返回图标或按钮时发现了Navigator.of(context).canPop(),Navigator.of(context).maybePop() 这两个方法很有意思。当配合PopScope Widget一起使用时竟和上面“按两次返回键退出app”有同样的效果。
pageBack() {
Navigator.of(context).maybePop();
}
canPop(): 这个方法用于检查当前路由栈是否可以执行弹出(pop)操作,也就是是否可以返回到上一个页面。它返回一个布尔值,如果返回true,表示可以执行pop操作,存在可以返回的上一个页面;如果返回false,表示无法执行pop操作,因为当前已经是路由栈的底部,没有更多的页面可以返回。
bool canPop = Navigator.of(context).canPop();
if (canPop) {
// 可以执行pop操作
} else {
// 无法执行pop操作
}
maybePop(): 这个方法尝试执行弹出(pop)操作,但与pop()方法不同的是,它不会抛出异常,即使路由栈已经为空。当你不确定是否可以安全地执行pop操作时,可以使用这个方法。
Navigator.of(context).maybePop();
maybePop()会返回一个Future,当pop操作成功时,future的结果为true,否则为false。你可以选择等待future的结果来确定pop操作是否成功:
Future<bool> result = Navigator.of(context).maybePop();
result.then((bool success) {
if (success) {
// pop操作成功
} else {
// pop操作失败或者被取消
}
});
总的来说,canPop()用于检查是否可以执行pop操作,而maybePop()用于尝试执行一个可能的安全的pop操作,并提供了一个可以处理结果的future。
文章来源:https://blog.csdn.net/LYP_0320/article/details/135292527
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!