当前位置: 首页 > news >正文

flutter开发实战-当前界面无操作60s返回主页实现

flutter开发实战-当前界面无操作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();}
}

为widget创建Wrapper

/// 无操作回主页
class ListenerTouchTimerWrapper extends StatelessWidget {const ListenerTouchTimerWrapper({super.key,required this.child,this.listenerTouchTimer,});final Widget child;final ListenerTouchTimer? listenerTouchTimer;@overrideWidget 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;@overrideState<DemoPage> createState() => _DemoPageState();
}class _DemoPageState extends State<DemoPage> {/// 超出60秒自动返回首页ListenerTouchTimer? listenerTouchTimer;@overridevoid initState() {// TODO: implement initStategetAppConfigFromNative();listenerTouchTimer = ListenerTouchTimer(milliseconds: 6000);super.initState();loggerInfo("ChangeClothe initState");if (listenerTouchTimer != null) {listenerTouchTimer!.startListener(timeoutCallback: () {print("_ChangeClotheWaitPageState 超出60秒自动返回首页");if (mounted ) {navigatorBack();}});}}@overridevoid dispose() {// TODO: implement disposeloggerInfo("ChangeClothe dispose");listenerTouchTimer?.dispose();super.dispose();}@overrideWidget build(BuildContext context) {return ListenerTouchTimerWrapper(listenerTouchTimer: listenerTouchTimer,child: Scaffold(body: Container(),),);}void navigatorBack() {NavigatorPageRouter.pop();}
}

四、小结

flutter开发实战-当前界面无操作60s返回主页实现

学习记录,每天不停进步。

http://www.lryc.cn/news/247438.html

相关文章:

  • 绩效考核的基础及基本内容
  • 阿坤老师的彩带插花(蓝桥杯)
  • 系列二十四、Spring设计模式之策略模式
  • Linux常用命令——basename命令
  • LeetCode17.电话号码的字母组合
  • 为Oracle链接服务器使用分布式事务
  • 代洋集团,引领绿色能源新潮流
  • LuatOS-SOC接口文档(air780E)--rtos - RTOS底层操作库
  • 一名技术Leader应该是创作者
  • Java多线程总结
  • docker devicemapper: Error running DeleteDevice dm_task_run failed
  • 第二十章总结
  • Linux环境安装Java,Tomcat,Mysql,
  • 前后端分离开发出现的跨域问题
  • 水淼采集器-免费水淼采集器下载
  • [DASCTF 2023 0X401七月暑期挑战赛] web刷题记录
  • Python超级详细的变量命名规则
  • Zabbix 6 详细安装部署教程
  • 如何设置带有密码的excel只读模式?
  • 企业人力资源公司抖音直播招聘断播怎么处理?
  • 数据治理与数据入表、数据交易有什么关系?
  • GitHub 2023排名前十的最佳开源项目
  • 抖音视频如何无水印下载,怎么批量保存主页所有视频没水印?
  • 淘宝详情API接口:一键获取商品信息的实践探索
  • 在线陪诊系统: 医学科技的革新之路
  • 2. 两数相加
  • 自研基于Xilinx PCIe的高性能多路视频采集与显示控制器
  • 网络安全小白自学
  • sprintboot快速初始化【Springboot】
  • 数据库系统概述之国产数据库