• Hassan Toor's avatar
    [web] - Fix broken `TextField` in semantics mode when it's a sibling of `Navigator` (#138446) · 59e892d3
    Hassan Toor authored
    When a `TextField` is rendered before a `Navigator`, it breaks in semantics mode.  This is because the framework generates the incorrect semantics tree (excludes the TextField) and when that tree gets sent to the engine, we don't get the signal to create the corresponding `<input>` element.
    
    This happens for a few reasons:
    * `ModalBarrier` uses `BlockSemantics` to drop the semantics of routes beneath the current route in `Navigator`
    * `ModalBarrier` mistakenly recognizes the widget outside of the `Navigator` to be its sibling
    *  So we end up dropping the semantics node of the `TextField` rendered before it. 
    
    The fix is to let `Navigator` generate a semantics node so that `ModalBarrier` doesn't mistakenly think widgets outside of `Navigator` are its siblings.  
    
    `Navigator` doesn't currently do this, which causes all the nodes generated from its widget subtree to be directly attached to the parent semantics node above `Navigator` - since this is also the parent of `TextField`, it considers them siblings. 
    
    Fixes https://github.com/flutter/flutter/issues/129324
    59e892d3
bottom_sheet_test.dart 78 KB