Files
flux/lib/features/tasks/blocs/task_list_cubit.dart

74 lines
1.9 KiB
Dart
Raw Permalink Normal View History

2026-05-26 12:28:12 +02:00
import 'dart:async';
import 'package:equatable/equatable.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:flux/features/tasks/data/task_repository.dart';
import 'package:flux/features/tasks/models/task_model.dart';
import 'package:get_it/get_it.dart';
part 'task_list_state.dart';
class TaskListCubit extends Cubit<TaskListState> {
2026-05-29 19:24:40 +02:00
final TasksRepository _repository = GetIt.I.get<TasksRepository>();
2026-05-28 13:55:28 +02:00
final String currentCompanyId;
final String? currentStoreId;
2026-05-26 12:28:12 +02:00
2026-05-28 13:55:28 +02:00
// Il nostro abbonamento allo stream del repository
StreamSubscription<void>? _taskSubscription;
2026-05-26 12:28:12 +02:00
2026-05-28 13:55:28 +02:00
TaskListCubit({required this.currentCompanyId, this.currentStoreId})
: super(const TaskListState()) {
_initRealtime();
}
2026-05-26 12:28:12 +02:00
2026-05-28 13:55:28 +02:00
void _initRealtime() {
emit(state.copyWith(status: TaskListStatus.loading));
2026-05-26 12:28:12 +02:00
2026-05-28 13:55:28 +02:00
// Primo caricamento
_loadTasksSilently();
2026-05-26 12:28:12 +02:00
2026-05-28 13:55:28 +02:00
// Ci mettiamo in ascolto del campanello del Repository
_taskSubscription = _repository.watchCompanyTasks(currentCompanyId).listen((
_,
) {
// Quando il campanello suona (qualcosa è cambiato a DB), ricarichiamo!
_loadTasksSilently();
});
}
2026-05-26 12:28:12 +02:00
2026-05-28 13:55:28 +02:00
Future<void> loadTasks() async {
emit(state.copyWith(status: TaskListStatus.loading));
await _loadTasksSilently();
2026-05-26 12:28:12 +02:00
}
2026-05-28 13:55:28 +02:00
Future<void> _loadTasksSilently() async {
2026-05-26 12:28:12 +02:00
try {
final tasks = await _repository.getTasks(
2026-05-28 13:55:28 +02:00
companyId: currentCompanyId,
storeId: currentStoreId,
2026-05-26 12:28:12 +02:00
);
emit(
state.copyWith(
status: TaskListStatus.success,
tasks: tasks,
errorMessage: null,
),
);
} catch (e) {
emit(
state.copyWith(
status: TaskListStatus.failure,
errorMessage: e.toString(),
),
);
}
}
@override
Future<void> close() {
2026-05-28 13:55:28 +02:00
// Stacchiamo l'abbonamento. Il controller.onCancel nel Repo farà il resto!
_taskSubscription?.cancel();
2026-05-26 12:28:12 +02:00
return super.close();
}
}