feat: implement authentication flow with AppStartGate, AuthGuard, and calendar page initialization
This commit is contained in:
@@ -149,3 +149,4 @@ app.*.symbols
|
|||||||
.python-version
|
.python-version
|
||||||
.gclient_previous_custom_vars
|
.gclient_previous_custom_vars
|
||||||
.gclient_previous_sync_commits
|
.gclient_previous_sync_commits
|
||||||
|
em2rp/lib/config/env.dart
|
||||||
|
|||||||
@@ -4,8 +4,9 @@ import 'package:provider/provider.dart';
|
|||||||
import 'dart:async';
|
import 'dart:async';
|
||||||
|
|
||||||
import '../views/login_page.dart';
|
import '../views/login_page.dart';
|
||||||
import '../utils/colors.dart';
|
|
||||||
import '../providers/local_user_provider.dart';
|
import '../providers/local_user_provider.dart';
|
||||||
|
import '../views/widgets/common/startup_splash_screen.dart';
|
||||||
|
|
||||||
/// Gate de démarrage qui attend la restauration Firebase Auth avant
|
/// Gate de démarrage qui attend la restauration Firebase Auth avant
|
||||||
/// d'afficher soit le contenu connecté, soit la page de connexion.
|
/// d'afficher soit le contenu connecté, soit la page de connexion.
|
||||||
@@ -43,14 +44,14 @@ class AppStartGate extends StatelessWidget {
|
|||||||
stream: safeAuthStream,
|
stream: safeAuthStream,
|
||||||
builder: (context, snapshot) {
|
builder: (context, snapshot) {
|
||||||
if (snapshot.connectionState == ConnectionState.waiting) {
|
if (snapshot.connectionState == ConnectionState.waiting) {
|
||||||
return const _StartupSplashScreen();
|
return const StartupSplashScreen();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (snapshot.hasError) {
|
if (snapshot.hasError) {
|
||||||
// En théorie handleError évite d'arriver ici, mais on garde
|
// En théorie handleError évite d'arriver ici, mais on garde
|
||||||
// une protection supplémentaire.
|
// une protection supplémentaire.
|
||||||
debugPrint('[AppStartGate] snapshot error: ${snapshot.error}');
|
debugPrint('[AppStartGate] snapshot error: ${snapshot.error}');
|
||||||
return const _StartupSplashScreen(message: 'Erreur de connexion');
|
return const StartupSplashScreen(message: 'Erreur de connexion');
|
||||||
}
|
}
|
||||||
|
|
||||||
if (snapshot.data != null) {
|
if (snapshot.data != null) {
|
||||||
@@ -101,44 +102,9 @@ class _AuthenticatedBootstrapState extends State<_AuthenticatedBootstrap> {
|
|||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
return const _StartupSplashScreen();
|
return const StartupSplashScreen();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class _StartupSplashScreen extends StatelessWidget {
|
|
||||||
final String message;
|
|
||||||
|
|
||||||
const _StartupSplashScreen({this.message = 'Démarrage...'});
|
|
||||||
|
|
||||||
@override
|
|
||||||
Widget build(BuildContext context) {
|
|
||||||
return Scaffold(
|
|
||||||
backgroundColor: Colors.white,
|
|
||||||
body: Center(
|
|
||||||
child: Column(
|
|
||||||
mainAxisAlignment: MainAxisAlignment.center,
|
|
||||||
children: [
|
|
||||||
Image.asset(
|
|
||||||
'assets/logos/RectangleLogoBlack.png',
|
|
||||||
width: 160,
|
|
||||||
height: 160,
|
|
||||||
fit: BoxFit.contain,
|
|
||||||
errorBuilder: (context, error, stackTrace) {
|
|
||||||
return const Icon(
|
|
||||||
Icons.event_available,
|
|
||||||
size: 72,
|
|
||||||
color: AppColors.rouge,
|
|
||||||
);
|
|
||||||
},
|
|
||||||
),
|
|
||||||
const SizedBox(height: 24),
|
|
||||||
const CircularProgressIndicator(),
|
|
||||||
const SizedBox(height: 16),
|
|
||||||
Text(message),
|
|
||||||
],
|
|
||||||
),
|
|
||||||
),
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ import 'package:em2rp/views/login_page.dart';
|
|||||||
import 'package:firebase_auth/firebase_auth.dart';
|
import 'package:firebase_auth/firebase_auth.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:provider/provider.dart';
|
import 'package:provider/provider.dart';
|
||||||
|
import 'package:em2rp/views/widgets/common/startup_splash_screen.dart';
|
||||||
|
|
||||||
class AuthGuard extends StatelessWidget {
|
class AuthGuard extends StatelessWidget {
|
||||||
final Widget child;
|
final Widget child;
|
||||||
@@ -33,12 +34,7 @@ class AuthGuard extends StatelessWidget {
|
|||||||
return child;
|
return child;
|
||||||
}
|
}
|
||||||
|
|
||||||
return const Scaffold(
|
return const StartupSplashScreen(message: 'Chargement du profil...');
|
||||||
backgroundColor: Colors.white,
|
|
||||||
body: Center(
|
|
||||||
child: CircularProgressIndicator(),
|
|
||||||
),
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Si l'utilisateur n'est pas connecté
|
// Si l'utilisateur n'est pas connecté
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ import 'package:em2rp/utils/performance_monitor.dart';
|
|||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:em2rp/views/widgets/nav/custom_app_bar.dart';
|
import 'package:em2rp/views/widgets/nav/custom_app_bar.dart';
|
||||||
import 'package:em2rp/views/widgets/nav/main_drawer.dart';
|
import 'package:em2rp/views/widgets/nav/main_drawer.dart';
|
||||||
|
import 'package:em2rp/views/widgets/common/startup_splash_screen.dart';
|
||||||
import 'package:provider/provider.dart';
|
import 'package:provider/provider.dart';
|
||||||
import 'package:table_calendar/table_calendar.dart';
|
import 'package:table_calendar/table_calendar.dart';
|
||||||
import 'package:em2rp/models/event_model.dart';
|
import 'package:em2rp/models/event_model.dart';
|
||||||
@@ -864,11 +865,7 @@ class _CalendarPageState extends State<CalendarPage> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (eventProvider.isLoading) {
|
if (eventProvider.isLoading) {
|
||||||
return const Scaffold(
|
return const StartupSplashScreen(message: 'Chargement des événements...');
|
||||||
body: Center(
|
|
||||||
child: CircularProgressIndicator(),
|
|
||||||
),
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return Scaffold(
|
return Scaffold(
|
||||||
|
|||||||
Reference in New Issue
Block a user