When the user typed a query, onChanged already fired _runSearch and
results settled. Pressing Enter then triggered onSubmitted → a second
IMAP search whose response could arrive in a different order, silently
reordering the visible list so the tile at position 0 no longer
corresponded to the email the user was about to tap.
Fix: onSubmitted now skips _runSearch when results are already present
(_searchResults != null) or a search is in flight (_searchLoading).
Adds a regression test that verifies the list order is unchanged after
pressing Enter on an already-settled search.
Closes#473
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>