import 'dart:async'; import 'package:rxdart/rxdart.dart'; class PackHolder { final StreamController _streamController = StreamController.broadcast(); PackState _state; PackHolder() : _state = PackState.empty; void setPacksWithCards( Iterable packs, ) { _state = PackState(packs.toSet()); _streamController.add(_state); } void removePackWithCards(String id) => setPacksWithCards(state.packsWithCards.toList()..remove(id)); void clear() { _state = PackState.empty; _streamController.add(_state); } PackState get state => _state; Stream get asStream => _streamController.stream.startWith(_state); } class PackState { final Set packsWithCards; static const empty = PackState({}); const PackState( this.packsWithCards, ); }