import 'package:flutter/material.dart'; import 'package:get/get.dart'; import 'package:youmazgestion/Services/stock_managementDatabase.dart'; class PasswordVerificationDialog extends StatefulWidget { final String title; final String message; final Function(String) onPasswordVerified; const PasswordVerificationDialog({ Key? key, required this.title, required this.message, required this.onPasswordVerified, }) : super(key: key); @override _PasswordVerificationDialogState createState() => _PasswordVerificationDialogState(); } class _PasswordVerificationDialogState extends State { final TextEditingController _passwordController = TextEditingController(); bool _isPasswordVisible = false; bool _isLoading = false; @override void dispose() { _passwordController.dispose(); super.dispose(); } @override Widget build(BuildContext context) { return AlertDialog( shape: RoundedRectangleBorder( borderRadius: BorderRadius.circular(15), ), title: Row( children: [ Icon( Icons.security, color: Colors.blue.shade700, size: 28, ), const SizedBox(width: 10), Expanded( child: Text( widget.title, style: TextStyle( fontSize: 18, fontWeight: FontWeight.bold, color: Colors.blue.shade700, ), ), ), ], ), content: Column( mainAxisSize: MainAxisSize.min, crossAxisAlignment: CrossAxisAlignment.start, children: [ Text( widget.message, style: const TextStyle( fontSize: 14, color: Colors.black87, ), ), const SizedBox(height: 20), Container( decoration: BoxDecoration( color: Colors.grey.shade50, borderRadius: BorderRadius.circular(12), border: Border.all(color: Colors.grey.shade300), ), child: TextField( controller: _passwordController, obscureText: !_isPasswordVisible, autofocus: true, decoration: InputDecoration( labelText: 'Mot de passe', prefixIcon: Icon( Icons.lock_outline, color: Colors.blue.shade600, ), suffixIcon: IconButton( icon: Icon( _isPasswordVisible ? Icons.visibility_off : Icons.visibility, color: Colors.grey.shade600, ), onPressed: () { setState(() { _isPasswordVisible = !_isPasswordVisible; }); }, ), border: OutlineInputBorder( borderRadius: BorderRadius.circular(12), borderSide: BorderSide.none, ), filled: true, fillColor: Colors.white, contentPadding: const EdgeInsets.symmetric( horizontal: 16, vertical: 12, ), ), onSubmitted: (value) => _verifyPassword(), ), ), const SizedBox(height: 15), Container( padding: const EdgeInsets.all(12), decoration: BoxDecoration( color: Colors.amber.shade50, borderRadius: BorderRadius.circular(8), border: Border.all(color: Colors.amber.shade200), ), child: Row( children: [ Icon( Icons.info_outline, color: Colors.amber.shade700, size: 20, ), const SizedBox(width: 8), Expanded( child: Text( 'Saisissez votre mot de passe pour confirmer cette action', style: TextStyle( fontSize: 12, color: Colors.amber.shade700, ), ), ), ], ), ), ], ), actions: [ TextButton( onPressed: _isLoading ? null : () => Navigator.of(context).pop(), child: Text( 'Annuler', style: TextStyle( color: Colors.grey.shade600, fontWeight: FontWeight.w500, ), ), ), ElevatedButton( onPressed: _isLoading ? null : _verifyPassword, style: ElevatedButton.styleFrom( backgroundColor: Colors.blue.shade700, foregroundColor: Colors.white, shape: RoundedRectangleBorder( borderRadius: BorderRadius.circular(8), ), padding: const EdgeInsets.symmetric(horizontal: 20, vertical: 10), ), child: _isLoading ? const SizedBox( width: 20, height: 20, child: CircularProgressIndicator( strokeWidth: 2, valueColor: AlwaysStoppedAnimation(Colors.white), ), ) : const Text('Vérifier'), ), ], ); } void _verifyPassword() async { final password = _passwordController.text.trim(); if (password.isEmpty) { Get.snackbar( 'Erreur', 'Veuillez saisir votre mot de passe', snackPosition: SnackPosition.BOTTOM, backgroundColor: Colors.red, colorText: Colors.white, duration: const Duration(seconds: 2), ); return; } setState(() { _isLoading = true; }); try { final database = AppDatabase.instance; final isValid = await database.verifyCurrentUserPassword(password); setState(() { _isLoading = false; }); if (isValid) { Navigator.of(context).pop(); widget.onPasswordVerified(password); } else { Get.snackbar( 'Erreur', 'Mot de passe incorrect', snackPosition: SnackPosition.BOTTOM, backgroundColor: Colors.red, colorText: Colors.white, duration: const Duration(seconds: 3), ); _passwordController.clear(); } } catch (e) { setState(() { _isLoading = false; }); Get.snackbar( 'Erreur', 'Une erreur est survenue lors de la vérification', snackPosition: SnackPosition.BOTTOM, backgroundColor: Colors.red, colorText: Colors.white, duration: const Duration(seconds: 3), ); print("Erreur vérification mot de passe: $e"); } } }