Commit d57554e

derdilla <derdilla06@gmail.com>
2023-06-22 09:02:19
add minimal pdf implementation
1 parent f972010
lib/model/export_import.dart
@@ -2,6 +2,7 @@
 import 'dart:convert';
 import 'dart:typed_data';
 
+import 'package:blood_pressure_app/model/pdf_creator.dart';
 import 'package:blood_pressure_app/model/settings_store.dart';
 import 'package:csv/csv.dart';
 
@@ -12,7 +13,7 @@ class DataExporter {
 
   DataExporter(this.settings);
 
-  Uint8List createFile(List<BloodPressureRecord> records) {
+  Future<Uint8List> createFile(List<BloodPressureRecord> records) async {
     if (settings.exportFormat == ExportFormat.csv) {
       List<String> exportItems;
       if (settings.exportCustomEntries) {
@@ -63,7 +64,7 @@ class DataExporter {
       var csvData = converter.convert(items);
       return Uint8List.fromList(utf8.encode(csvHead + csvData));
     } else if (settings.exportFormat == ExportFormat.pdf) {
-      throw UnimplementedError('TODO');
+      return await PdfCreator().createPdf(records);
     }
     return Uint8List(0);
   }
lib/model/pdf_creator.dart
@@ -0,0 +1,42 @@
+import 'dart:typed_data';
+
+import 'package:blood_pressure_app/model/blood_pressure.dart';
+import 'package:pdf/pdf.dart';
+import 'package:pdf/widgets.dart';
+
+class PdfCreator {
+  Future<Uint8List> createPdf(List<BloodPressureRecord> data) async {
+    Document pdf = Document();
+
+    pdf.addPage(Page(
+        pageFormat: PdfPageFormat.a4,
+        build: (Context context) {
+          return Center(
+            child: Table(
+              children: [
+                TableRow(
+                    children: [
+                      Text('timestamp'),
+                      Text('systolic'),
+                      Text('diastolic'),
+                      Text('pulse'),
+                      Text('note')
+                    ]
+                ),
+                for (var entry in data)
+                  TableRow(
+                    children: [
+                      Text(entry.creationTime.toIso8601String()),
+                      Text(entry.systolic.toString()),
+                      Text(entry.diastolic.toString()),
+                      Text(entry.pulse.toString()),
+                      Text(entry.notes)
+                    ]
+                  )
+              ]
+            ),
+          );
+        }));
+    return await pdf.save();
+  }
+}
\ No newline at end of file
lib/screens/subsettings/export_import_screen.dart
@@ -206,7 +206,7 @@ class _ExportImportScreenState extends State<ExportImportScreen> {
                       } else {
                         entries = await Provider.of<BloodPressureModel>(context, listen: false).all;
                       }
-                      var fileContents = DataExporter(settings).createFile(entries);
+                      var fileContents = await DataExporter(settings).createFile(entries);
 
                       String filename = 'blood_press_${DateTime.now().toIso8601String()}';
                       String path = await FileSaver.instance.saveFile(name: filename, bytes: fileContents);
pubspec.lock
@@ -25,6 +25,14 @@ packages:
       url: "https://pub.dev"
     source: hosted
     version: "5.13.0"
+  archive:
+    dependency: transitive
+    description:
+      name: archive
+      sha256: "0c8368c9b3f0abbc193b9d6133649a614204b528982bebc7026372d61677ce3a"
+      url: "https://pub.dev"
+    source: hosted
+    version: "3.3.7"
   args:
     dependency: transitive
     description:
@@ -49,6 +57,22 @@ packages:
       url: "https://pub.dev"
     source: hosted
     version: "1.1.0"
+  barcode:
+    dependency: transitive
+    description:
+      name: barcode
+      sha256: "789f898eef0bd88312470bdb2cc996f895ad7dd5f89e9adde84b204546a90b45"
+      url: "https://pub.dev"
+    source: hosted
+    version: "2.2.4"
+  bidi:
+    dependency: transitive
+    description:
+      name: bidi
+      sha256: dc00274c7edabae2ab30c676e736ea1eb0b1b7a1b436cb5fe372e431ccb39ab0
+      url: "https://pub.dev"
+    source: hosted
+    version: "2.0.6"
   boolean_selector:
     dependency: transitive
     description:
@@ -309,6 +333,14 @@ packages:
       url: "https://pub.dev"
     source: hosted
     version: "4.0.2"
+  image:
+    dependency: transitive
+    description:
+      name: image
+      sha256: a72242c9a0ffb65d03de1b7113bc4e189686fc07c7147b8b41811d0dd0e0d9bf
+      url: "https://pub.dev"
+    source: hosted
+    version: "4.0.17"
   intl:
     dependency: "direct main"
     description:
@@ -421,6 +453,14 @@ packages:
       url: "https://pub.dev"
     source: hosted
     version: "1.8.3"
+  path_parsing:
+    dependency: transitive
+    description:
+      name: path_parsing
+      sha256: e3e67b1629e6f7e8100b367d3db6ba6af4b1f0bb80f64db18ef1fbabd2fa9ccf
+      url: "https://pub.dev"
+    source: hosted
+    version: "1.0.1"
   path_provider:
     dependency: transitive
     description:
@@ -469,6 +509,22 @@ packages:
       url: "https://pub.dev"
     source: hosted
     version: "2.1.6"
+  pdf:
+    dependency: "direct main"
+    description:
+      name: pdf
+      sha256: "9f75fc7f5580ea5e635b5724de58fb27f684c9ad03ed46fdc1aac768e4557315"
+      url: "https://pub.dev"
+    source: hosted
+    version: "3.10.4"
+  petitparser:
+    dependency: transitive
+    description:
+      name: petitparser
+      sha256: cb3798bef7fc021ac45b308f4b51208a152792445cce0448c9a4ba5879dd8750
+      url: "https://pub.dev"
+    source: hosted
+    version: "5.4.0"
   platform:
     dependency: transitive
     description:
@@ -485,6 +541,14 @@ packages:
       url: "https://pub.dev"
     source: hosted
     version: "2.1.4"
+  pointycastle:
+    dependency: transitive
+    description:
+      name: pointycastle
+      sha256: "7c1e5f0d23c9016c5bbd8b1473d0d3fb3fc851b876046039509e18e0c7485f2c"
+      url: "https://pub.dev"
+    source: hosted
+    version: "3.7.3"
   process:
     dependency: transitive
     description:
@@ -509,6 +573,14 @@ packages:
       url: "https://pub.dev"
     source: hosted
     version: "2.1.4"
+  qr:
+    dependency: transitive
+    description:
+      name: qr
+      sha256: "64957a3930367bf97cc211a5af99551d630f2f4625e38af10edd6b19131b64b3"
+      url: "https://pub.dev"
+    source: hosted
+    version: "3.0.1"
   resource_portable:
     dependency: transitive
     description:
@@ -810,6 +882,14 @@ packages:
       url: "https://pub.dev"
     source: hosted
     version: "1.0.0"
+  xml:
+    dependency: transitive
+    description:
+      name: xml
+      sha256: "5bc72e1e45e941d825fd7468b9b4cc3b9327942649aeb6fc5cdbf135f0a86e84"
+      url: "https://pub.dev"
+    source: hosted
+    version: "6.3.0"
   yaml:
     dependency: transitive
     description:
pubspec.yaml
@@ -46,6 +46,7 @@ dependencies:
   url_launcher: ^6.1.11  # BSD-3-Clause
   shared_preferences: ^2.1.1  # BSD-3-Clause
   mockito: ^5.4.1
+  pdf: ^3.10.4
 
 dev_dependencies:
   flutter_test: