perf: suppression du blocage d'authentification au démarrage et chargement non bloquant de l'utilisateur

This commit is contained in:
ElPoyo
2026-05-26 13:57:14 +02:00
parent 845b6e91d2
commit f56615451e
2 changed files with 19 additions and 21 deletions
+7 -19
View File
@@ -105,28 +105,16 @@ class _MyAppState extends State<MyApp> {
await initializer.initialize();
// Attendre la première valeur d'authentification avant toute décision
// de navigation, afin d'éviter un flash de la page login.
await FirebaseAuth.instance.authStateChanges().first;
if (FirebaseAuth.instance.currentUser != null) {
// Lancer la connexion automatique en dev sans bloquer le démarrage initial
if (Env.isDevelopment && FirebaseAuth.instance.currentUser == null) {
unawaited(
localAuthProvider.loadUserData().catchError((e) {
if (kDebugMode) debugPrint('User data bootstrap failed: $e');
}),
);
return;
}
// En développement, on garde la connexion automatique existante.
if (Env.isDevelopment) {
await localAuthProvider.signInWithEmailAndPassword(
localAuthProvider.signInWithEmailAndPassword(
Env.devAdminEmail,
Env.devAdminPassword,
);
unawaited(
localAuthProvider.loadUserData().catchError((e) {
if (kDebugMode) debugPrint('Dev user bootstrap failed: $e');
).then((_) {
return localAuthProvider.loadUserData();
}).catchError((e) {
if (kDebugMode) debugPrint('Dev auto-login failed: $e');
}),
);
}
+10
View File
@@ -1,8 +1,11 @@
import 'package:firebase_auth/firebase_auth.dart';
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'dart:async';
import '../views/login_page.dart';
import '../utils/colors.dart';
import '../providers/local_user_provider.dart';
/// Gate de démarrage qui attend la restauration Firebase Auth avant
/// d'afficher soit le contenu connecté, soit la page de connexion.
@@ -82,6 +85,13 @@ class _AuthenticatedBootstrapState extends State<_AuthenticatedBootstrap> {
if (!mounted) return;
// Charger les données utilisateur de façon non bloquante
unawaited(
context.read<LocalUserProvider>().loadUserData().catchError((e) {
debugPrint('[AppStartGate] User data bootstrap failed: $e');
}),
);
if (fragment.isNotEmpty && fragment != '/' && fragment != '/calendar') {
Navigator.of(context).pushReplacementNamed(fragment);
} else {