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
,您在此处发布的代码中还存在一些其他问题。我希望这不是您项目中的代码。它必须是不同的。否则它就跑不动了