Flutter 强制获取焦点的问题
在用flutter框架实现Flutter TV app的过程中,光标切换是个大问题: 从主菜单到子菜单,从子菜单到目标选项,各个目标选项之间,都需要光标切换。而且在Tv上无法触摸,主要靠遥控器上的上、下、左、右键来实现。所以光标的各个方向移动有时候需要以下方法指定才能实现。
FocusScope.of(context).requestFocus(expectFocus);
但是这个方法有时候并不能得到想要的效果,譬如从menu1按右键光标正常会跳到menu2,但事实上却是menu3,menu4获取焦点…, 这种情况很诡异。不知道flutter团队没有进行TV 适配的缘故,还是我某些地方没有搞明白,没有运用好。
所以每当碰到光标乱跑的时候,我就使用强制获取光标的方法来给某个选项获取光标。我先后使用过EventBus, ChangeNotifier等方法让某个节点强制获取光标,但都感觉使用起来比较麻烦,代码互相之间依赖性很强。
后来就使用延迟获取光标的方法来最终解决这个问题。延迟获取,就是当次按键和页面刷新的时候先不强制获取光标,等过几十秒或上百秒再强制获取光标。具体实现如下:
//倒计时处理static const timeout = const Duration(milliseconds: 10);startTimeout( FocusNode focusNode) {expectedNode = focusNode;return Timer(timeout, handleTimeout);}void handleTimeout() {print("tvwidget rootpage checkUpdate!");if(expectedNode != null) {FocusScope.of(context).requestFocus(expectedNode);}expectedNode = null;}
测试结果表明,用这个delayRequestFocus方法能100%获取到光标,而且调用起来很方便。
Flutter 强制获取焦点的问题相关推荐
- flutter - 强制横屏/竖屏
flutter 强制竖屏 void main() {SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp,Device ...
- Flutter强制某个页面横屏
1.问题描述 在某个页面中使用flutter提供的方式来强制某个页面横屏: SystemChrome.setPreferredOrientations([DeviceOrientation.portr ...
- Flutter 强制横屏竖屏设置
如果现在你需要强行将这个页面变为强制或横屏可以使用: // 强制横屏SystemChrome.setPreferredOrientations([DeviceOrientation.landscape ...
- Flutter自动获取焦点
FocusNode focusNode = FocusNode();WidgetsBinding.instance.addPostFrameCallback((timeStamp) {FocusSco ...
- Flutter获取焦点
Flutter中获取焦点的方法 import 'package:flutter/material.dart'; class MyTextFiled extends StatefulWidget{@ov ...
- 深入理解 Flutter 的编译原理与优化
阿里妹导读:对于开发者而言,Flutter工程和我们的Android/iOS工程有何差别?Flutter的渲染和事件传递机制如何工作?构建缓慢或出错又如何去定位,修改和生效呢?凡此种种,都需要对Flu ...
- 安卓版PDA扫码获取扫描枪数据;input获取焦点不弹出虚拟键盘;解决页面btn可操作数据的逻辑,导致DOM元素渲染,input的readonly失效
html部分: 页面需要一个容器来接收扫描数据 注意:安卓版PDA扫描不同于win系统版本,安卓版本获取扫描数据时并不是keyCode按键依次获取,而是一次性给出扫描的数据 <!--扫描枪数据接 ...
- 深入理解flutter的编译原理与优化
问题背景 对于开发者而言,什么是Flutter?它是用什么语言编写的,包含哪几部分,是如何被编译,运行到设备上的呢?Flutter如何做到Debug模式Hot Reload快速生效变更,Release ...
- Qt for Android 开发大坑
Qt for Android 开发大坑 作者: qyvlik Qt 5.5.1 这里说一说比較常见的 Qt 开发安卓的大坑. 希望同学们不要做无谓的挣扎,跳过这些坑. 输入框 首当其冲的是输入框,Qt ...
最新文章
- Nature:口腔和肠道微生物可以使抗糖尿病药物(阿卡波糖)失活
- 1.15.Flink state(状态)管理与恢复、什么是state、Keyed State、Operator State、状态容错(生成快照,恢复快照),checkPoint简介,重启策略等
- java十年技术栈[总结复习用]
- Hash(LCP) || 后缀数组 LA 4513 Stammering Aliens
- Windows查找JDK的路径
- 三极管稳压管组成的线性电源关键理解
- 终于等到了!新一代AirPods正式发布:新增无线充电盒
- 二路归并排序 代码实例
- 【JDBC】JDBC的使用(数据库的增删改查询)
- 阶段2 JavaWeb+黑马旅游网_15-Maven基础_第5节 使用骨架创建maven的java工程_13使用骨架创建maven的web工程...
- CentOS 6.2安装配置LAMP服务器(Apache+PHP5+MySQL)
- 看了有多个人格的人,自己拍的视频
- 小米5s安装xpose 上
- 电脑从硬盘启动计算机,电脑怎么设置第一启动项为硬盘
- python图标变成了白色_桌面图标上有个白色文件图标怎么去掉?解决桌面图标白色方块挡住...
- 最终作业 - 软件工程实践总结
- 五子棋游戏源码和核心算法的讲解(简易五子棋web版)
- html创建关联程序,如何在控制面板中创建电子邮件默认程序关联
- 为什么 200M 宽带,打王者荣耀还是会有 460 的延迟?
- Abp vnext Web应用程序开发教程 5 —— 授权