Validator pushed TextFormField above
The problem is that TextField and TextFormField size themselves to include all of their content and decoration. If you add some error text onto the bottom of the TextFormField, then it will include that in its height. When it tries to size itself to fit into your Container, it doesn't have as much space for the input.
You could work around this by specifying the height of your Container in both the valid and invalid states. You'll have to fiddle with the exact invalid height, but it might look something like this:
Container(
height: _isInvalid ? 100 : 50,
TextFormField(),
),
Another option is to add counterText: ' '
to your InputDecoration and then size the Container to the size that you want. This will give you extra space to fit the error text without needing to change the height of the TextFormField.
Container(
height: 100,
TextFormField(
decoration: InputDecoration(
counterText: ' ',
),
),
),
The cleanest solution, if it's possible for you, may be to not use a Container at all. If you can create the input you want just by using InputDecoration and things like contentPadding
etc., it will likely make this a lot cleaner.