Looks like you are close but you got a bit excited here !
valveOut, LOW;
If I were you I would rename previousMillis to startMillis or even more explicitly postFlowStartTime. The variable should only be set to millis() when the button becomes released. Is that what your code does ?
if (currentMillis - previousMillis >= postFlow)
digitalWrite(valveOut, LOW); // turn on valve
previousMillis = currentMillis;
Which line or lines of code do you intend to execute if the test returns true ? My advice would be to always use {} round conditional code blocks even if the block is only 1 line. It makes the intention much clearer.
Did you see my reply #17 ?