在用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. python入门指南pdf-跟老齐学Python+从入门到精通 PDF 下载
  2. Arcface v1 论文翻译与解读
  3. 在64位的linux中运行32位的应用程序
  4. Android下拉刷新-SwipeRefreshLayout
  5. 第10章 指针(二) 首地址----------指针
  6. Vim的新一代补全插件:coc.nvim
  7. 为linux虚拟机添加硬盘分区,虚拟机centos添加硬盘和分区挂载
  8. 【Python】Matplotlib绘制七彩锥面
  9. 将表达式树转换成中缀表达式☆
  10. python基础之字符编码、文件处理
  11. 推荐 | 掌握这些套路,你也能解决 90% 的 NLP 问题
  12. windows server 2003 远程桌面最大连接数调整与windows 2008远程桌面后,本地帐号自动锁定...
  13. 令前端工程师追捧的一款前端开发IDE工具WebStorm
  14. Android UI学习之---Button
  15. ADXL362 加速度传感器 模拟SPI MSP430G2553 单片机 读取 程序
  16. [dsu on tree] Codeforces #741D. Arpa's letter-marked tree and Mehrdad's Dokhtar-kosh paths
  17. 搭档之家|打造信息交互平台,推进合作新发展
  18. dfs-全排列(UPC-方案数)
  19. System services not available to Activities before onCreate()错误解决方法
  20. 整流器的输入滤波电容的选择

热门文章

  1. www服务器把信息组成,www服务器究竟是什么
  2. 借助国内ChatGPT平替+剪映/百度AIGC平台快速制作短视频
  3. 20210801每周分享(第一期):有道云笔记导出、思维导图、互联网学历
  4. 这个编辑器即将开源!
  5. 网优测试软件pro,系统优化工具(WinUtilities Pro)
  6. 华为b6手环能升级鸿蒙吗,华为手环B6全新发布:跨界形态再升级 强劲性能革新穿戴体验...
  7. 2020-10-22从np.random.normal()到正态分布的拟合
  8. (Linux无线网卡WIFI上网 三 )嵌入式Linux下的WIFI使用
  9. 构建RAID5磁盘阵列
  10. Python 调用Vpython编写三体运动模型(不含碰撞)