James Robinson 53163f8b99 Teach event system about disposition and make 'consumed' disposition terminal
This introduces the notion of event disposition and allows event
targets (widgets and render objects) to consume events that should not
be processed further. This is needed by the Switch component in the
Drawer in the stocks example. The Switch is embedded in a DrawerItem.
The Switch handles the gesture tap event to toggle its state and should
handle pointer events to allow swiping and draw its own radial
reaction. The DrawerItem also handles gesture taps to allow toggling
the switch value when tapping anywhere on the drawer and to draw its
own ink splash. When tapping on the switch, both the switch's render
object and the DrawerItem's listener are in the event dispatch path.
The Switch needs to signal in some fashion that it consumed the event
so the DrawerItem does not also try to toggle the switch's state.
2015-08-03 17:31:30 -07:00
..
2015-07-28 17:01:15 -07:00

Sky Base

AbstractNode

The node.dart file defines a class, AbstractNode, which can be used to build mutable trees.

  • When a subclass is changing the parent of a child, it should call either parent.adoptChild(child) or parent.dropChild(child) as appropriate. Subclasses should expose an API for manipulating the tree if you want to (e.g. a setter for a 'child' property, or an 'add()' method to manipulate a list).

  • You can see the current parent by querying 'parent'.

  • You can see the current attachment state by querying 'attached'. The root of any tree that is to be considered attached should be manually attached by calling 'attach()'. Other than that, don't call 'attach()' or 'detach()'. This is all managed automatically assuming you call the 'adoptChild()' and 'dropChild()' methods appropriately.

  • Subclasses that have children must override 'attach()' and 'detach()' as described below.

  • Nodes always have a 'depth' greater than their ancestors'. There's no guarantee regarding depth between siblings. The depth of a node is used to ensure that nodes are processed in depth order. The 'depth' of a child can be more than one greater than the 'depth' of the parent, because the 'depth' values are never decreased: all that matters is that it's greater than the parent. Consider a tree with a root node A, a child B, and a grandchild C. Initially, A will have 'depth' 0, B 'depth' 1, and C 'depth' 2. If C is moved to be a child of A, sibling of B, then the numbers won't change. C's 'depth' will still be 2. This is all managed automatically assuming you call 'adoptChild()' and 'dropChild()' appropriately.

Dependencies

No dependencies except for dart:sky and Dart's core libraries.