mirror of
https://github.com/flutter/flutter.git
synced 2026-02-20 02:29:02 +08:00
This PR restores the correct precedence behavior for web development server configuration. Since Flutter 3.38, CLI arguments were being ignored when `web_dev_config.yaml` was present — specifically for HTTPS and headers. According to the design and documentation, the precedence should be: 1. Command-line arguments (highest priority) 2. `web_dev_config.yaml` 3. Built-in defaults (lowest priority) ## Root Cause The regression affected: * **HTTP headers** — merge order was reversed, causing file config to override CLI * **HTTPS config** — CLI TLS arguments were ignored under certain conditions Note: `--web-port` and `--web-hostname` were already working correctly due to the `host ?? this.host` and `port ?? this.port` pattern. The observed issue was due to headers + HTTPS only. ## Changes Made * Fixed header merge order so CLI takes precedence * Corrected HTTPS config resolution and precedence logic * Unified logic across `run` and `drive` commands * Simplified HTTPS handling using `HttpsConfig.parse()` * Added tests for CLI precedence behavior ## Before (broken) ``` flutter run -d chrome --web-tls-cert-path cert.pem ``` ❌ CLI TLS args ignored when config file existed ❌ headers overridden by file config ## After (fixed) ``` flutter run -d chrome --web-tls-cert-path cert.pem ``` ✅ CLI TLS args respected ✅ headers override config as expected ## Tests * Added tests verifying CLI takes precedence * All existing and new tests pass * No breaking changes introduced ## Fixes Fixes: #179014 --------- Co-authored-by: Kevin Moore <kevmoo@google.com> Co-authored-by: Kevin Moore <kevmoo@users.noreply.github.com> Co-authored-by: Ben Konyi <bkonyi@google.com>