refactor dashboard note list

This commit is contained in:
2026-05-30 16:45:12 +02:00
parent 6394e5a2cd
commit b69308e1ef
6 changed files with 125 additions and 12 deletions

View File

@@ -0,0 +1,73 @@
import 'dart:async';
import 'package:equatable/equatable.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:flux/features/notes/data/notes_repository.dart';
import 'package:flux/features/notes/models/note_model.dart';
import 'package:get_it/get_it.dart';
part 'dashboard_note_list_state.dart';
class DashboardNoteListCubit extends Cubit<DashboardNoteListState> {
final NotesRepository _repository = GetIt.I.get<NotesRepository>();
final String? companyId;
final String? staffId;
StreamSubscription<void>? _subscription;
DashboardNoteListCubit({required this.companyId, required this.staffId})
: super(DashboardNoteListState(status: DashboardNoteListStatus.initial));
void stopListening() {
_subscription?.cancel();
_subscription = null;
}
void startListening() {
stopListening();
emit(state.copyWith(status: DashboardNoteListStatus.loading));
// Primo caricamento
_loadNotesSilently();
// Inizio ascolto campanello
try {
_subscription = _repository
.notesStream(companyId: companyId!, currentStaffId: staffId!)
.listen((_) {
// Quando il campanello suona (qualcosa è cambiato a DB), ricarichiamo!
_loadNotesSilently();
});
} on Exception catch (e) {
debugPrint(e.toString());
}
}
Future<void> _loadNotesSilently() async {
try {
final notes = await _repository.getNotes();
emit(
state.copyWith(
status: DashboardNoteListStatus.success,
notes: notes,
errorMessage: null,
),
);
} catch (e) {
emit(
state.copyWith(
status: DashboardNoteListStatus.failure,
errorMessage: e.toString(),
),
);
}
}
@override
Future<void> close() {
stopListening();
return super.close();
}
}

View File

@@ -0,0 +1,30 @@
part of 'dashboard_note_list_cubit.dart';
enum DashboardNoteListStatus { initial, loading, success, failure }
class DashboardNoteListState extends Equatable {
final DashboardNoteListStatus status;
final List<NoteModel> notes;
final String? errorMessage;
const DashboardNoteListState({
this.status = DashboardNoteListStatus.initial,
this.notes = const [],
this.errorMessage,
});
DashboardNoteListState copyWith({
DashboardNoteListStatus? status,
List<NoteModel>? notes,
String? errorMessage,
}) {
return DashboardNoteListState(
status: status ?? this.status,
notes: notes ?? this.notes,
errorMessage: errorMessage ?? this.errorMessage,
);
}
@override
List<Object?> get props => [status, notes, errorMessage];
}