You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Widget kit expansion, additive only: the public API check reports no removed export. The new service-state widgets are presentation-only: pass plain state and callbacks, your code calls the service. Constructors that validate input at runtime are not const. Failures show generic copy, and a pending call locks the buttons. Some widgets take an explicit status from the caller instead of inferring success from a callback that returns.
The API check (tool/api_compatibility.dart) now follows local export barrels (including show/hide, relative paths and cycles) and fails loudly on export forms it cannot resolve. It is still a regex scanner, not the Dart analyzer: class fields and getters are not covered, so a break there is not detected.
Added save-recovery widgets CloudSaveStatusCard, SaveConflictPicker (keep local / use cloud, each with inline confirmation) and CheckpointResumeCard (confirm before discarding a checkpoint).
Added content-delivery widgets ContentPackStatusCard, ScenePreloadStatusPanel and ContentRevisionHistoryPanel. The panel lists metadata only (opaque revision reference, version, label, time) and never a checksum or content body; restoring needs confirmation, and the caller performs the rollback (for example RemoteContentPack.rollbackToChecksum) and refreshes its content.
Added offline-delivery widgets OutboxQueueStatusCard and OutboxConflictSummaryPanel. Neither shows a queued payload or key; the conflict panel works on caller-approved labels and opaque references, and accepting the remote version states that it does not undo local effects.
Added PlayerDataRightsPanel (export, plus erase behind inline confirmation, for PlayerDataRightsService), PrestigeReadinessCard (progress toward the threshold; the button is enabled only when ready, and the caller should confirm, for example with PrestigeConfirmationCard.show, before calling PrestigeService.prestige) and CooldownActionButton (disabled while a PersistentCooldownService cooldown runs). The cooldown gate is UI only: re-check the service inside your tap handler.
Added ConsentPreferencesPanel (ongoing per-category choices with explicit granted/denied/unknown status; the caller applies the change, for example ConsentStateService.grant/deny), SyncStatusCard (idle/syncing/synced/failed state with a retry button for achievement or leaderboard sync; the caller maps its SdkResult to the status) and BatterySaverIndicator (banner while the caller holds performance reduced for low battery; renders nothing when inactive).
Added RemoteKillSwitchPanel (device-local kill behind inline confirmation, plus clear for an existing local override; it never re-enables a remotely killed feature and shows only caller-sanitized text), PlatformCapabilityMatrix (read-only supported/unsupported list shown by icon and text, with a note that values are platform defaults rather than a live check) and DeepLinkResultCard (generic outcome per status; it never renders the link, its parameters or an exception, so the caller maps DeepLinkHandleResult to a status).
Added SessionTimelineInspector (bounded, caller-formatted session-relative history; never accepts raw controller metadata), EconomyCertificateStatusCard (displays verification status and never accepts balances, certificate data or the secret; “valid” means signature checked, not player honesty) and GuardrailStatusPanel (read-only caller-supplied rollout rows, without new read APIs or actions on ShadowActivationController).
Added MemoryWatchdogPanel (bounded caller-fed debug diagnostics; detector only), AnnouncementPreviewCard (shows caller-resolved localized text and invokes a caller preview callback) and RewardedAdResultCard (caller-owned seam state; it never grants a reward, which the caller grants exactly once after showRewardedAd returns true).
Added AnalyticsQueueStatusCard (caller-supplied queue snapshot: counts and generic status only, never event names or payloads) and SaveRestorePreviewPanel (read-only preview of what a restore would change, with restore behind inline confirmation; the caller performs the restore).
Added RemoteConfigHealthCard (source and schema-violation count only; no keys or values), ReminderPreferencesPanel (caller-owned preferences; notification delivery may be delayed or skipped), and ConnectivityStatusCard (reachability/queue count; queued work drains automatically when online).
Added RewardPlanPreviewCard (caller-formatted reward lines with explicit ready/stale/executing/applied/failed status; a preview is not a grant, and the caller sets applied only from a committed record), ReplayVerificationResultCard (outcome and randomness checks reported separately, with a skipped randomness check shown as skipped, never as a match; it is not proof of fair play) and RewardAuditTrailPanel (sanitized, bounded rows and one retry-all action for unfinished rewards; the caller refreshes the rows afterwards because completion of the retry does not mean every record committed).
Added OnboardingFlowQueueCard (read-only queue of caller-mapped onboarding flows with seen/next/pending state and an optional mark-seen action; flow ids identify rows in callbacks and are never shown) and ExperimentVariantAssignmentCard (caller-mapped experiment assignments; the per-device anonymous id never enters the widget, and the override action is debug-only, so pass the callback only in debug or profile builds).
Added accessibility and player-comfort widgets, retention/progression/social HUD widgets and juice/motion widgets (see common_widgets.dart and the showcase screen for the full list).
Verified (see each task spec in doc/task/done/ for the exact run): Linux + Flutter 3.35.1 golden baselines per widget wave, full root and example suites, API compatibility, analyzers, five quality gates and CI. Wave 23 device smoke ran on a Samsung S24 Ultra; Waves 26, 27, 29, 31 and 32 ran on a TECNO KJ7; other waves' device results are recorded in their task specs. Showcase and test callbacks are UI fixtures held in memory: they prove layout and callback wiring, not real certificate verification, rewarded-ad payout, platform screen-reader announcement, memory-leak freedom, 60 FPS or persistence.