49 lines
1,012 B
Dart
49 lines
1,012 B
Dart
import 'dart:async';
|
|
|
|
import 'package:mnemo_cards_common/mnemo_cards_common.dart';
|
|
import 'package:rxdart/rxdart.dart';
|
|
|
|
class LoadingPacksHolder {
|
|
final StreamController<LoadingPacksState?> _streamController =
|
|
StreamController.broadcast();
|
|
LoadingPacksState? _state;
|
|
|
|
LoadingPacksHolder();
|
|
|
|
void addLoadingPack(
|
|
CardPackLoadingDto dto,
|
|
) {
|
|
_state = LoadingPacksState({
|
|
...?_state?.packs.where((p) => p.id != dto.id),
|
|
dto,
|
|
});
|
|
_streamController.add(_state);
|
|
}
|
|
|
|
void removeLoadingPack(
|
|
String id,
|
|
) {
|
|
_state = LoadingPacksState(
|
|
{...?_state?.packs.where((p) => p.id != id)},
|
|
);
|
|
_streamController.add(_state);
|
|
}
|
|
|
|
void clear() {
|
|
_state = null;
|
|
_streamController.add(_state);
|
|
}
|
|
|
|
LoadingPacksState? get state => _state;
|
|
|
|
Stream<LoadingPacksState?> get asStream =>
|
|
_streamController.stream.startWith(_state);
|
|
}
|
|
|
|
class LoadingPacksState {
|
|
final Set<CardPackLoadingDto> packs;
|
|
|
|
LoadingPacksState(
|
|
this.packs,
|
|
);
|
|
}
|