如何在 android 电视应用程序中关注列表视图项目

how to focus on listview items in android tv app on flutter

我想在 flutter 中构建一个 android 电视应用程序几乎所有事情都已完成,但一个问题是我无法集中注意力(比如一些弹出效果或边框更改任何告诉用户的东西你现在在这个项目上)我们正在列表视图中迭代的项目。image of what I want in app

但我无法给出这个重点。我试过 FocusScope -> Listview -> 焦点节点 但它没有在第一个和最后一个索引中给出确切的行为,而且它在有多个列表视图的主页中也不起作用。

您应该为包含 FocusNode 的 ListView 元素实现有状态小部件。

然后添加一个 FocusNode 侦听器,每次焦点状态更改时都会调用该侦听器,并在回调中设置所有要更改的视觉参数。

        class _FocusableListViewItemState extends State<FocusableListViewItem>
        { 
    
          FocusNode _node;
        Color _focusBorderColor;

         @override
          void initState() {
            _focusBorderColor = Colors.transparent;
            _node.addListener(_onFocusChange);
        }

void _onFocusChange() {
    if (_node.hasFocus) {

      setState(() {
        _focusBorderColor = Colors.white;
      });
      
    } else {

      setState(() {
        _focusBorderColor = Colors.transparent;

      });
    }
  }


    
    }

在尝试了很多方法之后,我找到了一种使用 InkWell 进行此操作的简单有效的方法。

小部件树看起来像 => 脚手架 -> somewidgets -> ListView -> Inkwell -> Carosouls

我们必须将小部件包装在 InkWell 中并使用 InkWell 中的 onTap 、 focusColor 、 onFocusChange 因为 InkWell 本身有焦点。

 onFocusChange: (value) {
                        print(i);
                        setState(() {
                          hoverIndex = i;
                          widget.selectedIndex = i;
                        });
                      },
                      focusColor: Colors.transparent,

这个焦点更改函数将在 InkWell 中,因此每次用户在 ListView 中进行迭代时它都会调用,因此根据 i(索引)我们可以分配 hoverIndex 并且根据 hoverIndex 我们可以更改迭代元素的样式。