Refactor CategoryCubit to manage user-specific categories
This commit is contained in:
@@ -155,7 +155,7 @@ Future<void> initUserSpecificDependencies(String userId) async {
|
||||
await getIt.unregister<CategoryCubit>();
|
||||
}
|
||||
getIt.registerFactory<CategoryCubit>(
|
||||
() => CategoryCubit(getIt()),
|
||||
() => CategoryCubit(getIt(), userId), // Добавляем userId
|
||||
);
|
||||
|
||||
// Теги
|
||||
|
||||
@@ -1,53 +1,60 @@
|
||||
|
||||
import 'package:flutter_bloc/flutter_bloc.dart';
|
||||
import 'package:budget_app/models/category.dart';
|
||||
import 'package:hive_ce/hive.dart';
|
||||
import 'package:budget_app/logic/user/user_cubit.dart'; // Импортируем UserCubit
|
||||
import '../../data/repositories/interfaces/icategory_repository.dart';
|
||||
import '../../models/category.dart';
|
||||
import 'category_state.dart';
|
||||
|
||||
class CategoryCubit extends Cubit<List<Category>> {
|
||||
final UserCubit _userCubit; // Добавляем зависимость от UserCubit
|
||||
final Box<Category> _categoryBox; // Используем Box<Category> для типизации
|
||||
/// Cubit для управления категориями
|
||||
/// Изменения:
|
||||
/// - Добавлено хранение userId в cubit
|
||||
/// - Упрощена работа с состояниями по аналогии с TagCubit
|
||||
class CategoryCubit extends Cubit<CategoryState> {
|
||||
final ICategoryRepository repository;
|
||||
final String userId; // Храним userId в cubit
|
||||
|
||||
CategoryCubit(this._userCubit) // Принимаем UserCubit через конструктор
|
||||
: _categoryBox = Hive.box<Category>('categories'),
|
||||
super([]);
|
||||
CategoryCubit(this.repository, this.userId) : super(CategoryInitial());
|
||||
|
||||
// Загружает категории, фильтруя их по userId текущего пользователя
|
||||
void loadCategories() {
|
||||
// Получаем текущего пользователя из состояния UserCubit
|
||||
final userState = _userCubit.state;
|
||||
if (userState is UserLoaded && userState.user != null) {
|
||||
final currentUserId = userState.user!.id;
|
||||
final userCategories = _categoryBox.values
|
||||
.where((category) => category.userId == currentUserId)
|
||||
.toList();
|
||||
emit(List.from(userCategories));
|
||||
} else {
|
||||
emit([]); // Если пользователя нет, список категорий пуст
|
||||
/// Загружает категории для текущего пользователя
|
||||
Future<void> loadCategories() async {
|
||||
emit(CategoryLoading());
|
||||
try {
|
||||
final categories = await repository.getAllByUser(userId);
|
||||
emit(CategoryLoaded(categories));
|
||||
} catch (e) {
|
||||
emit(CategoryError('Ошибка загрузки категорий: $e'));
|
||||
}
|
||||
}
|
||||
|
||||
// Добавляет новую категорию, присваивая ей userId текущего пользователя
|
||||
void addCategory(Category category) {
|
||||
// Получаем текущего пользователя из состояния UserCubit
|
||||
final userState = _userCubit.state;
|
||||
if (userState is UserLoaded && userState.user != null) {
|
||||
final currentUserId = userState.user!.id;
|
||||
final newCategory = category.copyWith(userId: currentUserId); // Присваиваем userId
|
||||
_categoryBox.put(newCategory.id, newCategory);
|
||||
loadCategories();
|
||||
/// Добавляет новую категорию
|
||||
Future<void> addCategory(Category category) async {
|
||||
try {
|
||||
// Устанавливаем userId для категории из cubit
|
||||
final newCategory = category.copyWith(userId: userId);
|
||||
await repository.add(newCategory);
|
||||
// Перезагружаем список категорий
|
||||
await loadCategories();
|
||||
} catch (e) {
|
||||
emit(CategoryError('Ошибка добавления категории: $e'));
|
||||
}
|
||||
}
|
||||
|
||||
// Обновляет существующую категорию
|
||||
void updateCategory(Category category) {
|
||||
_categoryBox.put(category.id, category);
|
||||
loadCategories();
|
||||
/// Обновляет существующую категорию
|
||||
Future<void> updateCategory(Category category) async {
|
||||
try {
|
||||
await repository.update(category);
|
||||
await loadCategories();
|
||||
} catch (e) {
|
||||
emit(CategoryError('Ошибка обновления категории: $e'));
|
||||
}
|
||||
}
|
||||
|
||||
// Удаляет категорию по ее id
|
||||
void deleteCategory(String id) {
|
||||
_categoryBox.delete(id);
|
||||
loadCategories();
|
||||
/// Удаляет категорию по её id
|
||||
Future<void> deleteCategory(String id) async {
|
||||
try {
|
||||
await repository.delete(id);
|
||||
await loadCategories();
|
||||
} catch (e) {
|
||||
emit(CategoryError('Ошибка удаления категории: $e'));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user