Refactor signup page to use BLoC pattern and implement authentication repository
- Updated signup.dart to replace Provider with BLoC for state management. - Created AuthRepository to handle authentication logic and Firestore user management. - Added TripRepository and UserRepository for trip and user data management. - Implemented methods for user sign-in, sign-up, and data retrieval in repositories. - Enhanced trip management with create, update, delete, and participant management functionalities. - Updated AuthService to include new methods for sign-in and sign-up. - Removed unnecessary print statements from TripService for cleaner code. - Added dependencies for flutter_bloc and equatable in pubspec.yaml. Not tested yet
This commit is contained in:
126
lib/main.dart
126
lib/main.dart
@@ -1,30 +1,25 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
import 'package:travel_mate/pages/resetpswd.dart';
|
||||
import 'package:travel_mate/pages/signup.dart';
|
||||
import 'package:flutter_bloc/flutter_bloc.dart';
|
||||
import 'package:firebase_core/firebase_core.dart';
|
||||
import 'blocs/auth/auth_bloc.dart';
|
||||
import 'blocs/auth/auth_event.dart';
|
||||
import 'blocs/auth/auth_state.dart';
|
||||
import 'blocs/theme/theme_bloc.dart';
|
||||
import 'blocs/theme/theme_event.dart';
|
||||
import 'blocs/theme/theme_state.dart';
|
||||
import 'repositories/auth_repository.dart';
|
||||
import 'repositories/trip_repository.dart';
|
||||
import 'repositories/user_repository.dart';
|
||||
import 'pages/login.dart';
|
||||
import 'pages/home.dart';
|
||||
import 'providers/theme_provider.dart';
|
||||
import 'providers/user_provider.dart';
|
||||
import 'package:firebase_core/firebase_core.dart';
|
||||
import 'firebase_options.dart';
|
||||
import 'pages/signup.dart';
|
||||
import 'pages/resetpswd.dart';
|
||||
|
||||
void main() async {
|
||||
WidgetsFlutterBinding.ensureInitialized();
|
||||
await Firebase.initializeApp(
|
||||
options: DefaultFirebaseOptions.currentPlatform,
|
||||
);
|
||||
runApp(
|
||||
MultiProvider(
|
||||
providers: [
|
||||
ChangeNotifierProvider(create: (context) => ThemeProvider()),
|
||||
ChangeNotifierProvider(
|
||||
create: (context) => UserProvider(),
|
||||
), // Ajoutez cette ligne
|
||||
],
|
||||
child: const MyApp(),
|
||||
),
|
||||
);
|
||||
await Firebase.initializeApp();
|
||||
|
||||
runApp(const MyApp());
|
||||
}
|
||||
|
||||
class MyApp extends StatelessWidget {
|
||||
@@ -32,40 +27,67 @@ class MyApp extends StatelessWidget {
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Consumer<ThemeProvider>(
|
||||
builder: (context, themeProvider, child) {
|
||||
return MaterialApp(
|
||||
title: 'Travel Mate',
|
||||
themeMode: themeProvider.themeMode,
|
||||
|
||||
// Thème clair
|
||||
theme: ThemeData(
|
||||
colorScheme: ColorScheme.fromSeed(
|
||||
seedColor: const Color.fromARGB(255, 180, 180, 180),
|
||||
brightness: Brightness.light,
|
||||
),
|
||||
useMaterial3: true,
|
||||
return MultiRepositoryProvider(
|
||||
providers: [
|
||||
RepositoryProvider<AuthRepository>(
|
||||
create: (context) => AuthRepository(),
|
||||
),
|
||||
RepositoryProvider<UserRepository>(
|
||||
create: (context) => UserRepository(),
|
||||
),
|
||||
RepositoryProvider<TripRepository>(
|
||||
create: (context) => TripRepository(),
|
||||
),
|
||||
],
|
||||
child: MultiBlocProvider(
|
||||
providers: [
|
||||
BlocProvider<ThemeBloc>(
|
||||
create: (context) => ThemeBloc()..add(ThemeLoadRequested()),
|
||||
),
|
||||
|
||||
// Thème sombre
|
||||
darkTheme: ThemeData(
|
||||
colorScheme: ColorScheme.fromSeed(
|
||||
seedColor: const Color.fromARGB(255, 43, 43, 43),
|
||||
brightness: Brightness.dark,
|
||||
),
|
||||
useMaterial3: true,
|
||||
BlocProvider<AuthBloc>(
|
||||
create: (context) => AuthBloc(
|
||||
authRepository: context.read<AuthRepository>(),
|
||||
)..add(AuthCheckRequested()),
|
||||
),
|
||||
|
||||
initialRoute: '/login',
|
||||
routes: {
|
||||
'/login': (context) => const LoginPage(),
|
||||
'/signup': (context) => const SignUpPage(),
|
||||
'/home': (context) => const HomePage(),
|
||||
'/forgot': (context) => const ForgotPasswordPage(),
|
||||
],
|
||||
child: BlocBuilder<ThemeBloc, ThemeState>(
|
||||
builder: (context, themeState) {
|
||||
return MaterialApp(
|
||||
title: 'Travel Mate',
|
||||
themeMode: themeState.themeMode,
|
||||
theme: ThemeData(
|
||||
colorScheme: ColorScheme.fromSeed(
|
||||
seedColor: const Color.fromARGB(255, 180, 180, 180),
|
||||
brightness: Brightness.light,
|
||||
),
|
||||
useMaterial3: true,
|
||||
),
|
||||
darkTheme: ThemeData(
|
||||
colorScheme: ColorScheme.fromSeed(
|
||||
seedColor: const Color.fromARGB(255, 43, 43, 43),
|
||||
brightness: Brightness.dark,
|
||||
),
|
||||
useMaterial3: true,
|
||||
),
|
||||
home: BlocBuilder<AuthBloc, AuthState>(
|
||||
builder: (context, authState) {
|
||||
if (authState is AuthAuthenticated) {
|
||||
return const HomePage();
|
||||
}
|
||||
return const LoginPage();
|
||||
},
|
||||
),
|
||||
routes: {
|
||||
'/login': (context) => const LoginPage(),
|
||||
'/signup': (context) => const SignUpPage(),
|
||||
'/home': (context) => const HomePage(),
|
||||
'/forgot': (context) => const ForgotPasswordPage(),
|
||||
},
|
||||
debugShowCheckedModeBanner: false,
|
||||
);
|
||||
},
|
||||
debugShowCheckedModeBanner: false,
|
||||
);
|
||||
},
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user