DailyLoginService class
Tracks the daily-login streak: last claimed day, current position (1..7, cycling) in the reward cycle, and which days of the current cycle have already been claimed.
The ONLY source of "what day is it" is todayEpochDayClamped()
(utils/clamped_clock.dart) — this service never calls DateTime.now()
directly, so winding the device clock back can't be used to claim the
same day twice or dodge the streak-reset penalty for a skipped day.
- Inheritance
-
- Object
- GetLifeCycle
- DisposableInterface
- GetxService
- DailyLoginService
Constructors
- DailyLoginService({String? storageKey})
Properties
-
claimedDaysInCycle
→ Set<
int> -
Which cycle days (1..kDailyLoginCycleLength) have been claimed since
the last reset/wrap.
no setter
- currentStreakDay → int
-
Current streak position, 1..kDailyLoginCycleLength;
0before the very first claim.no setter -
debugPendingSaves
→ Future<
void> -
Awaits every save queued so far — lets a test deterministically wait
for a burst of rapid
claimTodaycalls to fully settle instead of guessing a delay.no setter - hashCode → int
-
The hash code for this object.
no setterinherited
- initialized → bool
-
Checks whether the controller has already been initialized.
no setterinherited
- isClosed → bool
-
Checks whether the controller has already been closed.
no setterinherited
- longestStreakEver → int
-
IDEA-49: highest number of TRUE consecutive claimed days ever
reached — unlike currentStreakDay (which wraps 1..7 purely for the
calendar UI), this counts past 7 and never resets when a streak
breaks; it only ever grows. Starts at
0before any claim.no setter -
onDelete
→ InternalFinalCallback<
void> -
Internal callback that starts the cycle of this controller.
finalinherited
-
onStart
→ InternalFinalCallback<
void> -
Called at the exact moment the widget is allocated in memory.
It uses an internal "callable" type, to avoid any @overrides in subclases.
This method should be internal and is required to define the
lifetime cycle of the subclass.
finalinherited
- runtimeType → Type
-
A representation of the runtime type of the object.
no setterinherited
Methods
-
$configureLifeCycle(
) → void -
inherited
-
canClaimToday(
) → bool - Whether today's reward is still claimable (i.e. not already claimed).
-
claimToday(
) → DailyLoginClaimResult -
Claims today's reward: advances the streak by one day, or resets it to
day 1 if at least one full day was skipped since the last claim.
Marks today claimed. A no-op (returns the unchanged current state,
streakWasReset: false) if today was already claimed. -
noSuchMethod(
Invocation invocation) → dynamic -
Invoked when a nonexistent method or property is accessed.
inherited
-
onClose(
) → void -
Called before
onDeletemethod.onClosemight be used to dispose resources used by the controller. Like closing events, or streams before the controller is destroyed. Or dispose objects that can potentially create some memory leaks, like TextEditingControllers, AnimationControllers. Might be useful as well to persist some data on disk.inherited -
onInit(
) → void -
Called immediately after the widget is allocated in memory.
You might use this to initialize something for the controller.
inherited
-
onReady(
) → void -
Called 1 frame after onInit(). It is the perfect place to enter
navigation events, like snackbar, dialogs, or a new route, or
async request.
inherited
-
toString(
) → String -
A string representation of this object.
inherited
Operators
-
operator ==(
Object other) → bool -
The equality operator.
inherited
Static Properties
- maybe → DailyLoginService?
-
Gets the instance if already registered (safe to call from widget tests).
no setter