rifatta operation form e diverse migliorie generali
This commit is contained in:
@@ -1,20 +1,22 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_bloc/flutter_bloc.dart';
|
||||
import 'package:flux/core/widgets/flux_text_field.dart';
|
||||
import 'package:flux/core/widgets/shared_forms/attachments_section.dart';
|
||||
import 'package:flux/features/attachments/blocs/attachments_bloc.dart';
|
||||
import 'package:flux/features/customers/blocs/customer_form_cubit.dart';
|
||||
import 'package:flux/features/customers/models/customer_model.dart'; // Uso il tuo widget!
|
||||
|
||||
class CustomerForm extends StatefulWidget {
|
||||
class CustomerFormScreen extends StatefulWidget {
|
||||
final CustomerModel? customer;
|
||||
final String? customerId;
|
||||
|
||||
const CustomerForm({super.key, this.customer, this.customerId});
|
||||
const CustomerFormScreen({super.key, this.customer, this.customerId});
|
||||
|
||||
@override
|
||||
State<CustomerForm> createState() => _CustomerFormState();
|
||||
State<CustomerFormScreen> createState() => _CustomerFormScreenState();
|
||||
}
|
||||
|
||||
class _CustomerFormState extends State<CustomerForm> {
|
||||
class _CustomerFormScreenState extends State<CustomerFormScreen> {
|
||||
final _formKey = GlobalKey<FormState>();
|
||||
|
||||
// Controller inizializzati con i dati del cliente (se presenti)
|
||||
@@ -27,10 +29,18 @@ class _CustomerFormState extends State<CustomerForm> {
|
||||
@override
|
||||
void initState() {
|
||||
super.initState();
|
||||
|
||||
// 1. Lanciamo l'inizializzazione (che se è sincrona, finirà istantaneamente)
|
||||
context.read<CustomerFormCubit>().initForm(
|
||||
customerId: widget.customerId,
|
||||
existingCustomer: widget.customer,
|
||||
);
|
||||
|
||||
// 2. Leggiamo lo stato SUBITO DOPO. Se è già ready, non aspettiamo il listener!
|
||||
final currentState = context.read<CustomerFormCubit>().state;
|
||||
if (currentState.status == CustomerFormStatus.ready && !_isInitialized) {
|
||||
_syncTextControllers(currentState.customer);
|
||||
}
|
||||
}
|
||||
|
||||
@override
|
||||
@@ -144,6 +154,17 @@ class _CustomerFormState extends State<CustomerForm> {
|
||||
.read<CustomerFormCubit>()
|
||||
.updateDoNotDisturb(v),
|
||||
),
|
||||
const Divider(height: 32),
|
||||
BlocProvider<AttachmentsBloc>(
|
||||
create: (context) => AttachmentsBloc(
|
||||
parentType: AttachmentParentType.customer,
|
||||
parentId: state.customer.id,
|
||||
),
|
||||
child: SharedAttachmentsSection(
|
||||
parentType: AttachmentParentType.customer,
|
||||
parentId: state.customer.id,
|
||||
),
|
||||
),
|
||||
const SizedBox(height: 24),
|
||||
SizedBox(
|
||||
width: double.infinity,
|
||||
@@ -3,9 +3,8 @@ import 'package:flutter_bloc/flutter_bloc.dart';
|
||||
import 'package:flux/core/blocs/session/session_cubit.dart';
|
||||
import 'package:flux/core/routes/routes.dart';
|
||||
import 'package:flux/core/theme/theme.dart';
|
||||
import 'package:flux/features/customers/blocs/customers_cubit.dart';
|
||||
import 'package:flux/features/customers/blocs/customers_list_cubit.dart';
|
||||
import 'package:flux/features/customers/models/customer_model.dart';
|
||||
import 'package:flux/features/customers/ui/customer_form.dart';
|
||||
import 'package:go_router/go_router.dart';
|
||||
|
||||
class CustomersListScreen extends StatefulWidget {
|
||||
@@ -27,14 +26,14 @@ class _CustomersListScreenState extends State<CustomersListScreen> {
|
||||
void _loadInitialCustomers() {
|
||||
final companyId = context.read<SessionCubit>().state.company?.id;
|
||||
if (companyId != null) {
|
||||
context.read<CustomersCubit>().loadCustomers();
|
||||
context.read<CustomersListCubit>().loadCustomers();
|
||||
}
|
||||
}
|
||||
|
||||
void _onSearch(String query) {
|
||||
final companyId = context.read<SessionCubit>().state.company?.id;
|
||||
if (companyId != null) {
|
||||
context.read<CustomersCubit>().searchCustomers(query);
|
||||
context.read<CustomersListCubit>().searchCustomers(query);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -53,7 +52,12 @@ class _CustomersListScreenState extends State<CustomersListScreen> {
|
||||
Padding(
|
||||
padding: const EdgeInsets.only(right: 16),
|
||||
child: ElevatedButton.icon(
|
||||
onPressed: () => openCustomerForm(context: context),
|
||||
onPressed: () {
|
||||
context.pushNamed(
|
||||
Routes.customerForm,
|
||||
pathParameters: {'id': 'new'},
|
||||
);
|
||||
},
|
||||
icon: const Icon(Icons.person_add_alt_1_rounded, size: 20),
|
||||
label: const Text('NUOVO'),
|
||||
style: ElevatedButton.styleFrom(
|
||||
@@ -87,9 +91,9 @@ class _CustomersListScreenState extends State<CustomersListScreen> {
|
||||
|
||||
// LISTA CLIENTI
|
||||
Expanded(
|
||||
child: BlocBuilder<CustomersCubit, CustomersState>(
|
||||
child: BlocBuilder<CustomersListCubit, CustomersListState>(
|
||||
builder: (context, state) {
|
||||
if (state.status == CustomersStatus.loading &&
|
||||
if (state.status == CustomersListStatus.loading &&
|
||||
state.customers.isEmpty) {
|
||||
return const Center(child: CircularProgressIndicator());
|
||||
}
|
||||
@@ -214,8 +218,16 @@ class _CustomerTile extends StatelessWidget {
|
||||
),
|
||||
),
|
||||
trailing: IconButton(
|
||||
onPressed: () =>
|
||||
openCustomerForm(context: context, customer: customer),
|
||||
onPressed: () async {
|
||||
final CustomersListCubit customersCubit = context
|
||||
.read<CustomersListCubit>();
|
||||
await context.pushNamed(
|
||||
Routes.customerForm,
|
||||
pathParameters: {'id': customer.id!},
|
||||
extra: customer,
|
||||
);
|
||||
customersCubit.loadCustomers();
|
||||
},
|
||||
icon: Icon(Icons.edit_note_rounded, color: context.accent),
|
||||
),
|
||||
),
|
||||
@@ -224,7 +236,7 @@ class _CustomerTile extends StatelessWidget {
|
||||
}
|
||||
|
||||
/// Funzione unica per gestire Creazione e Modifica
|
||||
void openCustomerForm({
|
||||
/* void openCustomerForm({
|
||||
CustomerModel? customer,
|
||||
required BuildContext context,
|
||||
}) {
|
||||
@@ -257,4 +269,4 @@ void openCustomerForm({
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
} */
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_bloc/flutter_bloc.dart';
|
||||
import 'package:flux/features/customers/blocs/customers_cubit.dart';
|
||||
import 'package:flux/features/customers/blocs/customer_form_cubit.dart';
|
||||
|
||||
class QuickCustomerDialog extends StatefulWidget {
|
||||
final String initialQuery;
|
||||
@@ -43,13 +43,11 @@ class _QuickCustomerDialogState extends State<QuickCustomerDialog> {
|
||||
|
||||
// Chiamata al Cubit (aggiorna i parametri in base a come li hai definiti)
|
||||
final newCustomer = await context
|
||||
.read<CustomersCubit>()
|
||||
.read<CustomerFormCubit>()
|
||||
.quickCreateCustomer(
|
||||
name: _nameCtrl.text.trim(),
|
||||
phone: _phoneCtrl.text.trim(),
|
||||
// Aggiungi questi se li hai inseriti nel tuo CustomerCubit:
|
||||
// email: _emailCtrl.text.trim(),
|
||||
// note: _noteCtrl.text.trim(),
|
||||
email: _emailCtrl.text.trim(),
|
||||
);
|
||||
|
||||
setState(() => _isLoading = false);
|
||||
|
||||
Reference in New Issue
Block a user