import 'package:flutter/material.dart'; import 'package:get/get.dart'; import 'package:shared_preferences/shared_preferences.dart'; import 'package:youmazgestion/Views/particles.dart' show ParticleBackground; import 'package:youmazgestion/accueil.dart'; import 'package:youmazgestion/Services/authDatabase.dart'; import '../Models/users.dart'; import '../controller/userController.dart'; class LoginPage extends StatefulWidget { const LoginPage({super.key}); @override _LoginPageState createState() => _LoginPageState(); } class _LoginPageState extends State { late TextEditingController _usernameController; late TextEditingController _passwordController; final UserController userController = Get.put(UserController()); bool _isErrorVisible = false; @override void initState() { super.initState(); _usernameController = TextEditingController(); _passwordController = TextEditingController(); checkUserCount(); } void checkUserCount() async { final userCount = await AuthDatabase.instance.getUserCount(); if (userCount == 0) { // No user found, redirect to home page Navigator.pushReplacement( context, MaterialPageRoute(builder: (context) => const AccueilPage()), ); } } @override void dispose() { _usernameController.dispose(); _passwordController.dispose(); super.dispose(); } Future saveUser(String? username,String? role)async{ final prefs = await SharedPreferences.getInstance(); await prefs.setString('username', username!); await prefs.setString('role', role!); } void _login() async { final String username = _usernameController.text; final String password = _passwordController.text; print(username); print(password); try { bool isValidUser = await AuthDatabase.instance.verifyUser(username, password); Users user = await AuthDatabase.instance.getUser(username); Map? getUserCredentials = await AuthDatabase.instance.getUserCredentials(username,password); print(isValidUser); if (isValidUser) { print('User is valid'); print(user); userController.setUser(user); setState(() { _isErrorVisible = false; }); Navigator.pushReplacement( context, MaterialPageRoute(builder: (context) => const AccueilPage()), ); saveUser(getUserCredentials?['username'], getUserCredentials?['role']); } else { setState(() { _isErrorVisible = true; }); } } catch (error) { print(error); setState(() { _isErrorVisible = true; }); } } @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: const Text( 'Login', style: TextStyle(color:Colors.white), ), backgroundColor: const Color.fromARGB(255, 4, 54, 95), centerTitle: true, ), body: ParticleBackground( child: Center( child: Container( width: MediaQuery.of(context).size.width * 0.5, height: MediaQuery.of(context).size.height * 0.8, padding: const EdgeInsets.all(16.0), decoration: BoxDecoration( color: Colors.white, shape: BoxShape.rectangle, borderRadius: BorderRadius.circular(30.0), ), child: Column( crossAxisAlignment: CrossAxisAlignment.stretch, children: [ Container( padding: const EdgeInsets.symmetric(vertical: 16.0), child: const Icon( Icons.lock_outline, size: 100.0, color: Color.fromARGB(255, 4, 54, 95), ), ), TextField( controller: _usernameController, decoration: InputDecoration( labelText: 'Username', prefixIcon: const Icon(Icons.person, color: Colors.blueAccent), border: OutlineInputBorder( borderRadius: BorderRadius.circular(30.0), ), ), ), const SizedBox(height: 16.0), TextField( controller: _passwordController, decoration: InputDecoration( labelText: 'Password', prefixIcon: const Icon(Icons.lock, color: Colors.redAccent), border: OutlineInputBorder( borderRadius: BorderRadius.circular(30.0), ), ), obscureText: true, ), const SizedBox(height: 16.0), Visibility( visible: _isErrorVisible, child: const Text( 'Invalid username or password', style: TextStyle( color: Colors.red, ), ), ), const SizedBox(height: 16.0), ElevatedButton( onPressed: _login, style: ElevatedButton.styleFrom( backgroundColor: const Color(0xFF0015B7), // Nouvelle couleur elevation: 5.0, shape: RoundedRectangleBorder( borderRadius: BorderRadius.circular(30.0), ), ), child: const Text( 'Login', style: TextStyle( color: Colors.white, ), ), ), ], ), ), ), ), ); } }