1. 21 Feb, 2019 1 commit
  2. 12 Sep, 2018 1 commit
  3. 05 Dec, 2017 1 commit
  4. 30 Nov, 2017 1 commit
    • Michael Goderbauer's avatar
      Adapt markNeedsSemanticsUpdate algorithm to new semantics tree compiler (#13274) · 6493c8b4
      Michael Goderbauer authored
      * ensures that only semantics boundaries will be added to owner._nodesNeedingSemantics as expected by compiler.
      * no longer throws assert if markNeedsSemanticsUpdate is called on non-semantic-boundary render object with a non-semantic-boundary parent.
      * Fixes #13109.
      * removes onlyLocalUpdates from markNeedsSemanticsUpdate as its no longer needed.
      6493c8b4
  5. 18 Oct, 2017 1 commit
    • Michael Goderbauer's avatar
      Redesign Semantic Tree Compilation Algorithm (#12605) · f8a2bd20
      Michael Goderbauer authored
      * Oct 12 10:12am
      
      * implicit_semantics_test.dart passes
      
      * refactoring
      
      * works in nice
      
      * minor rename
      
      * more doc comments
      
      * to be explicit check better
      
      * fix test
      
      * ++
      
      * ++
      
      * semantics_9_test (BlockSemantics) and implicit_semantics_test are passing
      
      * doc updates
      
      * tiny refactor
      
      * fix static errors in tests
      
      * fix gesture detector
      
      * ++
      
      * ++
      
      * geometry
      
      * ++
      
      * remove noGeometry
      
      * revert test
      
      * +
      
      * all tests but scrolling/clipping pass
      
      * clipping works
      
      * scrolling halfway
      
      * sliver tests pass
      
      * ALL TESTS PASS
      
      * SemanticsNode changed
      
      * docs and tiny fixes
      
      * card test
      
      * more doc comments
      
      * remove missed print
      
      * more tests
      
      * make test pass on Linux
      
      * remove changes to intellij proj file
      
      * review comments
      f8a2bd20
  6. 07 Sep, 2017 1 commit
  7. 31 Aug, 2017 1 commit
  8. 26 Aug, 2017 1 commit
    • Michael Goderbauer's avatar
      Doc updates for Semantics; always reset SemanticsNode (#11770) · f2653015
      Michael Goderbauer authored
      * refactor to ensureAction + some related doc fixes
      
      * Update docs for markNeedsSemanticsUpdate
      
      * rewording
      
      * rewording
      
      * ensureAction test
      
      * ensureAction test
      
      * ensureAction test
      
      * more tests
      
      * refactor to allways reset node
      
      * tiny fixes
      
      * more test
      
      * doc fixes
      
      * one more test
      
      * review comments
      f2653015
  9. 08 Aug, 2017 1 commit
    • Michael Goderbauer's avatar
      Don't trigger an assert when markNeedsSemanticsUpdate is called multiple times... · b551f534
      Michael Goderbauer authored
      Don't trigger an assert when markNeedsSemanticsUpdate is called multiple times in edge cases (#11544)
      
      * Don't trigger assert if a render object ceases to be a semantic boundary
      
      This bug was exposed by https://github.com/flutter/flutter/pull/11309, which caused the following assertion to trigger when scrolling in the Animation demo:
      
      ```
      The following assertion was thrown during _updateSemantics():
      'package:flutter/src/rendering/object.dart': Failed assertion: line 2626 pos 16: 'fragment is
      _InterestingSemanticsFragment': is not true.
      ```
      
      A minimal reproduction of the bug can be found in `semantics_10_test.dart`, which has been added as a regression test for the bug by this PR.
      
      Looking at that test, here is a description of the faulty behaviour:
      1. During the second `pumpWidget` call `RenderExcludeSemantics` marks itself as needing a semantics update (due to excluding going from `false` -> `true`).
      2. This causes the nearest ancestor with semantics information (here: `RenderSemanticsAnnotations` representing the "container" Semantics widget) to be added to the `_nodesNeedingSemantics` list.
      3. `RenderSliverList` (implementation behind ListView) marks itself as needing a semantics update (due to its changing children).
      4. This causes the `RenderSemanticsGestureHandler` to be added to the `_nodesNeedingSemantics` list.
      5. Next, canDrag is updated from `true` -> `false`. This means, `RenderSemanticsGestureHandler` is no longer a semantics boundary, it marks itself as needing a semantics update.
      6. The nearest ancestor with semantics (`RenderSemanticsAnnotations`, the "container") is added to the `_nodesNeedingSemantics` list (this is a no-op because it is already in the list).
      7. During `flushSemantics`, the `_nodesNeedingSemantics` list is walked. The first entry (`RenderSemanticsAnnotations`) updates the semantics tree to only contain the container widget and drop everything else (= no children of the ExcludeSemantics widget are walked).
      8. The second entry (`RenderSemanticsGestureHandler`) is updated. It does not add any semantics of its own and is no longer a semantics boundary. Therefore, it wants to merge its descendent semantics into its parents. Here is where the assert throws because the algorithm assumes that every entry in the `_nodesNeedingSemantics` list will produce and own an `_InterestingSemanticsFragment` (passing your semantics on to your parents is not interesting).
      
      The problem here seems to be step 4 in combination with step 5. In step 4 we rely on the fact that `RenderSemanticsGestureHandler` is an (explicit or implicit) semantics boundary and that it will be able to absorb the semantics change of `RenderSliverList`. This is true
      at this time. However, in step 4 `RenderSemanticsGestureHandler` decides to no longer be an (explicit or implicit) semantics boundary and our assumption from step 5 becomes incorrect. We did nothing to correct this assumption.
      
      This PR removes a node, that could potentially cease to be a (explicit or implicit) semantics boundary from the `_nodesNeedingSemantics` list to fix that problem. Please node that this does not mean that the node's semantics will not be updated: The node's closest ances
      tor with semantics is added to that list during the `markNeedsSemanticsUpdate` call. During `flushSemantics` we will walk from this node to update the semantics of it's children (if changed), which will include the node in question.
      
      * tiny fix
      
      * simplify test
      
      * analyzer fixes
      
      * review comments
      b551f534