andrymodeste 4 months ago
parent
commit
ea3be45c06
  1. BIN
      android/app/src/main/res/appstore.png
  2. BIN
      android/app/src/main/res/mipmap-hdpi/ic_launcher.png
  3. BIN
      android/app/src/main/res/mipmap-mdpi/ic_launcher.png
  4. BIN
      android/app/src/main/res/mipmap-xhdpi/ic_launcher.png
  5. BIN
      android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
  6. BIN
      android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
  7. BIN
      android/app/src/main/res/playstore.png
  8. 12
      lib/models/payment_method.dart
  9. 35
      lib/pages/caisse_screen.dart
  10. 305
      lib/pages/facture_screen.dart
  11. 6
      lib/pages/login_screen.dart
  12. 266
      lib/services/pdf_service.dart
  13. 28
      lib/services/restaurant_api_service.dart
  14. 8
      linux/flutter/generated_plugin_registrant.cc
  15. 2
      linux/flutter/generated_plugins.cmake
  16. 6
      macos/Flutter/GeneratedPluginRegistrant.swift
  17. 303
      pubspec.lock
  18. 4
      pubspec.yaml
  19. 9
      windows/flutter/generated_plugin_registrant.cc
  20. 3
      windows/flutter/generated_plugins.cmake

BIN
android/app/src/main/res/appstore.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 243 KiB

BIN
android/app/src/main/res/mipmap-hdpi/ic_launcher.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 544 B

After

Width:  |  Height:  |  Size: 8.2 KiB

BIN
android/app/src/main/res/mipmap-mdpi/ic_launcher.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 442 B

After

Width:  |  Height:  |  Size: 4.5 KiB

BIN
android/app/src/main/res/mipmap-xhdpi/ic_launcher.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 721 B

After

Width:  |  Height:  |  Size: 12 KiB

BIN
android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.0 KiB

After

Width:  |  Height:  |  Size: 21 KiB

BIN
android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 KiB

After

Width:  |  Height:  |  Size: 31 KiB

BIN
android/app/src/main/res/playstore.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 113 KiB

12
lib/models/payment_method.dart

@ -17,25 +17,25 @@ class PaymentMethod {
} }
final List<PaymentMethod> paymentMethods = [ final List<PaymentMethod> paymentMethods = [
PaymentMethod( const PaymentMethod(
id: 'mvola', id: 'mvola',
name: 'MVola', name: 'MVola',
description: 'Paiement mobile MVola', description: 'Paiement mobile MVola',
icon: Icons.phone, icon: Icons.phone,
color: const Color(0xFF4285F4), color: Color(0xFF4285F4),
), ),
PaymentMethod( const PaymentMethod(
id: 'carte', id: 'carte',
name: 'Carte Bancaire', name: 'Carte Bancaire',
description: 'Paiement par carte', description: 'Paiement par carte',
icon: Icons.credit_card, icon: Icons.credit_card,
color: const Color(0xFF28A745), color: Color(0xFF28A745),
), ),
PaymentMethod( const PaymentMethod(
id: 'especes', id: 'especes',
name: 'Espèces', name: 'Espèces',
description: 'Paiement en liquide', description: 'Paiement en liquide',
icon: Icons.attach_money, icon: Icons.attach_money,
color: const Color(0xFFFF9500), color: Color(0xFFFF9500),
), ),
]; ];

35
lib/pages/caisse_screen.dart

@ -1,5 +1,6 @@
// pages/caisse_screen.dart // pages/caisse_screen.dart
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:itrimobe/pages/facture_screen.dart';
import '../models/command_detail.dart'; import '../models/command_detail.dart';
import '../models/payment_method.dart'; import '../models/payment_method.dart';
import '../services/restaurant_api_service.dart'; import '../services/restaurant_api_service.dart';
@ -73,25 +74,39 @@ class _CaisseScreenState extends State<CaisseScreen> {
} }
} }
// Dans caisse_screen.dart, modifiez la méthode _processPayment
Future<void> _processPayment() async { Future<void> _processPayment() async {
if (selectedPaymentMethod == null) { if (selectedPaymentMethod == null || commande == null) return;
_showErrorDialog('Veuillez sélectionner une méthode de paiement');
return;
}
setState(() => isProcessingPayment = true); setState(() => isProcessingPayment = true);
try { try {
// await RestaurantApiService.processPayment( final success = await RestaurantApiService.processPayment(
// commandeId: widget.commandeId, commandeId: widget.commandeId,
// paymentMethodId: selectedPaymentMethod!.id, paymentMethodId: selectedPaymentMethod!.id,
// ); amount: commande!.totalTtc,
);
_showSuccessDialog(); if (success) {
// Navigation vers la facture au lieu du dialog de succès
Navigator.of(context).pushReplacement(
MaterialPageRoute(
builder:
(context) => FactureScreen(
commande: commande!,
paymentMethod: selectedPaymentMethod!.id,
),
),
);
} else {
_showErrorDialog('Le paiement a échoué. Veuillez réessayer.');
}
} catch (e) { } catch (e) {
_showErrorDialog('Erreur lors du traitement du paiement: $e'); _showErrorDialog('Erreur lors du traitement du paiement: $e');
} finally { } finally {
setState(() => isProcessingPayment = false); if (mounted) {
setState(() => isProcessingPayment = false);
}
} }
} }

305
lib/pages/facture_screen.dart

@ -0,0 +1,305 @@
// pages/facture_screen.dart
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import '../models/command_detail.dart';
import '../services/pdf_service.dart';
class FactureScreen extends StatefulWidget {
final CommandeDetail commande;
final String paymentMethod;
const FactureScreen({
Key? key,
required this.commande,
required this.paymentMethod,
}) : super(key: key);
@override
_FactureScreenState createState() => _FactureScreenState();
}
class _FactureScreenState extends State<FactureScreen> {
String get paymentMethodText {
switch (widget.paymentMethod) {
case 'mvola':
return 'MVola';
case 'carte':
return 'CB';
case 'especes':
return 'Espèces';
default:
return 'CB';
}
}
String get factureNumber {
return 'F${DateTime.now().millisecondsSinceEpoch.toString().substring(7)}';
}
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: Colors.grey[100],
appBar: AppBar(
backgroundColor: Colors.white,
elevation: 0,
leading: IconButton(
icon: const Icon(Icons.arrow_back, color: Colors.black),
onPressed: () => Navigator.of(context).pop(),
),
title: const Text(
'Retour',
style: TextStyle(
color: Colors.black,
fontSize: 16,
fontWeight: FontWeight.w500,
),
),
actions: [
Container(
margin: const EdgeInsets.only(right: 16, top: 8, bottom: 8),
child: ElevatedButton.icon(
onPressed: _printReceipt,
icon: const Icon(Icons.print, size: 18),
label: const Text('Imprimer'),
style: ElevatedButton.styleFrom(
backgroundColor: const Color(0xFF28A745),
foregroundColor: Colors.white,
elevation: 0,
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(6),
),
padding: const EdgeInsets.symmetric(
horizontal: 12,
vertical: 8,
),
),
),
),
],
),
body: Center(
child: Container(
width: 400,
margin: const EdgeInsets.all(20),
child: Card(
elevation: 2,
color: Colors.white,
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(8),
),
child: Padding(
padding: const EdgeInsets.all(40),
child: Column(
mainAxisSize: MainAxisSize.min,
children: [
_buildHeader(),
const SizedBox(height: 30),
_buildFactureInfo(),
const SizedBox(height: 30),
_buildItemsList(),
const SizedBox(height: 20),
_buildTotal(),
const SizedBox(height: 30),
_buildFooter(),
],
),
),
),
),
),
);
}
Widget _buildHeader() {
return Column(
children: [
const Text(
'RESTAURANT',
style: TextStyle(
fontSize: 20,
fontWeight: FontWeight.bold,
letterSpacing: 1.2,
),
),
const SizedBox(height: 12),
const Text(
'Adresse: 123 Rue de la Paix',
style: TextStyle(fontSize: 12, color: Colors.black87),
),
const Text(
'Contact: +33 1 23 45 67 89',
style: TextStyle(fontSize: 12, color: Colors.black87),
),
],
);
}
Widget _buildFactureInfo() {
final now = DateTime.now();
final dateStr =
'${now.day.toString().padLeft(2, '0')}/${now.month.toString().padLeft(2, '0')}/${now.year}';
final timeStr =
'${now.hour.toString().padLeft(2, '0')}:${now.minute.toString().padLeft(2, '0')}';
return Column(
children: [
Text(
'Facture n° $factureNumber',
style: const TextStyle(fontSize: 14, fontWeight: FontWeight.w600),
),
const SizedBox(height: 4),
Text(
'Date: $dateStr $timeStr',
style: const TextStyle(fontSize: 12, color: Colors.black87),
),
const SizedBox(height: 4),
Text(
'Table: ${widget.commande.tableId}',
style: const TextStyle(fontSize: 12, color: Colors.black87),
),
const SizedBox(height: 4),
Text(
'Paiement: $paymentMethodText',
style: const TextStyle(fontSize: 12, color: Colors.black87),
),
],
);
}
Widget _buildItemsList() {
return Column(
children: [
const Padding(
padding: EdgeInsets.only(bottom: 10),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Text(
'Qté Désignation',
style: TextStyle(fontSize: 12, fontWeight: FontWeight.w600),
),
Text(
'Prix',
style: TextStyle(fontSize: 12, fontWeight: FontWeight.w600),
),
],
),
),
const Divider(height: 1, color: Colors.black26),
const SizedBox(height: 10),
...widget.commande.items
.map(
(item) => Padding(
padding: const EdgeInsets.only(bottom: 6),
child: Row(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Expanded(
child: Text(
'${item.quantite} ${item.menuNom}',
style: const TextStyle(
fontSize: 12,
color: Colors.black87,
),
),
),
Text(
'${(item.prixUnitaire * item.quantite).toStringAsFixed(2)} MGA',
style: const TextStyle(
fontSize: 12,
color: Colors.black87,
),
),
],
),
),
)
.toList(),
],
);
}
Widget _buildTotal() {
return Column(
children: [
const Divider(height: 1, color: Colors.black26),
const SizedBox(height: 12),
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
const Text(
'Total:',
style: TextStyle(fontSize: 16, fontWeight: FontWeight.bold),
),
Text(
'${widget.commande.totalTtc.toStringAsFixed(2)}',
style: const TextStyle(fontSize: 16, fontWeight: FontWeight.bold),
),
],
),
],
);
}
Widget _buildFooter() {
return const Text(
'Merci et à bientôt !',
style: TextStyle(
fontSize: 12,
fontStyle: FontStyle.italic,
color: Colors.black54,
),
);
}
void _printReceipt() async {
try {
HapticFeedback.lightImpact();
final success = await PdfService.printFacture(
commande: widget.commande,
paymentMethod: widget.paymentMethod,
);
if (success) {
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(
content: const Row(
children: [
Icon(Icons.check_circle, color: Colors.white),
SizedBox(width: 8),
Text('Facture envoyée à l\'impression'),
],
),
backgroundColor: const Color(0xFF28A745),
duration: const Duration(seconds: 2),
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(6),
),
margin: const EdgeInsets.all(16),
behavior: SnackBarBehavior.floating,
),
);
Future.delayed(const Duration(seconds: 2), () {
if (mounted) {
Navigator.of(context).popUntil((route) => route.isFirst);
}
});
}
} catch (e) {
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(
content: Text('Erreur impression: $e'),
backgroundColor: Colors.red,
),
);
} finally {
if (mounted) {
Navigator.of(context).pop();
}
}
}
}

6
lib/pages/login_screen.dart

@ -412,9 +412,9 @@ class HomeScreen extends StatelessWidget {
child: Column( child: Column(
mainAxisAlignment: MainAxisAlignment.center, mainAxisAlignment: MainAxisAlignment.center,
children: [ children: [
Icon(Icons.check_circle, color: Colors.green, size: 80), const Icon(Icons.check_circle, color: Colors.green, size: 80),
const SizedBox(height: 16), const SizedBox(height: 16),
Text( const Text(
'Connexion réussie!', 'Connexion réussie!',
style: TextStyle( style: TextStyle(
fontSize: 24, fontSize: 24,
@ -425,7 +425,7 @@ class HomeScreen extends StatelessWidget {
const SizedBox(height: 8), const SizedBox(height: 8),
Text( Text(
'Bienvenue $userType', 'Bienvenue $userType',
style: TextStyle(fontSize: 18, color: Colors.grey), style: const TextStyle(fontSize: 18, color: Colors.grey),
), ),
], ],
), ),

266
lib/services/pdf_service.dart

@ -0,0 +1,266 @@
// services/pdf_service.dart
import 'dart:io';
import 'dart:typed_data';
import 'package:pdf/pdf.dart';
import 'package:pdf/widgets.dart' as pw;
import 'package:printing/printing.dart';
import 'package:path_provider/path_provider.dart';
import 'package:share_plus/share_plus.dart';
import '../models/command_detail.dart';
class PdfService {
static Future<Uint8List> generateFacturePdf({
required CommandeDetail commande,
required String paymentMethod,
}) async {
final pdf = pw.Document();
// Informations du restaurant
final restaurantInfo = {
'nom': 'RESTAURANT',
'adresse': 'Moramanga, Antananarivo',
'contact': '+261 34 12 34 56',
};
// Générer numéro de facture
final factureNumber =
'F${DateTime.now().millisecondsSinceEpoch.toString().substring(7)}';
final dateTime = DateTime.now();
pdf.addPage(
pw.Page(
pageFormat: PdfPageFormat.a4,
margin: const pw.EdgeInsets.all(32),
build: (pw.Context context) {
return pw.Column(
crossAxisAlignment: pw.CrossAxisAlignment.start,
children: [
// En-tête Restaurant
pw.Center(
child: pw.Column(
children: [
pw.Text(
restaurantInfo['nom']!,
style: pw.TextStyle(
fontSize: 24,
fontWeight: pw.FontWeight.bold,
),
),
pw.SizedBox(height: 8),
pw.Text(
'Adresse: ${restaurantInfo['adresse']}',
style: const pw.TextStyle(fontSize: 12),
),
pw.Text(
'Contact: ${restaurantInfo['contact']}',
style: const pw.TextStyle(fontSize: 12),
),
],
),
),
pw.SizedBox(height: 30),
// Informations facture
pw.Center(
child: pw.Column(
children: [
pw.Text(
'Facture n° $factureNumber',
style: pw.TextStyle(
fontSize: 14,
fontWeight: pw.FontWeight.bold,
),
),
pw.SizedBox(height: 4),
pw.Text(
'Date: ${_formatDateTime(dateTime)}',
style: const pw.TextStyle(fontSize: 12),
),
pw.SizedBox(height: 4),
pw.Text(
'Table: ${commande.numeroCommande}',
style: const pw.TextStyle(fontSize: 12),
),
pw.SizedBox(height: 4),
pw.Text(
'Paiement: ${_getPaymentMethodText(paymentMethod)}',
style: const pw.TextStyle(fontSize: 12),
),
],
),
),
pw.SizedBox(height: 30),
// Tableau des articles
pw.Table(
border: pw.TableBorder.all(color: PdfColors.grey300),
columnWidths: {
0: const pw.FlexColumnWidth(3),
1: const pw.FlexColumnWidth(1),
2: const pw.FlexColumnWidth(1),
},
children: [
// En-tête du tableau
pw.TableRow(
decoration: const pw.BoxDecoration(
color: PdfColors.grey100,
),
children: [
pw.Padding(
padding: const pw.EdgeInsets.all(8),
child: pw.Text(
'Qté Désignation',
style: pw.TextStyle(fontWeight: pw.FontWeight.bold),
),
),
pw.Padding(
padding: const pw.EdgeInsets.all(8),
child: pw.Text(
'Prix',
style: pw.TextStyle(fontWeight: pw.FontWeight.bold),
textAlign: pw.TextAlign.right,
),
),
],
),
// Lignes des articles
...commande.items
.map(
(item) => pw.TableRow(
children: [
pw.Padding(
padding: const pw.EdgeInsets.all(8),
child: pw.Text(
'${item.quantite} TESTNOMCOMMANDE',
),
),
pw.Padding(
padding: const pw.EdgeInsets.all(8),
child: pw.Text(
'${item.prixUnitaire.toStringAsFixed(2)}',
textAlign: pw.TextAlign.right,
),
),
],
),
)
.toList(),
],
),
pw.SizedBox(height: 20),
// Total
pw.Container(
alignment: pw.Alignment.centerRight,
child: pw.Container(
padding: const pw.EdgeInsets.all(12),
decoration: pw.BoxDecoration(
border: pw.Border.all(color: PdfColors.grey400),
color: PdfColors.grey50,
),
child: pw.Text(
'Total: ${commande.totalTtc.toStringAsFixed(2)}',
style: pw.TextStyle(
fontSize: 16,
fontWeight: pw.FontWeight.bold,
),
),
),
),
pw.Spacer(),
// Message de remerciement
pw.Center(
child: pw.Text(
'Merci et à bientôt !',
style: pw.TextStyle(
fontSize: 12,
fontStyle: pw.FontStyle.italic,
),
),
),
],
);
},
),
);
return pdf.save();
}
static String _formatDateTime(DateTime dateTime) {
return '${dateTime.day.toString().padLeft(2, '0')}/${dateTime.month.toString().padLeft(2, '0')}/${dateTime.year} ${dateTime.hour.toString().padLeft(2, '0')}:${dateTime.minute.toString().padLeft(2, '0')}';
}
static String _getPaymentMethodText(String method) {
switch (method) {
case 'mvola':
return 'MVola';
case 'carte':
return 'CB';
case 'especes':
return 'Espèces';
default:
return 'CB';
}
}
// Imprimer directement
static Future<bool> printFacture({
required CommandeDetail commande,
required String paymentMethod,
}) async {
try {
final pdfData = await generateFacturePdf(
commande: commande,
paymentMethod: paymentMethod,
);
await Printing.layoutPdf(
onLayout: (PdfPageFormat format) async => pdfData,
name:
'Facture_${commande.numeroCommande}_${DateTime.now().millisecondsSinceEpoch}',
);
return true;
} catch (e) {
print('Erreur impression: $e');
return false;
}
}
// Sauvegarder et partager le PDF
static Future<bool> saveAndShareFacture({
required CommandeDetail commande,
required String paymentMethod,
}) async {
try {
final pdfData = await generateFacturePdf(
commande: commande,
paymentMethod: paymentMethod,
);
final directory = await getApplicationDocumentsDirectory();
final fileName =
'Facture_${commande.numeroCommande}_${DateTime.now().millisecondsSinceEpoch}.pdf';
final file = File('${directory.path}/$fileName');
await file.writeAsBytes(pdfData);
await Share.shareXFiles(
[XFile(file.path)],
subject: 'Facture ${commande.numeroCommande}',
text: 'Facture de votre commande au restaurant',
);
return true;
} catch (e) {
print('Erreur sauvegarde/partage: $e');
return false;
}
}
}

28
lib/services/restaurant_api_service.dart

@ -103,20 +103,32 @@ class RestaurantApiService {
} }
//processPayment //processPayment
static Future<bool> processPayment( // Dans services/restaurant_api_service.dart
String commandeId, static Future<bool> processPayment({
PaymentMethod paymentMethod, required String commandeId, // Ajoutez ce paramètre
) async { required String paymentMethodId,
required double amount,
}) async {
try { try {
final response = await http.post( final response = await http.post(
Uri.parse('$baseUrl/api/commandes/$commandeId'), Uri.parse('$baseUrl/api/commandes/$commandeId'),
headers: _headers, headers: _headers,
// body: json.encode({'payment_method': paymentMethod.toJson()}), body: json.encode({
'mode_paiement': paymentMethodId,
'statut': 'payee',
}),
); );
return response.statusCode == 200;
if (response.statusCode == 200 || response.statusCode == 201) {
final data = json.decode(response.body);
return data['success'] ?? true;
} else {
throw Exception('Erreur ${response.statusCode}: ${response.body}');
}
} catch (e) { } catch (e) {
print('Erreur lors du paiement: $e'); print('Erreur API processPayment: $e');
return false; // Pour la démo // Pour les tests, retourner true
return true;
} }
} }

8
linux/flutter/generated_plugin_registrant.cc

@ -6,6 +6,14 @@
#include "generated_plugin_registrant.h" #include "generated_plugin_registrant.h"
#include <printing/printing_plugin.h>
#include <url_launcher_linux/url_launcher_plugin.h>
void fl_register_plugins(FlPluginRegistry* registry) { void fl_register_plugins(FlPluginRegistry* registry) {
g_autoptr(FlPluginRegistrar) printing_registrar =
fl_plugin_registry_get_registrar_for_plugin(registry, "PrintingPlugin");
printing_plugin_register_with_registrar(printing_registrar);
g_autoptr(FlPluginRegistrar) url_launcher_linux_registrar =
fl_plugin_registry_get_registrar_for_plugin(registry, "UrlLauncherPlugin");
url_launcher_plugin_register_with_registrar(url_launcher_linux_registrar);
} }

2
linux/flutter/generated_plugins.cmake

@ -3,6 +3,8 @@
# #
list(APPEND FLUTTER_PLUGIN_LIST list(APPEND FLUTTER_PLUGIN_LIST
printing
url_launcher_linux
) )
list(APPEND FLUTTER_FFI_PLUGIN_LIST list(APPEND FLUTTER_FFI_PLUGIN_LIST

6
macos/Flutter/GeneratedPluginRegistrant.swift

@ -5,6 +5,12 @@
import FlutterMacOS import FlutterMacOS
import Foundation import Foundation
import path_provider_foundation
import printing
import share_plus
func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) { func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) {
PathProviderPlugin.register(with: registry.registrar(forPlugin: "PathProviderPlugin"))
PrintingPlugin.register(with: registry.registrar(forPlugin: "PrintingPlugin"))
SharePlusMacosPlugin.register(with: registry.registrar(forPlugin: "SharePlusMacosPlugin"))
} }

303
pubspec.lock

@ -1,6 +1,14 @@
# Generated by pub # Generated by pub
# See https://dart.dev/tools/pub/glossary#lockfile # See https://dart.dev/tools/pub/glossary#lockfile
packages: packages:
archive:
dependency: transitive
description:
name: archive
sha256: "2fde1607386ab523f7a36bb3e7edb43bd58e6edaf2ffb29d8a6d578b297fdbbd"
url: "https://pub.dev"
source: hosted
version: "4.0.7"
async: async:
dependency: transitive dependency: transitive
description: description:
@ -9,6 +17,22 @@ packages:
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "2.12.0" version: "2.12.0"
barcode:
dependency: transitive
description:
name: barcode
sha256: "7b6729c37e3b7f34233e2318d866e8c48ddb46c1f7ad01ff7bb2a8de1da2b9f4"
url: "https://pub.dev"
source: hosted
version: "2.2.9"
bidi:
dependency: transitive
description:
name: bidi
sha256: "77f475165e94b261745cf1032c751e2032b8ed92ccb2bf5716036db79320637d"
url: "https://pub.dev"
source: hosted
version: "2.0.13"
boolean_selector: boolean_selector:
dependency: transitive dependency: transitive
description: description:
@ -41,6 +65,22 @@ packages:
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "1.19.1" version: "1.19.1"
cross_file:
dependency: transitive
description:
name: cross_file
sha256: "7caf6a750a0c04effbb52a676dce9a4a592e10ad35c34d6d2d0e4811160d5670"
url: "https://pub.dev"
source: hosted
version: "0.3.4+2"
crypto:
dependency: transitive
description:
name: crypto
sha256: "1e445881f28f22d6140f181e07737b22f1e099a5e1ff94b0af2f9e4a463f4855"
url: "https://pub.dev"
source: hosted
version: "3.0.6"
cupertino_icons: cupertino_icons:
dependency: "direct main" dependency: "direct main"
description: description:
@ -57,6 +97,30 @@ packages:
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "1.3.2" version: "1.3.2"
ffi:
dependency: transitive
description:
name: ffi
sha256: "289279317b4b16eb2bb7e271abccd4bf84ec9bdcbe999e278a94b804f5630418"
url: "https://pub.dev"
source: hosted
version: "2.1.4"
file:
dependency: transitive
description:
name: file
sha256: a3b4f84adafef897088c160faf7dfffb7696046cb13ae90b508c2cbc95d3b8d4
url: "https://pub.dev"
source: hosted
version: "7.0.1"
fixnum:
dependency: transitive
description:
name: fixnum
sha256: b6dc7065e46c974bc7c5f143080a6764ec7a4be6da1285ececdc37be96de53be
url: "https://pub.dev"
source: hosted
version: "1.1.1"
flutter: flutter:
dependency: "direct main" dependency: "direct main"
description: flutter description: flutter
@ -75,6 +139,11 @@ packages:
description: flutter description: flutter
source: sdk source: sdk
version: "0.0.0" version: "0.0.0"
flutter_web_plugins:
dependency: transitive
description: flutter
source: sdk
version: "0.0.0"
http: http:
dependency: "direct main" dependency: "direct main"
description: description:
@ -91,6 +160,14 @@ packages:
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "4.1.2" version: "4.1.2"
image:
dependency: transitive
description:
name: image
sha256: "4e973fcf4caae1a4be2fa0a13157aa38a8f9cb049db6529aa00b4d71abc4d928"
url: "https://pub.dev"
source: hosted
version: "4.5.4"
leak_tracker: leak_tracker:
dependency: transitive dependency: transitive
description: description:
@ -147,6 +224,14 @@ packages:
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "1.16.0" version: "1.16.0"
mime:
dependency: transitive
description:
name: mime
sha256: "801fd0b26f14a4a58ccb09d5892c3fbdeff209594300a542492cf13fba9d247a"
url: "https://pub.dev"
source: hosted
version: "1.0.6"
path: path:
dependency: transitive dependency: transitive
description: description:
@ -155,6 +240,142 @@ packages:
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "1.9.1" version: "1.9.1"
path_parsing:
dependency: transitive
description:
name: path_parsing
sha256: "883402936929eac138ee0a45da5b0f2c80f89913e6dc3bf77eb65b84b409c6ca"
url: "https://pub.dev"
source: hosted
version: "1.1.0"
path_provider:
dependency: "direct main"
description:
name: path_provider
sha256: "50c5dd5b6e1aaf6fb3a78b33f6aa3afca52bf903a8a5298f53101fdaee55bbcd"
url: "https://pub.dev"
source: hosted
version: "2.1.5"
path_provider_android:
dependency: transitive
description:
name: path_provider_android
sha256: d0d310befe2c8ab9e7f393288ccbb11b60c019c6b5afc21973eeee4dda2b35e9
url: "https://pub.dev"
source: hosted
version: "2.2.17"
path_provider_foundation:
dependency: transitive
description:
name: path_provider_foundation
sha256: "4843174df4d288f5e29185bd6e72a6fbdf5a4a4602717eed565497429f179942"
url: "https://pub.dev"
source: hosted
version: "2.4.1"
path_provider_linux:
dependency: transitive
description:
name: path_provider_linux
sha256: f7a1fe3a634fe7734c8d3f2766ad746ae2a2884abe22e241a8b301bf5cac3279
url: "https://pub.dev"
source: hosted
version: "2.2.1"
path_provider_platform_interface:
dependency: transitive
description:
name: path_provider_platform_interface
sha256: "88f5779f72ba699763fa3a3b06aa4bf6de76c8e5de842cf6f29e2e06476c2334"
url: "https://pub.dev"
source: hosted
version: "2.1.2"
path_provider_windows:
dependency: transitive
description:
name: path_provider_windows
sha256: bd6f00dbd873bfb70d0761682da2b3a2c2fccc2b9e84c495821639601d81afe7
url: "https://pub.dev"
source: hosted
version: "2.3.0"
pdf:
dependency: "direct main"
description:
name: pdf
sha256: "28eacad99bffcce2e05bba24e50153890ad0255294f4dd78a17075a2ba5c8416"
url: "https://pub.dev"
source: hosted
version: "3.11.3"
pdf_widget_wrapper:
dependency: transitive
description:
name: pdf_widget_wrapper
sha256: c930860d987213a3d58c7ec3b7ecf8085c3897f773e8dc23da9cae60a5d6d0f5
url: "https://pub.dev"
source: hosted
version: "1.0.4"
petitparser:
dependency: transitive
description:
name: petitparser
sha256: "07c8f0b1913bcde1ff0d26e57ace2f3012ccbf2b204e070290dad3bb22797646"
url: "https://pub.dev"
source: hosted
version: "6.1.0"
platform:
dependency: transitive
description:
name: platform
sha256: "5d6b1b0036a5f331ebc77c850ebc8506cbc1e9416c27e59b439f917a902a4984"
url: "https://pub.dev"
source: hosted
version: "3.1.6"
plugin_platform_interface:
dependency: transitive
description:
name: plugin_platform_interface
sha256: "4820fbfdb9478b1ebae27888254d445073732dae3d6ea81f0b7e06d5dedc3f02"
url: "https://pub.dev"
source: hosted
version: "2.1.8"
posix:
dependency: transitive
description:
name: posix
sha256: "6323a5b0fa688b6a010df4905a56b00181479e6d10534cecfecede2aa55add61"
url: "https://pub.dev"
source: hosted
version: "6.0.3"
printing:
dependency: "direct main"
description:
name: printing
sha256: "482cd5a5196008f984bb43ed0e47cbfdca7373490b62f3b27b3299275bf22a93"
url: "https://pub.dev"
source: hosted
version: "5.14.2"
qr:
dependency: transitive
description:
name: qr
sha256: "5a1d2586170e172b8a8c8470bbbffd5eb0cd38a66c0d77155ea138d3af3a4445"
url: "https://pub.dev"
source: hosted
version: "3.0.2"
share_plus:
dependency: "direct main"
description:
name: share_plus
sha256: "3ef39599b00059db0990ca2e30fca0a29d8b37aae924d60063f8e0184cf20900"
url: "https://pub.dev"
source: hosted
version: "7.2.2"
share_plus_platform_interface:
dependency: transitive
description:
name: share_plus_platform_interface
sha256: "251eb156a8b5fa9ce033747d73535bf53911071f8d3b6f4f0b578505ce0d4496"
url: "https://pub.dev"
source: hosted
version: "3.4.0"
sky_engine: sky_engine:
dependency: transitive dependency: transitive
description: flutter description: flutter
@ -168,6 +389,14 @@ packages:
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "1.10.1" version: "1.10.1"
sprintf:
dependency: transitive
description:
name: sprintf
sha256: "1fc9ffe69d4df602376b52949af107d8f5703b77cda567c4d7d86a0693120f23"
url: "https://pub.dev"
source: hosted
version: "7.0.0"
stack_trace: stack_trace:
dependency: transitive dependency: transitive
description: description:
@ -216,6 +445,46 @@ packages:
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "1.4.0" version: "1.4.0"
url_launcher_linux:
dependency: transitive
description:
name: url_launcher_linux
sha256: "4e9ba368772369e3e08f231d2301b4ef72b9ff87c31192ef471b380ef29a4935"
url: "https://pub.dev"
source: hosted
version: "3.2.1"
url_launcher_platform_interface:
dependency: transitive
description:
name: url_launcher_platform_interface
sha256: "552f8a1e663569be95a8190206a38187b531910283c3e982193e4f2733f01029"
url: "https://pub.dev"
source: hosted
version: "2.3.2"
url_launcher_web:
dependency: transitive
description:
name: url_launcher_web
sha256: "4bd2b7b4dc4d4d0b94e5babfffbca8eac1a126c7f3d6ecbc1a11013faa3abba2"
url: "https://pub.dev"
source: hosted
version: "2.4.1"
url_launcher_windows:
dependency: transitive
description:
name: url_launcher_windows
sha256: "3284b6d2ac454cf34f114e1d3319866fdd1e19cdc329999057e44ffe936cfa77"
url: "https://pub.dev"
source: hosted
version: "3.1.4"
uuid:
dependency: transitive
description:
name: uuid
sha256: a5be9ef6618a7ac1e964353ef476418026db906c4facdedaa299b7a2e71690ff
url: "https://pub.dev"
source: hosted
version: "4.5.1"
vector_math: vector_math:
dependency: transitive dependency: transitive
description: description:
@ -232,6 +501,38 @@ packages:
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "14.3.1" version: "14.3.1"
web:
dependency: transitive
description:
name: web
sha256: "868d88a33d8a87b18ffc05f9f030ba328ffefba92d6c127917a2ba740f9cfe4a"
url: "https://pub.dev"
source: hosted
version: "1.1.1"
win32:
dependency: transitive
description:
name: win32
sha256: "329edf97fdd893e0f1e3b9e88d6a0e627128cc17cc316a8d67fda8f1451178ba"
url: "https://pub.dev"
source: hosted
version: "5.13.0"
xdg_directories:
dependency: transitive
description:
name: xdg_directories
sha256: "7a3f37b05d989967cdddcbb571f1ea834867ae2faa29725fd085180e0883aa15"
url: "https://pub.dev"
source: hosted
version: "1.1.0"
xml:
dependency: transitive
description:
name: xml
sha256: b015a8ad1c488f66851d762d3090a21c600e479dc75e68328c52774040cf9226
url: "https://pub.dev"
source: hosted
version: "6.5.0"
sdks: sdks:
dart: ">=3.7.2 <4.0.0" dart: ">=3.7.2 <4.0.0"
flutter: ">=3.18.0-18.0.pre.54" flutter: ">=3.27.0"

4
pubspec.yaml

@ -21,6 +21,10 @@ dependencies:
# Pour effectuer des requêtes HTTP # Pour effectuer des requêtes HTTP
http: ^0.13.5 http: ^0.13.5
pdf: ^3.10.7
printing: ^5.11.1
path_provider: ^2.1.1
share_plus: ^7.2.1
# Dépendances de développement/test # Dépendances de développement/test
dev_dependencies: dev_dependencies:

9
windows/flutter/generated_plugin_registrant.cc

@ -6,6 +6,15 @@
#include "generated_plugin_registrant.h" #include "generated_plugin_registrant.h"
#include <printing/printing_plugin.h>
#include <share_plus/share_plus_windows_plugin_c_api.h>
#include <url_launcher_windows/url_launcher_windows.h>
void RegisterPlugins(flutter::PluginRegistry* registry) { void RegisterPlugins(flutter::PluginRegistry* registry) {
PrintingPluginRegisterWithRegistrar(
registry->GetRegistrarForPlugin("PrintingPlugin"));
SharePlusWindowsPluginCApiRegisterWithRegistrar(
registry->GetRegistrarForPlugin("SharePlusWindowsPluginCApi"));
UrlLauncherWindowsRegisterWithRegistrar(
registry->GetRegistrarForPlugin("UrlLauncherWindows"));
} }

3
windows/flutter/generated_plugins.cmake

@ -3,6 +3,9 @@
# #
list(APPEND FLUTTER_PLUGIN_LIST list(APPEND FLUTTER_PLUGIN_LIST
printing
share_plus
url_launcher_windows
) )
list(APPEND FLUTTER_FFI_PLUGIN_LIST list(APPEND FLUTTER_FFI_PLUGIN_LIST

Loading…
Cancel
Save