diff --git a/em2rp/.vscode/launch.json b/em2rp/.vscode/launch.json index cc069e5..bafe1d0 100644 --- a/em2rp/.vscode/launch.json +++ b/em2rp/.vscode/launch.json @@ -3,21 +3,22 @@ // Hover to view descriptions of existing attributes. // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 "version": "0.2.0", - "configurations": [ - { - "name": "Launch Edge", - "request": "launch", - "type": "msedge", - "url": "http://localhost:8080", - "webRoot": "${workspaceFolder}" - }, - { - "name": "Attach to Edge", - "port": 9222, - "request": "attach", - "type": "msedge", - "webRoot": "${workspaceFolder}" - }, + "configurations": [ + + { + "name": "Launch Edge", + "request": "launch", + "type": "msedge", + "url": "http://localhost:8080", + "webRoot": "${workspaceFolder}" + }, + { + "name": "Attach to Edge", + "port": 9222, + "request": "attach", + "type": "msedge", + "webRoot": "${workspaceFolder}" + }, { "name": "em2rp", "request": "launch", diff --git a/em2rp/assets/EM2_NsurB.jpg b/em2rp/assets/EM2_NsurB.jpg new file mode 100644 index 0000000..06ea79c Binary files /dev/null and b/em2rp/assets/EM2_NsurB.jpg differ diff --git a/em2rp/assets/Google__G__logo.svg b/em2rp/assets/Google__G__logo.svg new file mode 100644 index 0000000..088288f --- /dev/null +++ b/em2rp/assets/Google__G__logo.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/em2rp/assets/google.png b/em2rp/assets/google.png new file mode 100644 index 0000000..1d4d40d Binary files /dev/null and b/em2rp/assets/google.png differ diff --git a/em2rp/lib/firebase_options.dart b/em2rp/lib/firebase_options.dart index 80a9580..40a0874 100644 --- a/em2rp/lib/firebase_options.dart +++ b/em2rp/lib/firebase_options.dart @@ -42,11 +42,12 @@ class DefaultFirebaseOptions { static const FirebaseOptions web = FirebaseOptions( apiKey: 'AIzaSyARQL4P-t5l-cNjQNP9cMokQrLJ8BorF0U', - appId: '1:341201262902:web:bb70b5ff45df80935a3b97', + appId: '1:341201262902:web:c9f26c7729df8e915a3b97', messagingSenderId: '341201262902', projectId: 'em2rp-951dc', authDomain: 'em2rp-951dc.firebaseapp.com', - databaseURL: 'https://em2rp-951dc-default-rtdb.europe-west1.firebasedatabase.app', + databaseURL: + 'https://em2rp-951dc-default-rtdb.europe-west1.firebasedatabase.app', storageBucket: 'em2rp-951dc.firebasestorage.app', ); @@ -55,7 +56,8 @@ class DefaultFirebaseOptions { appId: '1:341201262902:android:8c9a9e340ecb58665a3b97', messagingSenderId: '341201262902', projectId: 'em2rp-951dc', - databaseURL: 'https://em2rp-951dc-default-rtdb.europe-west1.firebasedatabase.app', + databaseURL: + 'https://em2rp-951dc-default-rtdb.europe-west1.firebasedatabase.app', storageBucket: 'em2rp-951dc.firebasestorage.app', ); @@ -64,10 +66,13 @@ class DefaultFirebaseOptions { appId: '1:341201262902:ios:767281c23dd9e76a5a3b97', messagingSenderId: '341201262902', projectId: 'em2rp-951dc', - databaseURL: 'https://em2rp-951dc-default-rtdb.europe-west1.firebasedatabase.app', + databaseURL: + 'https://em2rp-951dc-default-rtdb.europe-west1.firebasedatabase.app', storageBucket: 'em2rp-951dc.firebasestorage.app', - androidClientId: '341201262902-opnuh9ri7ao77qlhebjhshsavplb7vsl.apps.googleusercontent.com', - iosClientId: '341201262902-22rdtoljpgk65lj76bqbk52v861d9lt0.apps.googleusercontent.com', + androidClientId: + '341201262902-opnuh9ri7ao77qlhebjhshsavplb7vsl.apps.googleusercontent.com', + iosClientId: + '341201262902-22rdtoljpgk65lj76bqbk52v861d9lt0.apps.googleusercontent.com', iosBundleId: 'com.em2.erp', ); @@ -76,10 +81,13 @@ class DefaultFirebaseOptions { appId: '1:341201262902:ios:767281c23dd9e76a5a3b97', messagingSenderId: '341201262902', projectId: 'em2rp-951dc', - databaseURL: 'https://em2rp-951dc-default-rtdb.europe-west1.firebasedatabase.app', + databaseURL: + 'https://em2rp-951dc-default-rtdb.europe-west1.firebasedatabase.app', storageBucket: 'em2rp-951dc.firebasestorage.app', - androidClientId: '341201262902-opnuh9ri7ao77qlhebjhshsavplb7vsl.apps.googleusercontent.com', - iosClientId: '341201262902-22rdtoljpgk65lj76bqbk52v861d9lt0.apps.googleusercontent.com', + androidClientId: + '341201262902-opnuh9ri7ao77qlhebjhshsavplb7vsl.apps.googleusercontent.com', + iosClientId: + '341201262902-22rdtoljpgk65lj76bqbk52v861d9lt0.apps.googleusercontent.com', iosBundleId: 'com.em2.erp', ); @@ -89,7 +97,8 @@ class DefaultFirebaseOptions { messagingSenderId: '341201262902', projectId: 'em2rp-951dc', authDomain: 'em2rp-951dc.firebaseapp.com', - databaseURL: 'https://em2rp-951dc-default-rtdb.europe-west1.firebasedatabase.app', + databaseURL: + 'https://em2rp-951dc-default-rtdb.europe-west1.firebasedatabase.app', storageBucket: 'em2rp-951dc.firebasestorage.app', ); } diff --git a/em2rp/lib/main.dart b/em2rp/lib/main.dart index deaa405..cd58dc6 100644 --- a/em2rp/lib/main.dart +++ b/em2rp/lib/main.dart @@ -1,28 +1,61 @@ +import 'package:em2rp/views/login_page.dart'; import 'package:flutter/material.dart'; import 'package:firebase_core/firebase_core.dart'; import 'firebase_options.dart'; +import 'utils/colors.dart'; void main() async { - WidgetsFlutterBinding - .ensureInitialized(); // Assure que Flutter est initialisé + WidgetsFlutterBinding.ensureInitialized(); await Firebase.initializeApp( - options: - DefaultFirebaseOptions.currentPlatform, // Utilise firebase_options.dart + options: DefaultFirebaseOptions.currentPlatform, ); - runApp(const MainApp()); + runApp(const MyApp()); } -class MainApp extends StatelessWidget { - const MainApp({super.key}); +class MyApp extends StatelessWidget { + const MyApp({super.key}); @override Widget build(BuildContext context) { - return const MaterialApp( - home: Scaffold( - body: Center( - child: Text('Hello World!'), + return MaterialApp( + title: 'EM2 ERP', + theme: ThemeData( + primarySwatch: Colors.red, + primaryColor: AppColors.noir, + colorScheme: + ColorScheme.fromSwatch().copyWith(secondary: AppColors.rouge), + textTheme: const TextTheme( + bodyMedium: TextStyle(color: AppColors.noir), + ), + // Personnalisation de l'InputDecorationTheme pour les text fields + inputDecorationTheme: InputDecorationTheme( + focusedBorder: OutlineInputBorder( + // Bordure lorsqu'il est focus + borderSide: + BorderSide(color: AppColors.rouge), // Couleur rouge quand focus + ), + enabledBorder: OutlineInputBorder( + // Bordure par défaut (non focus) + borderSide: + BorderSide(color: AppColors.gris), // Couleur grise par défaut + ), + labelStyle: TextStyle(color: AppColors.noir), // Couleur du label + hintStyle: TextStyle(color: AppColors.gris), // Couleur du hint text + // Tu peux personnaliser d'autres propriétés ici : + // fillColor, filled, iconColor, prefixStyle, suffixStyle, etc. + ), + elevatedButtonTheme: ElevatedButtonThemeData( + style: ElevatedButton.styleFrom( + foregroundColor: + AppColors.blanc, // Couleur du texte du bouton (ici blanc) + backgroundColor: AppColors + .noir, // Couleur de fond du bouton (si tu veux aussi changer le fond) + // Autres styles possibles pour les boutons : + // textStyle, padding, shape, elevation, etc. + ), ), ), + home: const LoginPage(), ); } } diff --git a/em2rp/lib/utils/colors.dart b/em2rp/lib/utils/colors.dart new file mode 100644 index 0000000..d5df0c8 --- /dev/null +++ b/em2rp/lib/utils/colors.dart @@ -0,0 +1,8 @@ +import 'package:flutter/material.dart'; + +class AppColors { + static const Color noir = Color(0xFF000000); // Noir + static const Color blanc = Color(0xFFFFFFFF); // Blanc + static const Color rouge = Color(0xFFFF0000); // Rouge + static const Color gris = Color(0xFF808080); // Gris (gris moyen) +} diff --git a/em2rp/lib/views/login_page.dart b/em2rp/lib/views/login_page.dart new file mode 100644 index 0000000..94c47ca --- /dev/null +++ b/em2rp/lib/views/login_page.dart @@ -0,0 +1,106 @@ +import 'package:flutter/material.dart'; +import 'package:firebase_auth/firebase_auth.dart'; + +class LoginPage extends StatefulWidget { + const LoginPage({super.key}); + + @override + State createState() => _LoginPageState(); +} + +class _LoginPageState extends State { + final _emailController = TextEditingController(); + final _passwordController = TextEditingController(); + String _errorMessage = ''; + bool _isLoading = false; + + @override + void dispose() { + _emailController.dispose(); + _passwordController.dispose(); + super.dispose(); + } + + Future _signInWithEmailAndPassword() async { + setState(() { + _errorMessage = ''; + _isLoading = true; + }); + try { + await FirebaseAuth.instance.signInWithEmailAndPassword( + email: _emailController.text.trim(), + password: _passwordController.text, + ); + // Navigation vers la page principale après connexion réussie (à implémenter) + // Par exemple : Navigator.of(context).pushReplacementNamed('/home'); + } on FirebaseAuthException catch (e) { + setState(() { + _errorMessage = "Erreur de connexion: ${e.message}"; + _isLoading = false; + }); + } + } + + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: AppBar( + title: const Text('Connexion'), + ), + body: Center( + child: SingleChildScrollView( + // Pour éviter le débordement sur les petits écrans + padding: const EdgeInsets.all(20.0), + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Image.asset( + 'assets/EM2_NsurB.jpg', + height: 150, + ), + const SizedBox(height: 20), + const Text( + 'Bienvenue !', + style: TextStyle(fontSize: 24, fontWeight: FontWeight.bold), + ), + const SizedBox(height: 20), + TextField( + controller: _emailController, + keyboardType: TextInputType.emailAddress, + decoration: const InputDecoration( + labelText: 'Email', + border: OutlineInputBorder(), + ), + ), + const SizedBox(height: 10), + TextField( + controller: _passwordController, + obscureText: true, + decoration: const InputDecoration( + labelText: 'Mot de passe', + border: OutlineInputBorder(), + ), + ), + const SizedBox(height: 20), + ElevatedButton( + onPressed: _isLoading + ? null + : _signInWithEmailAndPassword, // Désactiver pendant le chargement + child: _isLoading + ? const CircularProgressIndicator() // Indicateur de chargement + : const Text('Se connecter'), + ), + const SizedBox(height: 10), + const SizedBox(height: 10), + if (_errorMessage.isNotEmpty) + Text( + _errorMessage, + style: const TextStyle(color: Colors.red), + ), + ], + ), + ), + ), + ); + } +} diff --git a/em2rp/pubspec.yaml b/em2rp/pubspec.yaml index 6df8bd2..27bd93f 100644 --- a/em2rp/pubspec.yaml +++ b/em2rp/pubspec.yaml @@ -12,11 +12,14 @@ dependencies: firebase_core: ^3.12.1 firebase_auth: ^5.5.1 cloud_firestore: ^5.6.5 + google_sign_in: ^6.2.2 dev_dependencies: flutter_test: sdk: flutter - flutter_lints: ^4.0.0 + flutter_lints: ^5.0.0 flutter: uses-material-design: true + assets: + - assets/