# KeyEvent class

A custom KeyboardEvent that attempts to eliminate cross-browser inconsistencies, and also provide both keyCode and charCode information for all key events (when such information can be determined).

KeyEvent tries to provide a higher level, more polished keyboard event information on top of the "raw" KeyboardEvent.

The mechanics of using KeyEvents is a little different from the underlying KeyboardEvent. To use KeyEvents, you need to create a stream and then add KeyEvents to the stream, rather than using the EventTarget.dispatchEvent. Here's an example usage:

    // Initialize a stream for the KeyEvents:
    var stream = KeyEvent.keyPressEvent.forTarget(document.body);
    // Start listening to the stream of KeyEvents.
    stream.listen((keyEvent) =>
        window.console.log('KeyPress event detected ${keyEvent.charCode}'));
    ...
    // Add a new KeyEvent of someone pressing the 'A' key to the stream so
    // listeners can know a KeyEvent happened.
    stream.add(new KeyEvent('keypress', keyCode: 65, charCode: 97));

This class is very much a work in progress, and we'd love to get information on how we can make this class work with as many international keyboards as possible. Bugs welcome!

Implements
  - KeyboardEvent

## Constructors

KeyEvent(String type, { Window view, bool canBubble: true, bool cancelable: true, int keyCode: 0, int charCode: 0, int location: 1, bool ctrlKey: false, bool altKey: false, bool shiftKey: false, bool metaKey: false, EventTarget currentTarget })
  Programmatically create a new KeyEvent (and KeyboardEvent).
  factory
KeyEvent.wrap(KeyboardEvent parent)
  Construct a KeyEvent with `parent` as the event we're emulating.

## Properties

altKey → bool
  Calculated value of whether the alt key is pressed is for this event.
  read-only
charCode → int
  Calculated value of what the estimated charCode is for this event.
  read-only
code → String
  read-only
ctrlKey → bool
  True if the ctrl key is pressed during this event.
  read-only
currentTarget → EventTarget
  The currently registered target for this event.
  read-only
detail → int
  read-only
isComposed → bool
  read-only
isComposing → bool
  read-only
key → String
  read-only
keyCode → int
  Calculated value of what the estimated keyCode is for this event.
  read-only
location → int
  Accessor to the part of the keyboard that the key was pressed from (one of KeyLocation.STANDARD, KeyLocation.RIGHT, KeyLocation.LEFT, KeyLocation.NUMPAD, KeyLocation.MOBILE, KeyLocation.JOYSTICK).
  read-only
metaKey → bool
  True if the Meta (or Mac command) key is pressed during this event.
  read-only
repeat → bool
  read-only
shiftKey → bool
  True if the shift key was pressed during this event.
  read-only
sourceCapabilities → InputDeviceCapabilities
  final
view → Window
  read-only
which → int
  Calculated value of what the estimated keyCode is for this event.
  read-only
bubbles → bool
  read-only, inherited
cancelable → bool
  read-only, inherited
composed → bool
  read-only, inherited
defaultPrevented → bool
  read-only, inherited
eventPhase → int
  read-only, inherited
hashCode → int
  The hash code for this object. [...]
  read-only, inherited
isTrusted → bool
  read-only, inherited
matchingTarget → Element
  A pointer to the element whose CSS selector matched within which an event was fired. If this Event was not associated with any Event delegation, accessing this value will throw an UnsupportedError.
  read-only, inherited
path → List<Node>
  This event's path, taking into account shadow DOM. [...]
  read-only, inherited
runtimeType → Type
  A representation of the runtime type of the object.
  read-only, inherited
target → EventTarget
  read-only, inherited
timeStamp → double
  read-only, inherited
type → String
  read-only, inherited
wrapped → Event
  final, inherited

## Methods

getModifierState(String keyArgument) → bool
composedPath() → List<EventTarget>
  inherited
noSuchMethod(Invocation invocation) → dynamic
  Invoked when a non-existent method or property is accessed. [...]
  inherited
preventDefault() → void
  inherited
stopImmediatePropagation() → void
  inherited
stopPropagation() → void
  inherited
toString() → String
  Returns a string representation of this object.
  inherited

## Operators

operator ==(dynamic other) → bool
  The equality operator. [...]
  inherited

## Static Properties

canUseDispatchEvent → bool
  read-only
keyDownEvent ↔ EventStreamProvider<KeyEvent>
  Accessor to provide a stream of KeyEvents on the desired target.
  read / write
keyPressEvent ↔ EventStreamProvider<KeyEvent>
  Accessor to provide a stream of KeyEvents on the desired target.
  read / write
keyUpEvent ↔ EventStreamProvider<KeyEvent>
  Accessor to provide a stream of KeyEvents on the desired target.
  read / write