import 'dart:async'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:hub/features/backend/index.dart'; import 'package:hub/features/menu/index.dart'; import 'package:hub/features/module/index.dart'; import 'package:hub/features/local/index.dart'; class MenuEvent {} class MenuState { final List menuEntries; final bool isGrid; MenuState({this.menuEntries = const [], this.isGrid = false}); MenuState copyWith({List? menuEntries, bool? isGrid}) { return MenuState( menuEntries: menuEntries ?? this.menuEntries, isGrid: isGrid ?? this.isGrid, ); } } class MenuBloc extends Bloc { final MenuView style; final EnumMenuItem item; final List entries; late StreamSubscription _completer; MenuBloc({required this.style, required this.item, required this.entries}) : super(MenuState()) { on(_onMenuEvent); _completer = LocalsRepositoryImpl.license.stream.listen((v) { add(MenuEvent()); }); } Future _onMenuEvent(MenuEvent event, Emitter emit) async { await LicenseRemoteDataSourceImpl(PhpGroup()).waitForSaveCompletion(); final List newEntries = await MenuRepositoryImpl().generateMenuEntries(entries, item); emit(state.copyWith(menuEntries: newEntries)); } @override Future close() { _completer.cancel(); return super.close(); } }