hashCode property
Consistent with ==: every NaN offset hashes as double.nan does
(NaNs of other bit patterns hash differently in the VM, yet compare
equal); the two zeros may collide.
Implementation
@override
int get hashCode =>
Object.hash(a, b, kind, offset.isNaN ? double.nan : offset);