shyndman/flutter_layout_grid

Improve accessibility through automatic semantic ordering

shyndman opened this issue · 0 comments

The README has a description of how to get a screenreader to announce grid items in a sensible order, independently of how they appear visually. This is roughly equivalent to how CSS Grid Layout works (ie, it doesn't do much, but you can direct behavior yourself).

It occurred to me that we can do a much better job than this, since we may be able to automatically introduce SemanticsNodes to mirror placement. For example, introducing a SemanticsSortKey subclass that orders by column first, then row (and considers directionality?).

I'm not exactly sure how this would work yet. Things that would need figuring out:

  • How are semantics nodes introduced without using Semantics widgets?
  • Should the grid introduce a SemanticsNode, so that children are kept explicit (explicitChildNodes = true)
    • Is there another way to keep a child's sortKey from merging with its parent?
    • What is the implication of this, if the nodes would merge in other circumstances, like with Text widgets?
  • How should the automatic child SemanticsNodes work?
    • We would need for placement to have taken place, in order to resolve to explicit column/row placement for the sort key.
    • How are they introduced?
  • How does directionality fit in?
  • Should this be default behavior?
    • If so, how do you turn it off? And vice versa?