onLevelUp property
Fires once per level crossed by the most recent grantXp call — null
until the first level-up. Not persisted (a UI popup trigger, not
durable state); PlayerProgressionSnapshot is the durable source.
Implementation
final onLevelUp = Rx<LevelUpEvent?>(null);