Flutter Can';t将焦点移到具有自定义焦点节点的LIstView项上

Flutter Can';t将焦点移到具有自定义焦点节点的LIstView项上,flutter,dart,Flutter,Dart,我正在用文本字段构建一个动态列表视图。每次用户单击一个按钮时,我都会添加一个文本字段,该文本字段接收焦点,而上一个文本字段会取消焦点。但是,当我无法通过单击另一个文本字段来解除文本字段焦点时,会出现错误。此外,我不能忽视键盘。如果我单击另一个文本字段,焦点会移动到该文本字段,并返回到原始文本字段。无论我在屏幕上单击什么位置(另一个文本字段或按钮),我都无法移动焦点 class myOptions extends StatelessWidget { final List<FocusN

我正在用文本字段构建一个动态列表视图。每次用户单击一个按钮时,我都会添加一个文本字段,该文本字段接收焦点,而上一个文本字段会取消焦点。但是,当我无法通过单击另一个文本字段来解除文本字段焦点时,会出现错误。此外,我不能忽视键盘。如果我单击另一个文本字段,焦点会移动到该文本字段,并返回到原始文本字段。无论我在屏幕上单击什么位置(另一个文本字段或按钮),我都无法移动焦点

class myOptions extends StatelessWidget {
    final List<FocusNode> _focusNodes = [];
    int optionCount = 0;

    void addOption () {
        final FocusNode _node = FocusNode();
        setState(() {
            optionCount = optionCount + 1;
            _focusNodes.add(_node);
        });
    }

    Widget build(BuildContext context) {
        return ListView.builder(
            shrinkwrap: true,
            primary: false,
            itemCount: optionCount,
            itemBuilder: (BuildContext context, int index) {
                return myTextfield(
                    focusNode: _focusNodes[index],
                    shouldFocus: options == (index + 1)
                );
            }
        );
    }
}

class myTextfield extends StatelessWidget {
    final FocusNode focusNode;
    final bool shouldFocus;

    myTextfield({this.focusNode,this.shouldFocus});

    Widget build(BuildContext context) {
        if (shouldFocus) {
            FocusScope.of(context).requestFocus(focusNode);
        }

        return TextField(
            focusNode: focusNode
        ;)
    }
}
类myOptions扩展了无状态小部件{
最终列表_focusNodes=[];
int optionCount=0;
void addOption(){
最后一个FocusNode_node=FocusNode();
设置状态(){
optionCount=optionCount+1;
_focusNodes.add(_节点);
});
}
小部件构建(构建上下文){
返回ListView.builder(
收缩膜:对,
主要:错误,
itemCount:optionCount,
itemBuilder:(构建上下文,int索引){
返回myTextfield(
焦点节点:_焦点节点[索引],
shouldFocus:options==(索引+1)
);
}
);
}
}
类myTextfield扩展了无状态小部件{
最终焦点节点焦点节点;
最终目标应该是聚焦;
myTextfield({this.focusNode,this.shouldFocus});
小部件构建(构建上下文){
如果(应该聚焦){
FocusScope.of(context).requestFocus(focusNode);
}
返回文本字段(
focusNode:focusNode
;)
}
}

这将解决您的问题。将
myTextfield
小部件的
build
方法中的
if
条件替换为以下内容

if (shouldFocus) {
   focusNode.requestFocus();
}
另外,不要忘记通过重写
dispose()
方法来处理节点

_focusNodes.forEach((node){
   node.dispose();
});
您正在一个无状态小部件上调用
setState
,您在此处发布的代码中还存在一些其他问题。我希望这不是您项目中的代码。它必须是不同的。否则它就跑不动了