anchor.diff:    }
   
     void _handleSelectionHandleChanged(TextSelection selection) {
  +    InputValue newInput = new InputValue(text: _keyboardClient.inputValue.text, selection: selection);
       if (config.onChanged != null)
  -      config.onChanged(_keyboardClient.inputValue.copyWith(selection: selection));
  +      config.onChanged(newInput);
     }
   
     /// Whether the blinking cursor is actually visible at this precise moment
  
positive.code:     // EditableLineWidget, not just changes triggered by user gestures.
      requestKeyboard();
  
      if (config.onChanged != null)
        config.onChanged(_keyboardClient.inputValue.copyWith(selection: selection));
  
      if (_selectionHandles != null) {
        _selectionHandles.hide();
        _selectionHandles = null;
      }
  
      if (_selectionHandles == null &&
          _keyboardClient.inputValue.text.isNotEmpty &&
          config.selectionHandleBuilder != null) {
        _selectionHandles = new TextSelectionHandles(
          selection: selection,
  
negative.code:     else if (_cursorTimer != null && (!focused || !config.value.selection.isCollapsed))
        _stopCursorTimer();
  
      if (_selectionHandles != null) {
        scheduleMicrotask(() { // can't update while disposing, since it triggers a rebuild
          if (focused) {
            _selectionHandles.update(config.value.selection);
          } else {
            _selectionHandles.hide();
            _selectionHandles = null;
          }
        });
      }
  
  