Q:

Only 2 out of 5 TextFormField validators working

I have 5 TextFormFields that need to be validated, however, only the first 2 are validated successfully. That is, red error message is shown only for the first couple of TextFormFields. If I swap non-working validator keys with one of the keys from a validator that's working, everything's functioning properly (so the issue doesn't appear to be related to the 'rules' I've set). Also, if I delete the first 2 '*currentState.validate()' entries in the onPressed function, the next 2 will work normally. The app recognises that fields are invalid as the onPressed function isn't doing anything other than validating fields. Moreover, if the 1st couple of entries are successfully validated, red lettering will still not be shown on the following entries. No error messages are visible.
Any help would be appreciated.
Related code is as follows:
final _nameFormKey = GlobalKey<FormState>();
final _numberFormKey = GlobalKey<FormState>();
final _addressFormKey = GlobalKey<FormState>();
final _emailFormKey = GlobalKey<FormState>();
final _passwordFormKey = GlobalKey<FormState>();

onPressed: () {
  if (_nameFormKey.currentState.validate() &&
    _numberFormKey.currentState.validate() &&
    _addressFormKey.currentState.validate() &&
    _emailFormKey.currentState.validate() &&
    _passwordFormKey.currentState.validate()) {}
},

DataInputField(
  formKey: _nameFormKey,
  labelText: 'Name',
  helperText: 'This will be used for deliveries.',
  initialValue: widget.name,
  validator: (String name) {
    if (name.length < 3) {
      return 'Name must be more than 2 charaters long.';
    }
  },
),

DataInputField(
  formKey: _numberFormKey,
  labelText: 'Number',
  helperText: 'Phone number the courier can reach you on.',
  initialValue: widget.number,
  validator: (String number) {
    if (number.length < 9) {
      return 'Please enter a valid phone number.';
    }
  },
),

CityAndArea(
  formKey: _addressFormKey,
  validator: (String address) {
    if (address.length < 6) {
      return 'Address invalid.';
    }
  },
),

DataInputField(
  formKey: _emailFormKey,
  labelText: 'Email',
  helperText: 'We\'ll be sending your confirmations here.',
  initialValue: widget.email,
  validator: (String email) {
    if (email.contains('@') == false) {
      return 'Please enter a valid email.';
    }
  },
),

DataInputField(
  formKey: _passwordFormKey,
  labelText: 'Password',
  helperText: 'Used for logging in.',
  validator: (String password) {
    if (password.length < 6) {
      return 'Password must be at least 6 charaters long.';
    }
  },
),

class DataInputField extends StatelessWidget {
  final String labelText;
  final String helperText;
  final String initialValue;
  final Function validator;
  final TextEditingController controller;
  final TextInputType keyboardType;
  final GlobalKey formKey;

  DataInputField({
    @required this.labelText,
    @required this.helperText,
    this.initialValue,
    this.validator,
    this.controller,
    this.keyboardType,
    this.formKey,
  });

  @override
  Widget build(BuildContext context) {
    return Theme(
      data: ThemeData(primaryColor: Colors.black26),
      child: Form(
        key: formKey,
        child: TextFormField(
          keyboardType: keyboardType,
          decoration: InputDecoration(
            labelText: labelText,
            labelStyle: TextStyle(
              color: Colors.green,
              fontWeight: FontWeight.w300,
            ),
            helperText: helperText,
            contentPadding: EdgeInsets.only(bottom: 2.5, top: 10.0),
          ),
          initialValue: initialValue,
          validator: validator,
          controller: controller,
        ),
      ),
    );
  }
}

A:

Keys are quite expensive and ideally you want to use just one key per form. You're using a key for each TextField which is overkill. I imagine the engine is seeing there are two invalid forms and so doesn't process the rest. Ideally, you want to have a single Form with a single Key and all of your InputFields within that like:
  final _formKey = GlobalKey<FormState>();

  TextFormField field1 = new TextFormField();
  TextFormField field2 = new TextFormField();  
  TextFormField field3 = new TextFormField();  
  TextFormField field4 = new TextFormField();    

  @override
  Widget build(BuildContext context) {
    return Form(
        key: _formKey,
        child: Column(
            crossAxisAlignment: CrossAxisAlignment.center,
            children: <Widget>[
              field1,
              field2,
              field3,
              field4
              ])
        );
  }

