userFraction property

double? userFraction
final

Play's userFraction, exactly as sent — the authoritative value. Null when Play sent none.

Google sets it only for PlayReleaseStatus.inProgress and PlayReleaseStatus.halted, and documents it as 0 < fraction < 1 — cited, and caveated, on PlayReleaseStatus.audienceFraction. So null here is not "no rollout": a PlayReleaseStatus.completed release carries no fraction precisely because it reached everybody, which is the one case where reading this field instead of audienceFraction gives the opposite of the right answer.

And it is load-bearing even for a caller that never reads it. It is the second input to audienceFraction, so carrying it is what lets a caller recompute that field rather than trust it — and PlayReleaseStatus.audienceFraction states why the recomputation, not this field's nullness, is what survives Google's documented range being wrong.

Unread and load-bearing are compatible, which is worth saying because the two get filed together. A field nobody reads can usually be deleted at no cost to anyone; deleting this one would leave audienceFraction checkable only against a sentence in a dependency's generated dartdoc. Unread is a fact about callers, load-bearing is a fact about the document, and only the first is an argument about whether a field earns its place.

Spelled with Play's own key rather than as a *Raw sibling, which the enums beside it need because ours and theirs share a name. Here they do not, so there is one name per fact instead of three names for two.

Implementation

final double? userFraction;