Commit d57554e
Changed files (5)
lib
screens
subsettings
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: