carp-dk / carp-dk/carp_study_app

fix(leak): SerializableViewModel.init() stacks AppLifecycleListeners and persistence timers

Open
#616 0 comments 0 reactions 1 assignee Claimed by @Zeroupper View on GitHub
Dominant language
Dart
Stars
10
Forks
5
Avg merge
1d 3h
Merged PRs (30d)
14

Description

## Problem
(verified) Every `init()` creates a new `AppLifecycleListener(onHide: ...)` that is never stored or disposed (`lib/view_models/view_model.dart:87-89`), and assigns a new `Timer.periodic` without cancelling an existing one (`view_model.dart:79-82`) — re-initialization (new study in the same session) accumulates both, causing repeated `save()` storms on hide.

## Proposed fix
Store the `AppLifecycleListener` and dispose it in `dispose()`/`clear()`; cancel any existing `_persistenceTimer` before creating a new one in `init()`.

## Acceptance criteria
- [ ] Double-`init()` leaves exactly one timer and one lifecycle listener
- [ ] `dispose()` releases both (unit test)

**Effort:** S · **Priority:** P1 · **Change risk:** Low

Contributor guide

No contributing guide indexed for this repository

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.