ottimo punto sembra funzionare tutto, devo solo aggiungere l'aggiunta di un cliente volante, di un modello volante e gestire i file allegati

This commit is contained in:
2026-04-18 19:03:49 +02:00
parent bbb9729ca4
commit e9f3327f31
16 changed files with 665 additions and 96 deletions

View File

@@ -1,6 +1,7 @@
import 'dart:async'; // Serve per il Timer del debounce
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:equatable/equatable.dart';
import 'package:flux/core/blocs/session/session_bloc.dart';
import 'package:flux/features/customers/data/customer_repository.dart';
import 'package:flux/features/customers/models/customer_model.dart';
import 'package:get_it/get_it.dart';
@@ -9,6 +10,7 @@ part 'customer_state.dart';
class CustomerCubit extends Cubit<CustomerState> {
final CustomerRepository _repository = GetIt.I<CustomerRepository>();
final SessionBloc _sessionBloc = GetIt.I<SessionBloc>();
// Variabile per gestire il debounce della ricerca
Timer? _searchDebounce;
@@ -16,10 +18,12 @@ class CustomerCubit extends Cubit<CustomerState> {
CustomerCubit() : super(const CustomerState());
// --- LETTURA ---
Future<void> loadCustomers(String companyId) async {
Future<void> loadCustomers() async {
emit(state.copyWith(status: CustomerStatus.loading));
try {
final customers = await _repository.getCustomers(companyId);
final customers = await _repository.getCustomers(
_sessionBloc.state.company!.id,
);
emit(
state.copyWith(status: CustomerStatus.success, customers: customers),
);
@@ -92,21 +96,24 @@ class CustomerCubit extends Cubit<CustomerState> {
}
// --- RICERCA CON DEBOUNCE ---
void searchCustomers(String companyId, String query) {
void searchCustomers(String query) {
// 1. Se c'è già una ricerca in attesa (l'utente sta digitando veloce), la annulliamo
if (_searchDebounce?.isActive ?? false) _searchDebounce!.cancel();
// 2. Facciamo partire un timer di 400 millisecondi
_searchDebounce = Timer(const Duration(milliseconds: 400), () async {
_searchDebounce = Timer(const Duration(milliseconds: 300), () async {
// Se cancella tutto e la query è vuota, ricarichiamo la lista base
if (query.trim().isEmpty) {
await loadCustomers(companyId);
await loadCustomers();
return;
}
// Nessun "loading" state qui, per evitare sfarfallii visivi mentre si scrive
try {
final results = await _repository.searchCustomers(companyId, query);
final results = await _repository.searchCustomers(
_sessionBloc.state.company!.id,
query,
);
emit(
state.copyWith(status: CustomerStatus.success, customers: results),
);