This commit is contained in:
2025-10-11 11:30:12 +02:00
parent f679ea672b
commit 54736fa680
612 changed files with 25819 additions and 582 deletions
+3
View File
@@ -0,0 +1,3 @@
export 'pdf_platform_stub.dart'
if (dart.library.html) 'pdf_platform_web.dart'
if (dart.library.io) 'pdf_platform_io.dart';
+26
View File
@@ -0,0 +1,26 @@
import 'dart:typed_data';
import 'dart:io';
import 'package:flutter/material.dart';
import 'package:file_picker/file_picker.dart';
import 'package:open_filex/open_filex.dart';
import 'package:path_provider/path_provider.dart';
Future<void> platformViewPdf(BuildContext context, Uint8List bytes, {required String filename}) async {
final dir = await getTemporaryDirectory();
final f = File('${dir.path}/$filename');
await f.writeAsBytes(bytes);
await OpenFilex.open(f.path);
}
Future<void> platformDownloadPdf(Uint8List bytes, {required String filename}) async {
final savePath = await FilePicker.platform.saveFile(
dialogTitle: 'PDF speichern als',
fileName: filename,
type: FileType.custom,
allowedExtensions: ['pdf'],
lockParentWindow: true,
);
if (savePath == null) return;
final f = File(savePath);
await f.writeAsBytes(bytes);
}
+5
View File
@@ -0,0 +1,5 @@
import 'dart:typed_data';
import 'package:flutter/widgets.dart';
Future<void> platformViewPdf(BuildContext context, Uint8List bytes, {required String filename}) async {}
Future<void> platformDownloadPdf(Uint8List bytes, {required String filename}) async {}
+48
View File
@@ -0,0 +1,48 @@
import 'dart:typed_data';
import 'dart:ui' as ui;
import 'package:flutter/material.dart';
// ignore: avoid_web_libraries_in_flutter
import 'dart:html' as html;
Future<void> platformViewPdf(BuildContext context, Uint8List bytes, {required String filename}) async {
final blob = html.Blob([bytes], 'application/pdf');
final url = html.Url.createObjectUrlFromBlob(blob);
final viewType = 'pdf-view-${DateTime.now().microsecondsSinceEpoch}';
final iframe = html.IFrameElement()
..src = url
..style.border = '0'
..style.width = '100%'
..style.height = '100%';
// ignore: undefined_prefixed_name
ui.platformViewRegistry.registerViewFactory(viewType, (int _) => iframe);
await showDialog<void>(
context: context,
builder: (ctx) => Dialog(
insetPadding: const EdgeInsets.all(16),
child: SizedBox(
width: 1000, height: 700,
child: Stack(children: [
HtmlElementView(viewType: viewType),
Positioned(
right: 8, top: 8,
child: IconButton(
tooltip: 'In neuem Tab öffnen',
icon: const Icon(Icons.open_in_new),
onPressed: () => html.window.open(url, '_blank'),
),
),
]),
),
),
);
html.Url.revokeObjectUrl(url);
}
Future<void> platformDownloadPdf(Uint8List bytes, {required String filename}) async {
final blob = html.Blob([bytes], 'application/pdf');
final url = html.Url.createObjectUrlFromBlob(blob);
final a = html.AnchorElement(href: url)..download = filename;
a.click();
html.Url.revokeObjectUrl(url);
}