feat: add mobile device detection and update session state management

This commit is contained in:
2026-04-22 15:33:12 +02:00
parent 90bd5ecacf
commit 8438e0804f
8 changed files with 46 additions and 11 deletions

View File

@@ -130,4 +130,8 @@ class SessionCubit extends Cubit<SessionState> {
await _supabase.auth.signOut();
// Non serve emettere stato qui, ci pensa il listener nel costruttore!
}
void setIsMobileDevice(bool isMobile) {
emit(state.copyWith(isMobileDevice: isMobile));
}
}

View File

@@ -24,6 +24,7 @@ class SessionState extends Equatable {
final StoreModel? currentStore;
final StaffMemberModel? currentStaff;
final OnboardingStep onboardingStep;
final bool isMobileDevice;
const SessionState({
this.status = SessionStatus.initial,
@@ -32,6 +33,7 @@ class SessionState extends Equatable {
this.currentStore,
this.currentStaff,
this.onboardingStep = OnboardingStep.none,
this.isMobileDevice = false,
});
/// Metodo per creare una copia dello stato modificando solo i campi necessari
@@ -42,6 +44,7 @@ class SessionState extends Equatable {
StoreModel? currentStore,
StaffMemberModel? currentStaff,
OnboardingStep? onboardingStep,
bool? isMobileDevice,
}) {
return SessionState(
status: status ?? this.status,
@@ -50,6 +53,7 @@ class SessionState extends Equatable {
currentStore: currentStore ?? this.currentStore,
currentStaff: currentStaff ?? this.currentStaff,
onboardingStep: onboardingStep ?? this.onboardingStep,
isMobileDevice: isMobileDevice ?? this.isMobileDevice,
);
}
@@ -61,6 +65,7 @@ class SessionState extends Equatable {
currentStore,
currentStaff,
onboardingStep,
isMobileDevice,
];
// Helper rapidi per la UI

View File

@@ -1,6 +1,5 @@
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:flux/features/auth/bloc/auth_cubit.dart';
import 'package:flux/features/company/bloc/company_bloc.dart';
import 'package:flux/core/blocs/session/session_cubit.dart';
import 'package:flux/core/theme/theme.dart';

View File

@@ -6,6 +6,7 @@ import 'package:flux/core/widgets/flux_text_field.dart';
import 'package:flux/features/master_data/staff/blocs/staff_cubit.dart'; // Tuo percorso
import 'package:flux/features/master_data/staff/models/staff_member_model.dart';
import 'package:flux/features/master_data/store/bloc/store_cubit.dart';
import 'package:get_it/get_it.dart';
class StaffScreen extends StatefulWidget {
const StaffScreen({super.key});
@@ -268,25 +269,24 @@ class _StaffScreenState extends State<StaffScreen> {
height: 50,
child: ElevatedButton(
onPressed: () {
final companyId = context
.read<SessionCubit>()
.state
.company!
.id!;
//TODO sistemare StaffScreen per il nuovo modello
/* final updatedMember = StaffMemberModel(
final updatedMember = StaffMemberModel(
id: member?.id,
name: nameController.text,
email: emailController.text,
phoneNumber: phoneController.text,
companyId: companyId,
companyId: GetIt.I
.get<SessionCubit>()
.state
.company!
.id!,
userId: GetIt.I.get<SessionCubit>().state.user!.id,
);
// Chiamiamo il metodo atomico nel Cubit
context.read<StaffCubit>().saveStaffWithStores(
member: updatedMember,
selectedStoreIds: tempSelectedStores,
); */
);
Navigator.pop(context);
},

View File

@@ -2,7 +2,6 @@ import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:flux/core/utils/validators.dart';
import 'package:flux/core/widgets/flux_text_field.dart';
import 'package:flux/features/company/models/company_model.dart';
import 'package:flux/features/onboarding/blocs/onboarding_cubit.dart';
import 'package:flux/features/onboarding/blocs/onboarding_state.dart';

View File

@@ -1,3 +1,6 @@
import 'dart:io';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:flutter_dotenv/flutter_dotenv.dart';
@@ -109,6 +112,14 @@ class _FluxAppState extends State<FluxApp> {
super.initState();
// Creiamo il router passandogli il Cubit per i redirect
_router = AppRouter.createRouter(context.read<SessionCubit>());
GetIt.I.get<SessionCubit>().setIsMobileDevice(isMobileDevice(context));
}
bool isMobileDevice(BuildContext context) {
if (kIsWeb) {
return false; // Il web non lo consideriamo "mobile nativo" per i deep link
}
return Platform.isAndroid || Platform.isIOS;
}
@override