null-annotate lib/ui/pointer.dart (#18354)

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;
 }