anchor.diff:  
     void _onItemPressed(T node, int nodeIndex) {
       /// Rebuilds the table whenever the tree structure has been updated
  +    selectedNode = node;
  +    selectedNodeIndex = nodeIndex;
  +
  +    _toggleNode(node);
  +  }
  +
  +  void _toggleNode(T node) {
       setState(() {
  -      selectedNode = node;
  -      selectedNodeIndex = nodeIndex;
  -
         if (!node.isExpandable) return;
         animatingNode = node;
         List<T> nodeChildren;
  
positive.code: 
  typedef TableKeyEventHandler = void Function(RawKeyEvent event,
      ScrollController scrollController, BoxConstraints constraints);
  
  /// A table that displays in a collection of [data], based on a collection of
  /// [ColumnData].
  
negative.code:     final firstItemIndex =
          (scrollController.offset / _Table.defaultRowHeight).ceil();
  
      // '-1' in the following calculations is needed because the header row
      // occupies space in the viewport so we must subtract it out.
      final minCompleteItemsInView =
          (viewportHeight / _Table.defaultRowHeight).floor() - 1;
      final lastItemIndex = firstItemIndex + minCompleteItemsInView - 1;
      int newSelectedNodeIndex;
  
      switch (scrollKind) {
        case ScrollKind.down:
          newSelectedNodeIndex = min(selectedNodeIndex + 1, items.length - 1);
          break;
        case ScrollKind.up:
          newSelectedNodeIndex = max(selectedNodeIndex - 1, 0);
          break;
        case ScrollKind.parent:
          newSelectedNodeIndex = items.indexOf(selectedNode.parent);
          break;
      }
  
      final newSelectedNode = items[newSelectedNodeIndex];
  