The same demo app, built twice: once against the engine as it is today, once against the branch. Plus a plain HTML login form as a reference for how a password manager behaves when Flutter is not involved.
The app shows each TextEditingController's value on screen, so you can see
whether what the manager wrote actually reached the Flutter side, rather than only landing in
the hidden DOM input. It also logs focus changes, which is where most of the trouble was.
On Before, a login form fills one field at a time at best: which half arrives depends on which field you invoked the manager from, and in several combinations nothing arrives at all. On After, Bitwarden, Proton Pass and Chrome's own manager each fill both fields from either field.
Clearing a field by hand also now reaches the proxy the manager reads, so a manager stops offering to save a password you have already deleted.
Demo app source · pubspec.yaml · single file, no packages beyond Flutter.