Flutter:如何在Flutter中为动态创建的TextFormFields添加自动对焦



我正在从后端获取一个动态数量的TextFormFields。某些字段是必需的,而其他字段则不是。由于它是动态的,我不能使用FocusScope。我想要实现的是,当用户单击下一个按钮时,焦点应该重定向到所需的空字段。我怎样才能做到这一点?我无法提供代码。

您可以使用此onEditingComplete,它将向您显示以下示例:

注意:如果您创建了静态方法,只需将上下文传递给它。

它对我很有效。

TextField(

controller: controller,
keyboardType: type,
autofocus: false,
enableInteractiveSelection:  false,
maxLength: maxLength,

///Using this :
onEditingComplete: () => FocusScope.of(context).nextFocus(),
decoration: InputDecoration(
hintText: 'Enter text',
border: InputBorder.none,
counterText: "",
contentPadding:
EdgeInsets.symmetric(vertical: 18.0, horizontal: 24.0)),
)

你应该总是发布一些代码,给你,我没有尝试


class MyTextFieldHolder {
final controller = TextEditingController();
final focusNode = FocusNode();
Widget builder(context) {
return TextField(
focusNode: focusNode,
controller: controller,
);
}

dispose(){
controller.dispose();
focusNode.dispose();
}
}
class MyForm extends StatefulWidget {
final List<dynamic> fields;
const MyForm({Key key, this.fields}) : super(key: key);
@override
_MyFormState createState() => _MyFormState();
}
class _MyFormState extends State<MyForm> {
List<MyTextFieldHolder> _holders = [];
@override
void initState() {
widget.fields.forEach((element) {
_holders.add(MyTextFieldHolder());
});
super.initState();
}
@override
Widget build(BuildContext context) {
return Form(
child: ListView.builder(
itemCount: _holders.length,
itemBuilder: (context, i) {
return _holders[i].builder(context);
},
),
);
}

bool _goToNextEmptyField(){
for(final holder in _holders){
if(holder.controller.text.isEmpty){
holder.focusNode.requestFocus();
return true;
}
}
return false;
}
}

相关内容

  • 没有找到相关文章

最新更新