j
This commit is contained in:
@@ -1,33 +0,0 @@
|
||||
import 'package:flutter_bloc/flutter_bloc.dart';
|
||||
import 'package:equatable/equatable.dart';
|
||||
import 'package:flux/features/company/data/company_repository.dart';
|
||||
import 'package:flux/features/company/models/company_model.dart';
|
||||
import 'package:get_it/get_it.dart';
|
||||
|
||||
part 'company_events.dart';
|
||||
part 'company_state.dart';
|
||||
|
||||
class CompanyBloc extends Bloc<CompanyEvent, CompanyState> {
|
||||
final CompanyRepository _repository = GetIt.I<CompanyRepository>();
|
||||
CompanyBloc() : super(const CompanyState(status: CompanyStatus.initial)) {
|
||||
on<CreateCompanyRequested>((event, emit) async {
|
||||
emit(const CompanyState(status: CompanyStatus.loading));
|
||||
try {
|
||||
final createdCompany = await _repository.createCompany(event.company);
|
||||
emit(
|
||||
state.copyWith(
|
||||
status: CompanyStatus.success,
|
||||
company: createdCompany,
|
||||
),
|
||||
);
|
||||
} catch (e) {
|
||||
emit(
|
||||
state.copyWith(
|
||||
status: CompanyStatus.failure,
|
||||
errorMessage: e.toString(),
|
||||
),
|
||||
);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
@@ -1,19 +0,0 @@
|
||||
part of 'company_bloc.dart';
|
||||
|
||||
// lib/blocs/company/company_event.dart
|
||||
|
||||
abstract class CompanyEvent extends Equatable {
|
||||
const CompanyEvent();
|
||||
|
||||
@override
|
||||
List<Object?> get props => [];
|
||||
}
|
||||
|
||||
class CreateCompanyRequested extends CompanyEvent {
|
||||
final CompanyModel company;
|
||||
|
||||
const CreateCompanyRequested({required this.company});
|
||||
|
||||
@override
|
||||
List<Object?> get props => [company];
|
||||
}
|
||||
117
lib/features/company/bloc/company_settings_cubit.dart
Normal file
117
lib/features/company/bloc/company_settings_cubit.dart
Normal file
@@ -0,0 +1,117 @@
|
||||
import 'dart:io';
|
||||
import 'package:equatable/equatable.dart';
|
||||
import 'package:flutter/foundation.dart'; // Per kIsWeb
|
||||
import 'package:flutter_bloc/flutter_bloc.dart';
|
||||
import 'package:flux/core/blocs/session/session_cubit.dart';
|
||||
import 'package:flux/features/company/data/company_repository.dart';
|
||||
import 'package:flux/features/company/models/company_model.dart';
|
||||
import 'package:get_it/get_it.dart';
|
||||
import 'package:image_picker/image_picker.dart';
|
||||
|
||||
part 'company_settings_state.dart';
|
||||
|
||||
class CompanySettingsCubit extends Cubit<CompanySettingsState> {
|
||||
final CompanyRepository _repository = GetIt.I<CompanyRepository>();
|
||||
final SessionCubit _sessionCubit = GetIt.I<SessionCubit>();
|
||||
|
||||
CompanySettingsCubit() : super(const CompanySettingsState());
|
||||
|
||||
void initSettings() {
|
||||
final currentCompany = _sessionCubit.state.company;
|
||||
if (currentCompany != null) {
|
||||
emit(
|
||||
state.copyWith(
|
||||
company: currentCompany,
|
||||
status: CompanySettingsStatus.ready,
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
void updateFields({
|
||||
String? name,
|
||||
String? vatId,
|
||||
String? address,
|
||||
String? city,
|
||||
String? zipCode,
|
||||
String? phone,
|
||||
String? email,
|
||||
}) {
|
||||
if (state.company == null) return;
|
||||
|
||||
final updated = state.company!.copyWith(
|
||||
name: name ?? state.company!.name,
|
||||
vatId: vatId ?? state.company!.vatId,
|
||||
address: address ?? state.company!.address,
|
||||
city: city ?? state.company!.city,
|
||||
zipCode: zipCode ?? state.company!.zipCode,
|
||||
phone: phone ?? state.company!.phone,
|
||||
email: email ?? state.company!.email,
|
||||
);
|
||||
emit(state.copyWith(company: updated));
|
||||
}
|
||||
|
||||
Future<void> saveSettings() async {
|
||||
if (state.company == null) return;
|
||||
emit(
|
||||
state.copyWith(status: CompanySettingsStatus.saving, errorMessage: null),
|
||||
);
|
||||
|
||||
try {
|
||||
// 1. Salva i dati su Supabase
|
||||
final updatedCompany = await _repository.updateCompany(state.company!);
|
||||
|
||||
// 2. Aggiorna la sessione globale per riflettere i cambiamenti in tutta l'app
|
||||
_sessionCubit.updateCurrentCompany(updatedCompany);
|
||||
|
||||
emit(
|
||||
state.copyWith(
|
||||
status: CompanySettingsStatus.success,
|
||||
company: updatedCompany,
|
||||
),
|
||||
);
|
||||
} catch (e) {
|
||||
emit(
|
||||
state.copyWith(
|
||||
status: CompanySettingsStatus.failure,
|
||||
errorMessage: e.toString(),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
// Metodo per gestire l'upload del logo
|
||||
Future<void> uploadLogo(Uint8List bytes, String fileName) async {
|
||||
if (state.company == null) return;
|
||||
emit(state.copyWith(status: CompanySettingsStatus.uploadingLogo));
|
||||
|
||||
try {
|
||||
// Usa il tuo repository per caricare il file nel bucket 'company_logos'
|
||||
// Il file può essere Uint8List (se sei su Web) o File (se sei su Mobile/Desktop)
|
||||
final publicUrl = await _repository.uploadCompanyLogo(
|
||||
companyId: state.company!.id!,
|
||||
fileBytes: bytes,
|
||||
fileName: fileName,
|
||||
);
|
||||
|
||||
final updatedCompany = state.company!.copyWith(logoUrl: publicUrl);
|
||||
|
||||
emit(
|
||||
state.copyWith(
|
||||
company: updatedCompany,
|
||||
status: CompanySettingsStatus.ready,
|
||||
),
|
||||
);
|
||||
|
||||
// Chiamiamo il salvataggio per rendere definitivo l'URL nel record della compagnia
|
||||
await saveSettings();
|
||||
} catch (e) {
|
||||
emit(
|
||||
state.copyWith(
|
||||
status: CompanySettingsStatus.failure,
|
||||
errorMessage: "Errore caricamento logo: $e",
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
34
lib/features/company/bloc/company_settings_state.dart
Normal file
34
lib/features/company/bloc/company_settings_state.dart
Normal file
@@ -0,0 +1,34 @@
|
||||
part of 'company_settings_cubit.dart';
|
||||
|
||||
class CompanySettingsState {
|
||||
final CompanySettingsStatus status;
|
||||
final CompanyModel? company;
|
||||
final String? errorMessage;
|
||||
|
||||
const CompanySettingsState({
|
||||
this.status = CompanySettingsStatus.initial,
|
||||
this.company,
|
||||
this.errorMessage,
|
||||
});
|
||||
|
||||
CompanySettingsState copyWith({
|
||||
CompanySettingsStatus? status,
|
||||
CompanyModel? company,
|
||||
String? errorMessage,
|
||||
}) {
|
||||
return CompanySettingsState(
|
||||
status: status ?? this.status,
|
||||
company: company ?? this.company,
|
||||
errorMessage: errorMessage,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
enum CompanySettingsStatus {
|
||||
initial,
|
||||
ready,
|
||||
saving,
|
||||
uploadingLogo,
|
||||
success,
|
||||
failure,
|
||||
}
|
||||
@@ -1,26 +0,0 @@
|
||||
part of 'company_bloc.dart';
|
||||
|
||||
enum CompanyStatus { initial, loading, success, failure }
|
||||
|
||||
class CompanyState extends Equatable {
|
||||
final CompanyStatus status;
|
||||
final String? errorMessage;
|
||||
final CompanyModel? company;
|
||||
|
||||
const CompanyState({required this.status, this.errorMessage, this.company});
|
||||
|
||||
CompanyState copyWith({
|
||||
CompanyStatus? status,
|
||||
String? errorMessage,
|
||||
CompanyModel? company,
|
||||
}) {
|
||||
return CompanyState(
|
||||
status: status ?? this.status,
|
||||
errorMessage: errorMessage ?? this.errorMessage,
|
||||
company: company ?? this.company,
|
||||
);
|
||||
}
|
||||
|
||||
@override
|
||||
List<Object?> get props => [status, errorMessage, company];
|
||||
}
|
||||
Reference in New Issue
Block a user