diff --git a/lib/ui/pointer.dart b/lib/ui/pointer.dart
index b0da73d..85dac42 100644
--- a/lib/ui/pointer.dart
+++ b/lib/ui/pointer.dart
@@ -102,50 +102,50 @@
   });
 
   /// Time of event dispatch, relative to an arbitrary timeline.
-  final Duration timeStamp;
+  final Duration/*!*/ timeStamp;
 
   /// How the pointer has changed since the last report.
-  final PointerChange change;
+  final PointerChange/*!*/ change;
 
   /// The kind of input device for which the event was generated.
-  final PointerDeviceKind kind;
+  final PointerDeviceKind/*!*/ kind;
 
   /// The kind of signal for a pointer signal event.
-  final PointerSignalKind signalKind;
+  final PointerSignalKind/*?*/ signalKind;
 
   /// Unique identifier for the pointing device, reused across interactions.
-  final int device;
+  final int/*!*/ device;
 
   /// Unique identifier for the pointer.
   ///
   /// This field changes for each new pointer down event. Framework uses this
   /// identifier to determine hit test result.
-  final int pointerIdentifier;
+  final int/*!*/ pointerIdentifier;
 
   /// X coordinate of the position of the pointer, in physical pixels in the
   /// global coordinate space.
-  final double physicalX;
+  final double/*!*/ physicalX;
 
   /// Y coordinate of the position of the pointer, in physical pixels in the
   /// global coordinate space.
-  final double physicalY;
+  final double/*!*/ physicalY;
 
   /// The distance of pointer movement on X coordinate in physical pixels.
-  final double physicalDeltaX;
+  final double/*!*/ physicalDeltaX;
 
   /// The distance of pointer movement on Y coordinate in physical pixels.
-  final double physicalDeltaY;
+  final double/*!*/ physicalDeltaY;
 
   /// Bit field using the *Button constants (primaryMouseButton,
   /// secondaryStylusButton, etc). For example, if this has the value 6 and the
   /// [kind] is [PointerDeviceKind.invertedStylus], then this indicates an
   /// upside-down stylus with both its primary and secondary buttons pressed.
-  final int buttons;
+  final int/*!*/ buttons;
 
   /// Set if an application from a different security domain is in any way
   /// obscuring this application's window. (Aspirational; not currently
   /// implemented.)
-  final bool obscured;
+  final bool/*!*/ obscured;
 
   /// Set if this pointer data was synthesized by pointer data packet converter.
   /// pointer data packet converter will synthesize additional pointer datas if
@@ -153,34 +153,34 @@
   ///
   /// For example, a down pointer data will be synthesized if the converter receives
   /// a move pointer data while the pointer is not previously down.
-  final bool synthesized;
+  final bool/*!*/ synthesized;
 
   /// The pressure of the touch as a number ranging from 0.0, indicating a touch
   /// with no discernible pressure, to 1.0, indicating a touch with "normal"
   /// pressure, and possibly beyond, indicating a stronger touch. For devices
   /// that do not detect pressure (e.g. mice), returns 1.0.
-  final double pressure;
+  final double/*!*/ pressure;
 
   /// The minimum value that [pressure] can return for this pointer. For devices
   /// that do not detect pressure (e.g. mice), returns 1.0. This will always be
   /// a number less than or equal to 1.0.
-  final double pressureMin;
+  final double/*!*/ pressureMin;
 
   /// The maximum value that [pressure] can return for this pointer. For devices
   /// that do not detect pressure (e.g. mice), returns 1.0. This will always be
   /// a greater than or equal to 1.0.
-  final double pressureMax;
+  final double/*!*/ pressureMax;
 
   /// The distance of the detected object from the input surface (e.g. the
   /// distance of a stylus or finger from a touch screen), in arbitrary units on
   /// an arbitrary (not necessarily linear) scale. If the pointer is down, this
   /// is 0.0 by definition.
-  final double distance;
+  final double/*!*/ distance;
 
   /// The maximum value that a distance can return for this pointer. If this
   /// input device cannot detect "hover touch" input events, then this will be
   /// 0.0.
-  final double distanceMax;
+  final double/*!*/ distanceMax;
 
   /// The area of the screen being pressed, scaled to a value between 0 and 1.
   /// The value of size can be used to determine fat touch events. This value
@@ -188,21 +188,21 @@
   /// the range of detectable values. So, for example, the value of 0.1 could
   /// mean a touch with the tip of the finger, 0.2 a touch with full finger,
   /// and 0.3 the full palm.
-  final double size;
+  final double/*!*/ size;
 
   /// The radius of the contact ellipse along the major axis, in logical pixels.
-  final double radiusMajor;
+  final double/*!*/ radiusMajor;
 
   /// The radius of the contact ellipse along the minor axis, in logical pixels.
-  final double radiusMinor;
+  final double/*!*/ radiusMinor;
 
   /// The minimum value that could be reported for radiusMajor and radiusMinor
   /// for this pointer, in logical pixels.
-  final double radiusMin;
+  final double/*!*/ radiusMin;
 
   /// The minimum value that could be reported for radiusMajor and radiusMinor
   /// for this pointer, in logical pixels.
-  final double radiusMax;
+  final double/*!*/ radiusMax;
 
   /// For PointerDeviceKind.touch events:
   ///
@@ -229,7 +229,7 @@
   /// indicate that the stylus would go down in the negative y-axis direction;
   /// pi/4 would indicate that the stylus goes up and to the right, -pi/2 would
   /// indicate that the stylus goes to the left, etc).
-  final double orientation;
+  final double/*!*/ orientation;
 
   /// For PointerDeviceKind.stylus and PointerDeviceKind.invertedStylus events:
   ///
@@ -241,20 +241,20 @@
   /// perpendicular to the input surface (thus 0.0 indicates the stylus is
   /// orthogonal to the plane of the input surface, while pi/2 indicates that
   /// the stylus is flat on that surface).
-  final double tilt;
+  final double/*!*/ tilt;
 
   /// Opaque platform-specific data associated with the event.
-  final int platformData;
+  final int/*!*/ platformData;
 
   /// For events with signalKind of PointerSignalKind.scroll:
   ///
   /// The amount to scroll in the x direction, in physical pixels.
-  final double scrollDeltaX;
+  final double/*!*/ scrollDeltaX;
 
   /// For events with signalKind of PointerSignalKind.scroll:
   ///
   /// The amount to scroll in the y direction, in physical pixels.
-  final double scrollDeltaY;
+  final double/*!*/ scrollDeltaY;
 
   @override
   String toString() => 'PointerData(x: $physicalX, y: $physicalY)';
@@ -296,10 +296,10 @@
 /// A sequence of reports about the state of pointers.
 class PointerDataPacket {
   /// Creates a packet of pointer data reports.
-  const PointerDataPacket({ this.data = const <PointerData>[] });
+  const PointerDataPacket({ this.data = const <PointerData>[] }) : assert(data != null);
 
   /// Data about the individual pointers in this packet.
   ///
   /// This list might contain multiple pieces of data about the same pointer.
-  final List<PointerData> data;
+  final List<PointerData/*!*/>/*!*/ data;
 }
diff --git a/lib/web_ui/lib/src/ui/pointer.dart b/lib/web_ui/lib/src/ui/pointer.dart
index 8f44baa..9f4346a 100644
--- a/lib/web_ui/lib/src/ui/pointer.dart
+++ b/lib/web_ui/lib/src/ui/pointer.dart
@@ -102,50 +102,50 @@
   });
 
   /// Time of event dispatch, relative to an arbitrary timeline.
-  final Duration timeStamp;
+  final Duration/*!*/ timeStamp;
 
   /// How the pointer has changed since the last report.
-  final PointerChange change;
+  final PointerChange/*!*/ change;
 
   /// The kind of input device for which the event was generated.
-  final PointerDeviceKind kind;
+  final PointerDeviceKind/*!*/ kind;
 
   /// The kind of signal for a pointer signal event.
-  final PointerSignalKind signalKind;
+  final PointerSignalKind/*?*/ signalKind;
 
   /// Unique identifier for the pointing device, reused across interactions.
-  final int device;
+  final int/*!*/ device;
 
   /// Unique identifier for the pointer.
   ///
   /// This field changes for each new pointer down event. Framework uses this
   /// identifier to determine hit test result.
-  final int pointerIdentifier;
+  final int/*!*/ pointerIdentifier;
 
   /// X coordinate of the position of the pointer, in physical pixels in the
   /// global coordinate space.
-  final double physicalX;
+  final double/*!*/ physicalX;
 
   /// Y coordinate of the position of the pointer, in physical pixels in the
   /// global coordinate space.
-  final double physicalY;
+  final double/*!*/ physicalY;
 
   /// The distance of pointer movement on X coordinate in physical pixels.
-  final double physicalDeltaX;
+  final double/*!*/ physicalDeltaX;
 
   /// The distance of pointer movement on Y coordinate in physical pixels.
-  final double physicalDeltaY;
+  final double/*!*/ physicalDeltaY;
 
   /// Bit field using the *Button constants (primaryMouseButton,
   /// secondaryStylusButton, etc). For example, if this has the value 6 and the
   /// [kind] is [PointerDeviceKind.invertedStylus], then this indicates an
   /// upside-down stylus with both its primary and secondary buttons pressed.
-  final int buttons;
+  final int/*!*/ buttons;
 
   /// Set if an application from a different security domain is in any way
   /// obscuring this application's window. (Aspirational; not currently
   /// implemented.)
-  final bool obscured;
+  final bool/*!*/ obscured;
 
   /// Set if this pointer data was synthesized by pointer data packet converter.
   /// pointer data packet converter will synthesize additional pointer datas if
@@ -153,34 +153,34 @@
   ///
   /// For example, a down pointer data will be synthesized if the converter receives
   /// a move pointer data while the pointer is not previously down.
-  final bool synthesized;
+  final bool/*!*/ synthesized;
 
   /// The pressure of the touch as a number ranging from 0.0, indicating a touch
   /// with no discernible pressure, to 1.0, indicating a touch with "normal"
   /// pressure, and possibly beyond, indicating a stronger touch. For devices
   /// that do not detect pressure (e.g. mice), returns 1.0.
-  final double pressure;
+  final double/*!*/ pressure;
 
   /// The minimum value that [pressure] can return for this pointer. For devices
   /// that do not detect pressure (e.g. mice), returns 1.0. This will always be
   /// a number less than or equal to 1.0.
-  final double pressureMin;
+  final double/*!*/ pressureMin;
 
   /// The maximum value that [pressure] can return for this pointer. For devices
   /// that do not detect pressure (e.g. mice), returns 1.0. This will always be
   /// a greater than or equal to 1.0.
-  final double pressureMax;
+  final double/*!*/ pressureMax;
 
   /// The distance of the detected object from the input surface (e.g. the
   /// distance of a stylus or finger from a touch screen), in arbitrary units on
   /// an arbitrary (not necessarily linear) scale. If the pointer is down, this
   /// is 0.0 by definition.
-  final double distance;
+  final double/*!*/ distance;
 
   /// The maximum value that a distance can return for this pointer. If this
   /// input device cannot detect "hover touch" input events, then this will be
   /// 0.0.
-  final double distanceMax;
+  final double/*!*/ distanceMax;
 
   /// The area of the screen being pressed, scaled to a value between 0 and 1.
   /// The value of size can be used to determine fat touch events. This value
@@ -188,21 +188,21 @@
   /// the range of detectable values. So, for example, the value of 0.1 could
   /// mean a touch with the tip of the finger, 0.2 a touch with full finger,
   /// and 0.3 the full palm.
-  final double size;
+  final double/*!*/ size;
 
   /// The radius of the contact ellipse along the major axis, in logical pixels.
-  final double radiusMajor;
+  final double/*!*/ radiusMajor;
 
   /// The radius of the contact ellipse along the minor axis, in logical pixels.
-  final double radiusMinor;
+  final double/*!*/ radiusMinor;
 
   /// The minimum value that could be reported for radiusMajor and radiusMinor
   /// for this pointer, in logical pixels.
-  final double radiusMin;
+  final double/*!*/ radiusMin;
 
   /// The minimum value that could be reported for radiusMajor and radiusMinor
   /// for this pointer, in logical pixels.
-  final double radiusMax;
+  final double/*!*/ radiusMax;
 
   /// For PointerDeviceKind.touch events:
   ///
@@ -229,7 +229,7 @@
   /// indicate that the stylus would go down in the negative y-axis direction;
   /// pi/4 would indicate that the stylus goes up and to the right, -pi/2 would
   /// indicate that the stylus goes to the left, etc).
-  final double orientation;
+  final double/*!*/ orientation;
 
   /// For PointerDeviceKind.stylus and PointerDeviceKind.invertedStylus events:
   ///
@@ -241,20 +241,20 @@
   /// perpendicular to the input surface (thus 0.0 indicates the stylus is
   /// orthogonal to the plane of the input surface, while pi/2 indicates that
   /// the stylus is flat on that surface).
-  final double tilt;
+  final double/*!*/ tilt;
 
   /// Opaque platform-specific data associated with the event.
-  final int platformData;
+  final int/*!*/ platformData;
 
   /// For events with signalKind of PointerSignalKind.scroll:
   ///
   /// The amount to scroll in the x direction, in physical pixels.
-  final double scrollDeltaX;
+  final double/*!*/ scrollDeltaX;
 
   /// For events with signalKind of PointerSignalKind.scroll:
   ///
   /// The amount to scroll in the y direction, in physical pixels.
-  final double scrollDeltaY;
+  final double/*!*/ scrollDeltaY;
 
   @override
   String toString() => '$runtimeType(x: $physicalX, y: $physicalY)';
@@ -296,10 +296,10 @@
 /// A sequence of reports about the state of pointers.
 class PointerDataPacket {
   /// Creates a packet of pointer data reports.
-  const PointerDataPacket({this.data = const <PointerData>[]});
+  const PointerDataPacket({this.data = const <PointerData>[]}) : assert(data != null);
 
   /// Data about the individual pointers in this packet.
   ///
   /// This list might contain multiple pieces of data about the same pointer.
-  final List<PointerData> data;
+  final List<PointerData/*!*/>/*!*/ data;
 }
