This commit is contained in:
@@ -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';
|
||||
@@ -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);
|
||||
}
|
||||
@@ -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 {}
|
||||
@@ -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);
|
||||
}
|
||||
Reference in New Issue
Block a user