onboarding completato

This commit is contained in:
2026-04-22 11:05:01 +02:00
parent 35ccd1487b
commit 46058d96c8
13 changed files with 211 additions and 120 deletions

View File

@@ -1,18 +1,11 @@
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:flux/core/blocs/session/session_cubit.dart';
import 'package:flux/core/data/core_repository.dart';
import 'package:flux/core/utils/validators.dart';
import 'package:flux/features/master_data/store/models/store_model.dart';
import 'package:flux/features/master_data/staff/models/staff_member_model.dart';
import 'package:flux/features/onboarding/blocs/onboarding_cubit.dart';
// Sostituisci con il percorso corretto della tua FluxTextField
import 'package:flux/core/widgets/flux_text_field.dart';
import 'package:flux/features/onboarding/blocs/onboarding_state.dart';
import 'package:flux/features/onboarding/ui/company_onboarding_form.dart';
import 'package:flux/features/onboarding/ui/staff_onboarding_form.dart';
import 'package:flux/features/onboarding/ui/store_onboarding_form.dart';
import 'package:get_it/get_it.dart';
class OnboardingScreen extends StatefulWidget {
const OnboardingScreen({super.key});
@@ -24,15 +17,6 @@ class OnboardingScreen extends StatefulWidget {
class _OnboardingScreenState extends State<OnboardingScreen> {
late PageController _pageController;
// --- CHIAVI DEI FORM (Per la validazione indipendente di ogni step) ---
final _staffFormKey = GlobalKey<FormState>();
// --- CONTROLLERS: STEP 3 (Staff) ---
final _staffFirstNameCtrl = TextEditingController();
final _staffLastNameCtrl = TextEditingController();
final _staffJobTitleCtrl = TextEditingController();
@override
void initState() {
super.initState();
@@ -44,9 +28,6 @@ class _OnboardingScreenState extends State<OnboardingScreen> {
@override
void dispose() {
_pageController.dispose();
_staffFirstNameCtrl.dispose();
_staffLastNameCtrl.dispose();
_staffJobTitleCtrl.dispose();
super.dispose();
}
@@ -112,9 +93,9 @@ class _OnboardingScreenState extends State<OnboardingScreen> {
physics:
const NeverScrollableScrollPhysics(), // Vietato lo swipe manuale!
children: [
CompanyOnboardingForm(state: state), // Step 1: Company
CompanyOnboardingForm(state: state),
StoreOnboardingForm(state: state),
_buildStaffForm(context, state),
StaffOnboardingForm(),
],
),
@@ -131,73 +112,4 @@ class _OnboardingScreenState extends State<OnboardingScreen> {
},
);
}
Widget _buildStaffForm(BuildContext context, OnboardingState state) {
return Padding(
padding: const EdgeInsets.all(32.0),
child: Form(
key: _staffFormKey,
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.stretch,
children: [
const Text(
"Il tuo Profilo 👤",
style: TextStyle(fontSize: 32, fontWeight: FontWeight.bold),
),
const SizedBox(height: 8),
const Text(
"Ultimo step! Crea il tuo profilo operativo per iniziare a usare FLUX.",
style: TextStyle(fontSize: 16, color: Colors.grey),
),
const SizedBox(height: 48),
FluxTextField(
label: 'Nome',
controller: _staffFirstNameCtrl,
validator: notEmptyValidator,
),
const SizedBox(height: 16),
FluxTextField(
label: 'Cognome',
controller: _staffLastNameCtrl,
validator: notEmptyValidator,
),
const SizedBox(height: 16),
FluxTextField(
label: 'Etichetta Ruolo (es. Titolare, Manager)',
controller: _staffJobTitleCtrl,
// Il jobTitle può anche essere opzionale, decidi tu!
),
const Spacer(),
ElevatedButton(
style: ElevatedButton.styleFrom(
padding: const EdgeInsets.symmetric(vertical: 16),
backgroundColor: Colors.black, // O il tuo context.accent
foregroundColor: Colors.white,
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(12),
),
),
onPressed: () {
if (_staffFormKey.currentState!.validate()) {
final newStaff = StaffMemberModel.empty().copyWith(
name: _staffFirstNameCtrl.text.trim(),
jobTitle: _staffJobTitleCtrl.text.trim(),
);
context.read<OnboardingCubit>().saveStaff(newStaff);
}
},
child: const Text(
"Entra in FLUX",
style: TextStyle(fontSize: 16, fontWeight: FontWeight.bold),
),
),
const SizedBox(height: 16),
],
),
),
);
}
}