import 'package:flutter/material.dart'; import 'package:youmazgestion/Components/app_bar.dart'; import '../Models/produit.dart'; import '../Services/productDatabase.dart'; class GestionStockPage extends StatefulWidget { const GestionStockPage({super.key}); @override _GestionStockPageState createState() => _GestionStockPageState(); } class _GestionStockPageState extends State { late Future> _productsFuture; @override void initState() { super.initState(); _loadProducts(); } Future _loadProducts() async { final productDatabase = ProductDatabase.instance; _productsFuture = productDatabase.getProducts(); } Future _refreshProducts() async { final productDatabase = ProductDatabase.instance; _productsFuture = productDatabase.getProducts(); setState(() {}); } Future _updateStock(int id, int stock) async { final productDatabase = ProductDatabase.instance; await productDatabase.updateStock(id, stock); _refreshProducts(); } //popup pour modifier le stock Future _showStockDialog(Product product) async { int stock = product.stock ?? 0; final quantityController = TextEditingController(text: stock.toString()); await showDialog( context: context, builder: (context) { return AlertDialog( title: const Text('Modifier le stock'), content: Column( mainAxisSize: MainAxisSize.min, children: [ Text(product.name), const SizedBox(height: 16), Row( mainAxisAlignment: MainAxisAlignment.spaceEvenly, children: [ IconButton( icon: const Icon(Icons.remove), onPressed: () { setState(() { if (stock > 0) { stock--; quantityController.text = stock.toString(); } }); }, ), Expanded( child: TextField( controller: quantityController, textAlign: TextAlign.center, keyboardType: TextInputType.number, onChanged: (value) { setState(() { stock = int.parse(value); }); }, ), ), IconButton( icon: const Icon(Icons.add), onPressed: () { setState(() { stock++; quantityController.text = stock.toString(); }); }, ), ], ), ], ), actions: [ TextButton( child: const Text('Annuler'), onPressed: () { Navigator.of(context).pop(); }, ), ElevatedButton( child: const Text('Enregistrer'), onPressed: () { // Enregistrer la nouvelle quantité dans la base de données _updateStock(product.id!, stock); Navigator.of(context).pop(); }, ), ], ); }, ); } @override Widget build(BuildContext context) { return Scaffold( appBar: const CustomAppBar(title: 'Gestion du stock'), body: FutureBuilder>( future: _productsFuture, builder: (context, snapshot) { if (snapshot.connectionState == ConnectionState.waiting) { return const Center( child: CircularProgressIndicator(), ); } else if (snapshot.hasError) { return const Center( child: Text('Une erreur s\'est produite'), ); } else if (!snapshot.hasData || snapshot.data!.isEmpty) { return const Center( child: Text('Aucun produit trouvé'), ); } else { final products = snapshot.data!; return ListView.builder( itemCount: products.length, itemBuilder: (context, index) { final product = products[index]; Color stockColor; if (product.stock != null) { if (product.stock! > 30) { stockColor = Colors.green; } else if (product.stock! > 10) { stockColor = Colors.red; } else { stockColor = Colors.red; } } else { stockColor = Colors.red; } return Card( margin: const EdgeInsets.symmetric(vertical: 8, horizontal: 16), shape: RoundedRectangleBorder( borderRadius: BorderRadius.circular(20), ), elevation: 4, shadowColor: Colors.deepOrangeAccent, child: ListTile( leading: const Icon(Icons.shopping_basket), title: Text( product.name, style: const TextStyle( fontSize: 18, fontWeight: FontWeight.bold, ), ), subtitle: Text( 'Stock: ${product.stock ?? 'Non disponible'}', style: TextStyle( fontSize: 16, color: stockColor, ), ), trailing: IconButton( icon: const Icon(Icons.edit), onPressed: () { _showStockDialog(product); }, ), ), ); }, ); } }, ), ); } }