Browse Source

qr code maj

31052025_01
b.razafimandimbihery 6 months ago
parent
commit
ea3c1d69df
  1. 100
      lib/Views/HandleProduct.dart

100
lib/Views/HandleProduct.dart

@ -4,6 +4,8 @@ import 'package:flutter/material.dart';
import 'package:flutter/services.dart'; import 'package:flutter/services.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
import 'package:file_picker/file_picker.dart'; import 'package:file_picker/file_picker.dart';
import 'package:open_file/open_file.dart';
import 'package:pdf/widgets.dart' as pw;
import 'package:qr_flutter/qr_flutter.dart'; import 'package:qr_flutter/qr_flutter.dart';
import 'package:intl/intl.dart'; import 'package:intl/intl.dart';
import 'package:path_provider/path_provider.dart'; import 'package:path_provider/path_provider.dart';
@ -912,10 +914,17 @@ Widget _buildImportProgressIndicator() {
} }
void _showQRCode(Product product) { void _showQRCode(Product product) {
final qrUrl = 'https://stock.guycom.mg/${product.reference}'; // État pour contrôler le type d'affichage (true = URL complète, false = référence seulement)
RxBool showFullUrl = true.obs;
Get.dialog(
AlertDialog( Get.dialog(
Obx(() {
// Données du QR code selon l'état
final qrData = showFullUrl.value
? 'https://stock.guycom.mg/${product.reference}'
: product.reference!;
return AlertDialog(
title: Row( title: Row(
children: [ children: [
const Icon(Icons.qr_code_2, color: Colors.blue), const Icon(Icons.qr_code_2, color: Colors.blue),
@ -933,6 +942,28 @@ Widget _buildImportProgressIndicator() {
child: Column( child: Column(
mainAxisSize: MainAxisSize.min, mainAxisSize: MainAxisSize.min,
children: [ children: [
// Bouton pour basculer entre URL et référence
ElevatedButton.icon(
onPressed: () {
showFullUrl.value = !showFullUrl.value;
},
icon: Icon(
showFullUrl.value ? Icons.link : Icons.tag,
size: 16,
),
label: Text(
showFullUrl.value ? 'URL/Référence' : 'Référence',
style: const TextStyle(fontSize: 14),
),
style: ElevatedButton.styleFrom(
backgroundColor: showFullUrl.value ? Colors.blue : Colors.green,
foregroundColor: Colors.white,
minimumSize: const Size(double.infinity, 36),
),
),
const SizedBox(height: 16),
// Container du QR Code
Container( Container(
padding: const EdgeInsets.all(16), padding: const EdgeInsets.all(16),
decoration: BoxDecoration( decoration: BoxDecoration(
@ -941,13 +972,15 @@ Widget _buildImportProgressIndicator() {
border: Border.all(color: Colors.grey.shade300), border: Border.all(color: Colors.grey.shade300),
), ),
child: QrImageView( child: QrImageView(
data: qrUrl, data: qrData,
version: QrVersions.auto, version: QrVersions.auto,
size: 200, size: 200,
backgroundColor: Colors.white, backgroundColor: Colors.white,
), ),
), ),
const SizedBox(height: 16), const SizedBox(height: 16),
// Affichage des données actuelles
Container( Container(
padding: const EdgeInsets.all(12), padding: const EdgeInsets.all(12),
decoration: BoxDecoration( decoration: BoxDecoration(
@ -957,12 +990,12 @@ Widget _buildImportProgressIndicator() {
child: Column( child: Column(
children: [ children: [
Text( Text(
'Référence: ${product.reference}', showFullUrl.value ? 'URL Complète' : 'Référence Seulement',
style: const TextStyle(fontWeight: FontWeight.bold), style: const TextStyle(fontWeight: FontWeight.bold),
), ),
const SizedBox(height: 4), const SizedBox(height: 4),
Text( Text(
qrUrl, qrData,
style: const TextStyle(fontSize: 12, color: Colors.grey), style: const TextStyle(fontSize: 12, color: Colors.grey),
textAlign: TextAlign.center, textAlign: TextAlign.center,
), ),
@ -975,25 +1008,64 @@ Widget _buildImportProgressIndicator() {
actions: [ actions: [
TextButton( TextButton(
onPressed: () { onPressed: () {
Clipboard.setData(ClipboardData(text: qrUrl)); Clipboard.setData(ClipboardData(text: qrData));
Get.back(); Get.back();
Get.snackbar( Get.snackbar(
'Copié', 'Copié',
'URL copiée dans le presse-papiers', '${showFullUrl.value ? "URL" : "Référence"} copiée dans le presse-papiers',
backgroundColor: Colors.green, backgroundColor: Colors.green,
colorText: Colors.white, colorText: Colors.white,
); );
}, },
child: const Text('Copier URL'), child: Text('Copier ${showFullUrl.value ? "URL" : "Référence"}'),
),
TextButton(
onPressed: () => _generatePDF(product, qrData),
child: const Text('Imprimer en PDF'),
), ),
TextButton( TextButton(
onPressed: () => Get.back(), onPressed: () => Get.back(),
child: const Text('Fermer'), child: const Text('Fermer'),
), ),
], ],
), );
); }),
} );
}
Future<void> _generatePDF(Product product, String qrUrl) async {
final pdf = pw.Document();
pdf.addPage(
pw.Page(
build: (pw.Context context) {
return pw.Center(
child: pw.Column(
children: [
pw.Text('QR Code - ${product.name}', style: pw.TextStyle(fontSize: 20)),
pw.SizedBox(height: 20),
pw.BarcodeWidget(
barcode: pw.Barcode.qrCode(),
data: qrUrl,
width: 200,
height: 200,
),
pw.SizedBox(height: 20),
pw.Text('URL/Référence: $qrUrl', style: pw.TextStyle(fontSize: 12)),
pw.SizedBox(height: 10),
pw.Text('Référence: ${product.reference}', style: pw.TextStyle(fontSize: 12)),
],
),
);
},
),
);
final output = await getTemporaryDirectory();
final file = File("${output.path}/qrcode.pdf");
await file.writeAsBytes(await pdf.save());
OpenFile.open(file.path);
}
void _editProduct(Product product) { void _editProduct(Product product) {
final nameController = TextEditingController(text: product.name); final nameController = TextEditingController(text: product.name);

Loading…
Cancel
Save