I agree that how it works is a bit confusing. I've done a bit of testing and I think this is how it works. However I have only tested this with the address input field, so please be aware that other elements may behave differently.
When you switch between screens all the element values are discarded. You effectively return to the screen as it was when you first loaded it. Sometimes this is desired behavior because it forces the user to reconsider everything on the screen. At other times it's annoying. (Let's say you've input an address and made a typo. You click back and the whole address is gone.)
When you want to remember the values, there are two situations that may be relevant.
1) You only want to use the values of the elements only within that specific flow screen.
You use them for instance to toggle the visibility of other parts of the screen. If you still want the flow screen to remember the input value, then you need to set an input attribute for that screen element. Just the act of setting a value there is enough to make sure the flow will remember the user input when they click back. This solution requires that you deselect the manual variable assignment
checkbox. I just tested this with an address element and what you put in doesn't seem to matter. It can be a variable (it won't be changed by the screen element). It can be a normal text string. Or it can even be a space or a {!$GlobalConstant.EmptyString}
.
2) Often you will want to use the user input in other elements of your flow. In that case you will need to use the manual variable assignment
option. However, if you still want the flow to remember the values if you click back, then just setting the manual variable assignment
is not enough. You stil need to set the input attributes.
However, and this is odd, it doesn't seem to matter much what you put there. I have used three {!$GlobalConstant.EmptyString}
in the input attributes, and put the three address fields in the same output variable and when I clicked back it had still remembered the proper values of each field. Of course one shouldn't do that in a real flow.