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

48 lines
1.4 KiB

import 'package:core/services/environment.service.dart';
import 'package:core/services/service.base.dart';
import 'package:core/services/session.service.dart';
import 'package:core/utils/index.dart';
import 'package:platforms/modes/state.dart';
import 'package:platforms/modes/menu.dto.dart';
import 'package:platforms/proxy/index.dart';
class MenuStateService extends ServiceBase {
MenuStateService(super.injector);
final InternalStore<MenuState> _state = InternalStore<MenuState>(state: MenuState());
EnvironmentService get _environmentService => resolve<EnvironmentService>();
SessionService get _sessionService => resolve<SessionService>();
MenuService get _menuService => resolve<MenuService>();
@override
void onInit() {
super.onInit();
_initState();
}
void _initState() {
_sessionService.getToken$()
.listen((token) {
_state.patch((state) => state.menus = []);
if (token != null) {
refreshState();
}
});
}
Future<void> refreshState() async {
var environment = _environmentService.getEnvironment();
var framework = environment.application.framework ?? 'flutter';
var result = await _menuService.getCurrentUserMenuList(framework);
_state.patch((state) => state.menus = result.items);
}
List<MenuDto> getMyMenus() {
return _state.state.menus;
}
Stream<List<MenuDto>> getMyMenus$() {
return _state.sliceState((state) => state.menus);
}
}