mirror of
https://github.com/flutter/flutter.git
synced 2026-01-23 16:36:37 +08:00
**What/Why** On Flutter Web with semantics enabled, <input type="email"> can reject selection APIs in some browsers, causing: cursor to not advance while typing, selection to fail (and selected text not deletable), and, in some cases, InvalidStateError exceptions. This PR updates the semantics editing element for email fields to keep selection/cursor APIs working while preserving email UX. **How** In engine/src/flutter/lib/web_ui/lib/src/engine/semantics/text_field.dart: Use type="text" for SemanticsInputType.email Add inputmode="email" (keeps email keyboard layout/hints) Add autocomplete="email" (preserves autofill) Add autocapitalize="none" (prevents unwanted capitalization) Remove the attributes when not email Rationale: type="text" avoids browser selection restrictions; inputmode="email" preserves the expected email keyboard; autofill and capitalization behavior is retained/optimized. **Before/After** Before the change https://email-0923-before.web.app/ After the change https://email-0923.web.app/ **Impact** Cursor now advances correctly while typing in email fields under semantics. Text can be selected and deleted normally. Avoids InvalidStateError crashes with accessibility semantics enabled. **Tests/Verification** Manually verified on Chrome and safari: Typing in email fields advances cursor correctly Drag-select, double-click select, and Cmd/Ctrl+A work Deleting selected text works No exceptions thrown with semantics enabled Autofill prompts continue to appear when saved emails are available. Mobile keyboards (iOS/Android) show email-optimized layout via inputmode="email". **Fixed issues** Fixes flutter/flutter#173239 ## Pre-launch Checklist - [x] I read the [Contributor Guide] and followed the process outlined there for submitting PRs. - [x] I read the [Tree Hygiene] wiki page, which explains my responsibilities. - [x] I read and followed the [Flutter Style Guide], including [Features we expect every widget to implement]. - [x] I signed the [CLA]. - [x] I listed at least one issue that this PR fixes in the description above. - [x] I updated/added relevant documentation (doc comments with `///`). - [x] I added new tests to check the change I am making, or this PR is [test-exempt]. - [x] I followed the [breaking change policy] and added [Data Driven Fixes] where supported. - [x] All existing and new tests are passing.
Flutter Engine
Setting up the Engine development environment
See here
gclient bootstrap
Flutter engine uses gclient to manage dependencies.
If you've already cloned the flutter repository: