Ein Foto oder PDF besteht aus Bytes. Ein Datenbankeintrag hält meist eine Referenz und Metadaten statt den gesamten Dateiinhalt. Diese Trennung spart unnötige Datenbanklast, erzeugt aber eine Koordinationsaufgabe. Dateien dürfen nicht gelöscht werden, solange Einträge sie verwenden. Wir beginnen mit einem kleinen PDF-Bericht. Die App ergänzt danach private Ablage, Vorschau und Teilen.
01Ein getrenntes Dart-Projekt vorbereiten
Erstelle ein Konsolenprojekt mit dart create -t console pdf_demo. Ersetze pubspec.yaml durch die Beispieldatei und führe dart pub get aus. Sie fixiert den geprüften PDF-, Bild- und Archivpaketstand. Kopiere report.dart nach bin/report.dart. Dieses Beispiel verwendet dart:io und läuft als lokales Konsolenprogramm.
import 'dart:io';
import 'package:pdf/widgets.dart' as pw;
Future<void> main() async {
final doc = pw.Document();
doc.addPage(
pw.Page(
build: (_) => pw.Column(
children: [
pw.Text('Family car'),
pw.Text('Service'),
pw.Text('129.90 EUR'),
],
),
),
);
await File('report.pdf').writeAsBytes(await doc.save(), flush: true);
print('report.pdf written');
}
Starten / prüfen
dart run bin/report.dart02Inhalt von Ausgabe trennen
Document hält den neuen PDF-Bericht. Page enthält das Layout. Text und Column stammen aus dem PDF-Widgetpaket, nicht aus Flutter Material. doc.save liefert die fertigen Bytes. Erst File.writeAsBytes schreibt sie auf die Platte.
03Referenzen verlässlich verwalten
Die App verwendet DocumentRepository und Foto-Repositories als eigene Grenzen. Ein Ablauf importiert eine Datei, prüft Grenzen, speichert Metadaten und ordnet sie einem Entwurf zu. Ein fehlgeschlagener Schreibvorgang darf keine gültige Referenz auf eine verlorene Datei hinterlassen.
04Bericht und Export prüfen
Öffne report.pdf und prüfe den Inhalt. Das Beispiel schreibt nur in seinen aktuellen Arbeitsordner. In der Android-App bleiben Berichte zunächst privat. Der Nutzer entscheidet über Export oder Teilen. Ein geschriebener Bericht allein ist noch kein Beweis für vollständige Anhänge.
report.pdf enthält Family car, Service und 129.90 EUR.
Deine Übung
Ergänze Datum und Kilometerstand. Prüfe anschließend den PDF-Inhalt mit einem PDF-Textwerkzeug.
Lösung mit Erklärung anzeigen
Füge zwei weitere pw.Text-Widgets hinzu. Mit pdftotext report.pdf - kannst du den Text unabhängig vom Betrachter prüfen. Für Fotos und Seitenlayout sind zusätzlich visuelle oder semantische Prüfungen notwendig.
Projektbezug und Quellen
Das Beispiel ist zum Lernen vereinfacht. Die verlinkte Codeversion zeigt die Anwendung im Projekt und die dortigen Prüfungen.