这是基于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.
 
 
 
 
 
 

68 lines
2.6 KiB

import 'package:core/dependency/index.dart';
import 'package:core/abstracts/signalr.service.dart';
import 'package:core/services/environment.service.dart';
import 'package:dev_app/handlers/index.dart';
import 'package:get/get.dart';
import 'package:core/services/session.service.dart';
import 'package:core/services/subscription.service.dart';
import 'package:core/utils/index.dart';
import 'package:notifications/models/index.dart';
import 'package:notifications/services/notification.state.service.dart';
import 'package:notifications/tokens/index.dart';
class MainController extends GetxController {
final RxInt _pageIndex = RxInt(0);
int get currentIndex => _pageIndex.value;
SessionService get _sessionService => injector.get();
SubscriptionService get _subscriptionService => injector.get(tag: NotificationTokens.consumer);
SignalrService get _signalrService => injector.get(tag: NotificationTokens.producer);
NotificationStateService get _notificationStateService => injector.get();
EnvironmentService get _environmentService => injector.get();
ErrorHandler get _errorHandler => injector.get();
@override
void onInit() async {
super.onInit();
_subscriptionService.addOne(_errorHandler.listenToRestError());
_subscriptionService.addOne(_signalrService.onClose(logger.debug));
_subscriptionService.addOne(_signalrService.onReconnected(logger.debug));
_subscriptionService.addOne(_signalrService.onReconnecting(logger.debug));
// 在SignalR Hub之上再次订阅,用于全局通知启用按钮来管理
_subscriptionService.subscribe(
// 订阅SignalR Hub
_signalrService.subscribe(NotificationTokens.receiver),
next: (message) async {
for (var data in message.data) {
if (data == null) continue;
// 解析通知数据
var notification = NotificationInfo.fromJson(data as dynamic);
_notificationStateService.addNotification(notification);
}
},
);
_sessionService.getToken$()
.listen((token) async {
if (token == null) {
await _signalrService.stop();
} else {
await _signalrService.start();
}
});
if (_sessionService.currentLanguage.isNullOrWhiteSpace()) {
var environment = _environmentService.getEnvironment();
_sessionService.setLanguage(environment.localization.defaultLanguage ?? 'en');
}
}
@override
void onClose() {
_subscriptionService.closeAll()
.whenComplete(() => _signalrService.stop());
super.onClose();
}
void setCurrentIndex(int index) {
_pageIndex.value = index;
}
}