mirror of
https://gitlab.com/veilid/veilidchat.git
synced 2024-12-28 00:59:25 -05:00
26 lines
794 B
Dart
26 lines
794 B
Dart
|
import 'dart:async';
|
||
|
|
||
|
import 'package:bloc/bloc.dart';
|
||
|
import 'package:veilid_support/veilid_support.dart';
|
||
|
|
||
|
abstract class StreamWrapperCubit<State> extends Cubit<AsyncValue<State>> {
|
||
|
StreamWrapperCubit(Stream<State> stream, {State? defaultState})
|
||
|
: super(defaultState != null
|
||
|
? AsyncValue.data(defaultState)
|
||
|
: const AsyncValue.loading()) {
|
||
|
_subscription = stream.listen((event) => emit(AsyncValue.data(event)),
|
||
|
// ignore: avoid_types_on_closure_parameters
|
||
|
onError: (Object error, StackTrace stackTrace) {
|
||
|
emit(AsyncValue.error(error, stackTrace));
|
||
|
});
|
||
|
|
||
|
@override
|
||
|
Future<void> close() async {
|
||
|
await _subscription.cancel();
|
||
|
await super.close();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
late final StreamSubscription<State> _subscription;
|
||
|
}
|