本文介绍: flutter开发实战-当前界面无操作60s返回主页实现当前界面无操作60s返回主页实现,主要是通过Timer来控制,当监听界面是否有pointerDown时候,如果超过60s仍没有操作,则返回主页。
当前界面无操作60s返回主页实现,主要是通过Timer来控制,当监听界面是否有pointerDown时候,如果超过60s仍没有操作,则返回主页。
一、Listener
Listener是用来用于调用回调以响应常见的指针事件
Listener的属性如下
const Listener({
super.key,
this.onPointerDown,
this.onPointerMove,
this.onPointerUp,
this.onPointerHover,
this.onPointerCancel,
this.onPointerPanZoomStart,
this.onPointerPanZoomUpdate,
this.onPointerPanZoomEnd,
this.onPointerSignal,
this.behavior = HitTestBehavior.deferToChild,
super.child,
}) : assert(behavior != null);
可以看出,我们可以通过onPointerDown来判断用户是否触摸到屏幕。
二、新增ListenerTouchTimerWrapper
为Widget添加Timer控制,当触摸了屏幕,取消Timer,重新倒计时。倒计时结束之后,可以执行callback。
void updateTouch() {
_timer?.cancel();
if (timeoutCallback != null) {
_timer = Timer(Duration(milliseconds: milliseconds), timeoutCallback!);
}
}
完整代码如下
class ListenerTouchTimer {
final int milliseconds;
Timer? _timer;
VoidCallback? timeoutCallback;
ListenerTouchTimer({
required this.milliseconds,
});
void startListener({required VoidCallback timeoutCallback}) {
this.timeoutCallback = timeoutCallback;
updateTouch();
}
void updateTouch() {
_timer?.cancel();
if (timeoutCallback != null) {
_timer = Timer(Duration(milliseconds: milliseconds), timeoutCallback!);
}
}
void dispose() {
_timer?.cancel();
}
}
/// 无操作回主页
class ListenerTouchTimerWrapper extends StatelessWidget {
const ListenerTouchTimerWrapper({
super.key,
required this.child,
this.listenerTouchTimer,
});
final Widget child;
final ListenerTouchTimer? listenerTouchTimer;
@override
Widget build(BuildContext context) {
return Listener(
onPointerDown: (event) {
if (listenerTouchTimer != null) {
listenerTouchTimer!.updateTouch();
}
},
child: child,
);
}
}
三、使用ListenerTouchTimerWrapper
在界面的外层使用ListenerTouchTimerWrapper进行包裹一下。
class DemoPage extends StatefulWidget {
const DemoPage({
Key? key,
required this.arguments,
}) : super(key: key);
final Map<String, dynamic> arguments;
@override
State<DemoPage> createState() => _DemoPageState();
}
class _DemoPageState extends State<DemoPage> {
/// 超出60秒自动返回首页
ListenerTouchTimer? listenerTouchTimer;
@override
void initState() {
// TODO: implement initState
getAppConfigFromNative();
listenerTouchTimer = ListenerTouchTimer(milliseconds: 6000);
super.initState();
loggerInfo("ChangeClothe initState");
if (listenerTouchTimer != null) {
listenerTouchTimer!.startListener(timeoutCallback: () {
print("_ChangeClotheWaitPageState 超出60秒自动返回首页");
if (mounted ) {
navigatorBack();
}
});
}
}
@override
void dispose() {
// TODO: implement dispose
loggerInfo("ChangeClothe dispose");
listenerTouchTimer?.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
return ListenerTouchTimerWrapper(
listenerTouchTimer: listenerTouchTimer,
child: Scaffold(
body: Container(),
),
);
}
void navigatorBack() {
NavigatorPageRouter.pop();
}
}
四、小结
原文地址:https://blog.csdn.net/gloryFlow/article/details/134662674
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.7code.cn/show_5751.html
如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除!
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。