import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:maibu_satabot_v2/features/v2/my/domain/entities/my_entities.dart'; import 'package:maibu_satabot_v2/features/v2/my/domain/usecases/clear_cache_usecase.dart'; import 'package:maibu_satabot_v2/features/v2/my/domain/usecases/get_menu_items_usecase.dart'; import 'package:maibu_satabot_v2/features/v2/my/domain/usecases/toggle_night_mode_usecase.dart'; import 'package:maibu_satabot_v2/features/v2/my/presentation/states/my_state.dart'; /// 我的页面 Cubit class MyCubit extends Cubit { MyCubit({ required GetMenuItemsUseCase getMenuItemsUseCase, required ToggleNightModeUseCase toggleNightModeUseCase, required ClearCacheUseCase clearCacheUseCase, }) : _getMenuItemsUseCase = getMenuItemsUseCase, _toggleNightModeUseCase = toggleNightModeUseCase, _clearCacheUseCase = clearCacheUseCase, super(MyInitial()); final GetMenuItemsUseCase _getMenuItemsUseCase; final ToggleNightModeUseCase _toggleNightModeUseCase; final ClearCacheUseCase _clearCacheUseCase; /// 加载数据 Future loadData() async { emit(MyLoading()); try { final menuResult = await _getMenuItemsUseCase(); final menuItems = menuResult.fold( (failure) => [], (items) => items, ); if (menuItems.isEmpty) { emit(const MyError('加载菜单失败')); return; } // 模拟用户信息(实际应从 Auth 模块获取) final userProfile = UserProfileEntity( name: '张工程师', role: '运维工程师', avatar: '', userId: 'ENG2024001', ); emit(MyLoaded( userProfile: userProfile, menuItems: menuItems, )); } catch (e) { emit(MyError('加载数据失败: $e')); } } /// 切换夜间模式 Future toggleNightMode(bool enabled) async { final currentState = state; if (currentState is MyLoaded) { // 乐观更新 UI emit(currentState.copyWith(isNightMode: enabled)); final result = await _toggleNightModeUseCase(enabled); result.fold( (failure) { // 如果失败,回滚状态 emit(currentState.copyWith(isNightMode: !enabled)); emit(MyError('切换夜间模式失败')); }, (_) { // 成功,保持当前状态 }, ); } } /// 清除缓存 Future clearCache() async { final currentState = state; if (currentState is! MyLoaded) return; emit(MyLoading()); final result = await _clearCacheUseCase(); result.fold( (failure) { emit(MyError('清除缓存失败: ${failure.message}')); }, (success) { emit(currentState.copyWith(cacheSize: '0 MB')); }, ); } /// 刷新数据 Future refresh() async { await loadData(); } }