rework-onboarding (#7)

Onboarding completato, ora super rapido e top

Reviewed-on: http://catelliub.zapto.org:3000/brontomark/flux/pulls/7
Co-authored-by: Mark M2 Macbook <marco@catelli.it>
Co-committed-by: Mark M2 Macbook <marco@catelli.it>
This commit is contained in:
2026-04-22 11:06:02 +02:00
committed by brontomark
parent c5b5b76bd6
commit 90bd5ecacf
47 changed files with 1742 additions and 516 deletions

View File

@@ -1,7 +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/core/blocs/session/session_cubit.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';
@@ -10,7 +10,7 @@ part 'customer_state.dart';
class CustomerCubit extends Cubit<CustomerState> {
final CustomerRepository _repository = GetIt.I<CustomerRepository>();
final SessionBloc _sessionBloc = GetIt.I<SessionBloc>();
final SessionCubit _sessionCubit = GetIt.I<SessionCubit>();
// Variabile per gestire il debounce della ricerca
Timer? _searchDebounce;
@@ -22,7 +22,7 @@ class CustomerCubit extends Cubit<CustomerState> {
emit(state.copyWith(status: CustomerStatus.loading));
try {
final customers = await _repository.getCustomers(
_sessionBloc.state.company!.id,
_sessionCubit.state.company!.id!,
);
emit(
state.copyWith(status: CustomerStatus.success, customers: customers),
@@ -111,7 +111,7 @@ class CustomerCubit extends Cubit<CustomerState> {
// Nessun "loading" state qui, per evitare sfarfallii visivi mentre si scrive
try {
final results = await _repository.searchCustomers(
_sessionBloc.state.company!.id,
_sessionCubit.state.company!.id!,
query,
);
emit(
@@ -137,7 +137,7 @@ class CustomerCubit extends Cubit<CustomerState> {
nome: name,
telefono: phone ?? '',
email: email ?? '',
companyId: _sessionBloc.state.company!.id,
companyId: _sessionCubit.state.company!.id!,
note: '',
);

View File

@@ -1,5 +1,5 @@
import 'package:file_picker/file_picker.dart';
import 'package:flux/core/blocs/session/session_bloc.dart';
import 'package:flux/core/blocs/session/session_cubit.dart';
import 'package:flux/core/utils/string_extensions.dart';
import 'package:flux/features/customers/models/customer_file_model.dart';
import 'package:get_it/get_it.dart';
@@ -8,7 +8,7 @@ import '../models/customer_model.dart';
class CustomerRepository {
final SupabaseClient _supabase = GetIt.I<SupabaseClient>();
final String companyId = GetIt.I.get<SessionBloc>().state.company!.id;
final String companyId = GetIt.I.get<SessionCubit>().state.company!.id!;
// Crea un nuovo cliente
Future<CustomerModel> saveCustomer(CustomerModel customer) async {

View File

@@ -1,6 +1,6 @@
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:flux/core/blocs/session/session_bloc.dart';
import 'package:flux/core/blocs/session/session_cubit.dart';
import 'package:flux/core/theme/theme.dart';
import 'package:flux/features/customers/blocs/customer_cubit.dart';
import 'package:flux/features/customers/models/customer_model.dart';
@@ -24,14 +24,14 @@ class _CustomersContentState extends State<CustomersContent> {
}
void _loadInitialCustomers() {
final companyId = context.read<SessionBloc>().state.company?.id;
final companyId = context.read<SessionCubit>().state.company?.id;
if (companyId != null) {
context.read<CustomerCubit>().loadCustomers();
}
}
void _onSearch(String query) {
final companyId = context.read<SessionBloc>().state.company?.id;
final companyId = context.read<SessionCubit>().state.company?.id;
if (companyId != null) {
context.read<CustomerCubit>().searchCustomers(query);
}
@@ -48,7 +48,7 @@ class _CustomersContentState extends State<CustomersContent> {
child: CustomerForm(
customer: customer,
onSave: (customerFromForm) {
final session = context.read<SessionBloc>().state;
final session = context.read<SessionCubit>().state;
final companyId = session.company?.id;
if (companyId == null) return;