在用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 强制获取焦点的问题相关推荐

  1. flutter - 强制横屏/竖屏

    flutter 强制竖屏 void main() {SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp,Device ...

  2. Flutter强制某个页面横屏

    1.问题描述 在某个页面中使用flutter提供的方式来强制某个页面横屏: SystemChrome.setPreferredOrientations([DeviceOrientation.portr ...

  3. Flutter 强制横屏竖屏设置

    如果现在你需要强行将这个页面变为强制或横屏可以使用: // 强制横屏SystemChrome.setPreferredOrientations([DeviceOrientation.landscape ...

  4. Flutter自动获取焦点

    FocusNode focusNode = FocusNode();WidgetsBinding.instance.addPostFrameCallback((timeStamp) {FocusSco ...

  5. Flutter获取焦点

    Flutter中获取焦点的方法 import 'package:flutter/material.dart'; class MyTextFiled extends StatefulWidget{@ov ...

  6. 深入理解 Flutter 的编译原理与优化

    阿里妹导读:对于开发者而言,Flutter工程和我们的Android/iOS工程有何差别?Flutter的渲染和事件传递机制如何工作?构建缓慢或出错又如何去定位,修改和生效呢?凡此种种,都需要对Flu ...

  7. 安卓版PDA扫码获取扫描枪数据;input获取焦点不弹出虚拟键盘;解决页面btn可操作数据的逻辑,导致DOM元素渲染,input的readonly失效

    html部分: 页面需要一个容器来接收扫描数据 注意:安卓版PDA扫描不同于win系统版本,安卓版本获取扫描数据时并不是keyCode按键依次获取,而是一次性给出扫描的数据 <!--扫描枪数据接 ...

  8. 深入理解flutter的编译原理与优化

    问题背景 对于开发者而言,什么是Flutter?它是用什么语言编写的,包含哪几部分,是如何被编译,运行到设备上的呢?Flutter如何做到Debug模式Hot Reload快速生效变更,Release ...

  9. Qt for Android 开发大坑

    Qt for Android 开发大坑 作者: qyvlik Qt 5.5.1 这里说一说比較常见的 Qt 开发安卓的大坑. 希望同学们不要做无谓的挣扎,跳过这些坑. 输入框 首当其冲的是输入框,Qt ...

最新文章

  1. Nature:口腔和肠道微生物可以使抗糖尿病药物(阿卡波糖)失活
  2. 1.15.Flink state(状态)管理与恢复、什么是state、Keyed State、Operator State、状态容错(生成快照,恢复快照),checkPoint简介,重启策略等
  3. java十年技术栈[总结复习用]
  4. Hash(LCP) || 后缀数组 LA 4513 Stammering Aliens
  5. Windows查找JDK的路径
  6. 三极管稳压管组成的线性电源关键理解
  7. 终于等到了!新一代AirPods正式发布:新增无线充电盒
  8. 二路归并排序 代码实例
  9. 【JDBC】JDBC的使用(数据库的增删改查询)
  10. 阶段2 JavaWeb+黑马旅游网_15-Maven基础_第5节 使用骨架创建maven的java工程_13使用骨架创建maven的web工程...
  11. CentOS 6.2安装配置LAMP服务器(Apache+PHP5+MySQL)
  12. 看了有多个人格的人,自己拍的视频
  13. 小米5s安装xpose 上
  14. 电脑从硬盘启动计算机,电脑怎么设置第一启动项为硬盘
  15. python图标变成了白色_桌面图标上有个白色文件图标怎么去掉?解决桌面图标白色方块挡住...
  16. 最终作业 - 软件工程实践总结
  17. 五子棋游戏源码和核心算法的讲解(简易五子棋web版)
  18. html创建关联程序,如何在控制面板中创建电子邮件默认程序关联
  19. 为什么 200M 宽带,打王者荣耀还是会有 460 的延迟?
  20. Abp vnext Web应用程序开发教程 5 —— 授权

热门文章

  1. 10G/40G/100G光模块的类型和应用
  2. Proxmox VE 系统软件更新
  3. 自定义Flutter Lint插件实现自己的Dart语法规则(静态语法分析检测)
  4. 2018杭州云栖大会,有哪些科技惊喜?
  5. linux 环境 Realplay 10.0 的安装和使用
  6. 中文错别字在线检查服务
  7. 研究OAR分割的意义、应用及目前相关方法和评价指标
  8. 打通企业的“韧”督二脉,戴尔科技赋能数智远见者
  9. virtualbox虚拟机安装在笔记本上使用WIFI无法上网
  10. 平摊分析(后续持续更新)