这是基于vue-vben-admin 模板适用于abp Vnext的前端管理项目
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

52 lines
1.2 KiB

import 'dart:async';
import 'package:rxdart/rxdart.dart';
import 'package:rxdart_ext/rxdart_ext.dart';
class SubscriptionService {
final CompositeSubscription _subscription = CompositeSubscription();
bool get isClosed => _subscription.isDisposed;
void addOne<T>(StreamSubscription<T> subscription) {
subscription.addTo(_subscription);
}
StreamSubscription<T> subscribe<T>(
Stream<T> source$,
[void Function(T value)? next,
void Function(dynamic error)? error]
) {
var subscription = source$.listen((value) {
if (next != null) {
next(value);
}
}, onError: (err) {
if (error != null) {
error(err);
}
});
subscription.addTo(_subscription);
return subscription;
}
Future<void> closeAll() async {
await _subscription.cancel();
}
Future<void> closeOne<T>(StreamSubscription<T>? subscription) async {
await removeOne(subscription);
if (subscription != null) {
await subscription.cancel();
}
}
Future<void> removeOne<T>(StreamSubscription<T>? subscription) async {
if (subscription == null) return;
await _subscription.remove(subscription);
}
Future<void> reset() async {
await _subscription.clear();
}
}