carp-dk / carp-dk/carp_study_app

fix(leak): card view-models never store/cancel stream subscriptions; heart-rate StreamGroup never closed

Open
#615 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) `heartRateStream?.listen(...)` (`lib/view_models/cards/heart_rate_data_model.dart:42`) with a broadcast `StreamGroup` that is never closed (`heart_rate_data_model.dart:17`); `pedometerEvents?.listen` (`steps_data_model.dart:46`); `activityEvents?.listen` (`activity_data_model.dart:45`); `mobilityEvents?.listen` (`mobility_data_model.dart:41`). None store the subscription; none override `dispose()`. A second `init()` (leave study → join new study in one session) double-subscribes and double-counts.

## Proposed fix
Add a `List` helper on the base `ViewModel` (`lib/view_models/view_model.dart:7-29`) with cancellation wired into `clear()`/`dispose()`; convert all card view-models to register subscriptions there; close the heart-rate `StreamGroup`.

## Acceptance criteria
- [ ] `init(); clear(); init();` yields exactly one active subscription per stream (unit test)
- [ ] No `.listen(` in a card view-model outside `init()`

**Effort:** M · **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.