I followed the flutter documentation here on how to validate multiple TextFormField at once. But in this example all the textformfields are created with same input field i.e, Name. I want that different fields can be used for different inputs such as Name, Password, Email, etc. Can someone help on how to implement the above?

   class _MyStatefulWidgetState extends State<MyStatefulWidget> {
  Widget build(BuildContext context) {
    return Material(
      child: Center(
        child: Shortcuts(
          shortcuts: <LogicalKeySet, Intent>{
            // Pressing enter on the field will now move to the next field.
            LogicalKeySet(LogicalKeyboardKey.enter): NextFocusIntent(),
          },
          child: FocusTraversalGroup(
            child: Form(
              autovalidate: true,
              onChanged: () {
                Form.of(primaryFocus.context).save();
              },
              child: Wrap(
                children: List<Widget>.generate(5, (int index) {
                  return Padding(
                    padding: const EdgeInsets.all(8.0),
                    child: ConstrainedBox(
                      constraints: BoxConstraints.tight(Size(200, 50)),
                      child: TextFormField(
                      decoration: const InputDecoration(
                      icon: Icon(Icons.person),
                  hintText: 'What do people call you?',
                  labelText: 'Name *',
                ),
                onSaved: (String value) {
                // This optional block of code can be used to run
                // code when the user saves the form.
                },
                validator: (String value) {
                return value.contains('@') ? 'Do not use the @ char.' : null;
                },
                      ),
                    ),
                  );
                }),
              ),
            ),
          ),
        ),
      ),
    );
  }
}


Solution 1: Anurag Tripathi

Make a class with hintText, labelText etc as fields , make a list of instances of this class and provide it to TextFormField :

class _MyStatefulWidgetState extends State<MyStatefulWidget> {

 final List<HintAndLabel> list = const <HintAndLabel>[HintAndLabel(labelText:'Name',hintText:"What do people call you?"),
                                                HintAndLabel(labelText:'label',hintText:"hint"),
                                                HintAndLabel(labelText:'label',hintText:"hint"),
                                                HintAndLabel(labelText:'label',hintText:"hint"),
                                                HintAndLabel(labelText:'label',hintText:"hint")];
   @override
  Widget build(BuildContext context) {
    return Material(
      child: Center(

     child: Shortcuts(
          shortcuts: <LogicalKeySet, Intent>{
            // Pressing enter on the field will now move to the next field.
            LogicalKeySet(LogicalKeyboardKey.enter): NextFocusIntent(),
          },

         child: FocusTraversalGroup(
            child: Form(
              autovalidate: true,
              onChanged: () {
                Form.of(primaryFocus.context).save();
              },
              child: Wrap(
                children: List<Widget>.generate(5, (int index) {
                  return Padding(
                    padding: const EdgeInsets.all(8.0),
                    child: ConstrainedBox(
                      constraints: BoxConstraints.tight(Size(200, 50)),
                      child: TextFormField(
                      decoration: InputDecoration(
                      icon: Icon(Icons.person),
                  hintText: list[index].hintText,
                  labelText: list[index].labelText,
                ),
                onSaved: (String value) {
                // This optional block of code can be used to run
                // code when the user saves the form.
                },
                validator: (String value) {
                return value.contains('@') ? 'Do not use the @ char.' : null;
                },
                      ),
                    ),
                  );
                }),
              ),
            ),
          ),
        ),
     ),
    );
  }
}

class HintAndLabel
{
  final String hintText;
  final String labelText;
 const HintAndLabel({this.hintText,this.labelText});

}