From 9b2a20157248862730b23c5f135c09f55b344590 Mon Sep 17 00:00:00 2001 From: firdaous elhalafi Date: Tue, 13 Feb 2024 22:27:01 +0100 Subject: [PATCH] Affichage du contenue de google sheets sous forme de tableau --- README.md | 14 +++++++++++ assets/images/affichage.png | Bin 0 -> 33923 bytes assets/images/pdf.png | Bin 0 -> 8308 bytes lib/main.dart | 48 +++++++++++++++++++++++++++++++----- 4 files changed, 56 insertions(+), 6 deletions(-) create mode 100644 assets/images/affichage.png create mode 100644 assets/images/pdf.png diff --git a/README.md b/README.md index 418f2f0..46ab9df 100644 --- a/README.md +++ b/README.md @@ -21,6 +21,10 @@ class AppConfig { - Cliquez sur "Créer des identifiants" et sélectionnez "Clé API". - Copiez la clé API générée. +#### Autorisation de lecture et d'écriture : + +- Autorisez la lecture et l'écriture de votre feuille de calcul sur Google Sheets. + #### Récupération du sheet name : - Ouvrez votre document Google Sheets. @@ -37,3 +41,13 @@ flutter build linux ```shell flutter build apk ``` + +### Application + +#### Affichage des données + +![Affichage des données](assets/images/affichage.png) + +#### Génération de PDF + +![Génération de PDF](assets/images/pdf.png) diff --git a/assets/images/affichage.png b/assets/images/affichage.png new file mode 100644 index 0000000000000000000000000000000000000000..cfc9131e3c8f6fb2371ddc957849a29ab3558be1 GIT binary patch literal 33923 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 literal 0 HcmV?d00001 diff --git a/assets/images/pdf.png b/assets/images/pdf.png new file mode 100644 index 0000000000000000000000000000000000000000..a5d7501707a1f3002c84f9716e6764ec7fc76dfd GIT binary patch literal 8308 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 hgX#Yhm^RT|t+91K3twf2uf { Future generatePdf(List> sheetData) async { final pdf = pw.Document(); - final List rows = []; + final List rows = []; for (final row in sheetData) { - final String rowData = row.map((cell) => '$cell').join(' ; '); - rows.add(pw.Text(rowData)); + final List rowWidgets = row.map((cell) => pw.Text('$cell')).toList(); + rows.add(pw.TableRow(children: rowWidgets)); } pdf.addPage(pw.Page( build: (pw.Context context) { - return pw.Column( - crossAxisAlignment: pw.CrossAxisAlignment.start, + return pw.Table( + columnWidths: { + for (int i = 0; i < sheetData[0].length; i++) + i: pw.FixedColumnWidth(100.0), + }, children: rows, ); }, @@ -217,7 +220,40 @@ class _DataPageState extends State { TextStyle(fontSize: 18.0, fontWeight: FontWeight.bold), ), const SizedBox(height: 10.0), - for (List row in _sheetData) Text(row.join(' ; ')), + Table( + border: TableBorder.all(), + columnWidths: { + for (int i = 0; i < _sheetData[0].length; i++) + i: FixedColumnWidth(100.0), + }, + children: _sheetData.map((row) { + if (row.length < _sheetData[0].length) { + final filledRow = List.from(row) + ..addAll(List.generate( + _sheetData[0].length - row.length, (_) => '')); + + return TableRow( + children: filledRow.map((cell) => Padding( + padding: const EdgeInsets.all(8.0), + child: Text( + '$cell', + style: TextStyle(fontWeight: FontWeight.bold), + ), + )).toList(), + ); + } else { + return TableRow( + children: row.map((cell) => Padding( + padding: const EdgeInsets.all(8.0), + child: Text( + '$cell', + style: TextStyle(fontWeight: FontWeight.bold), + ), + )).toList(), + ); + } + }).toList(), + ), const SizedBox(height: 20.0), Row( children: [ -- GitLab