Marco Papula
Committed by David PHAM-VAN

Create wrapWidget helper

# Changelog
## 3.3.0
- Add wrapWidget helper
## 3.2.1
- Add meta and image dependencies
... ...
import 'dart:async';
import 'dart:io';
import 'dart:typed_data';
import 'dart:ui' as ui;
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
... ... @@ -9,7 +7,6 @@ import 'package:flutter/rendering.dart';
import 'package:flutter/services.dart';
import 'package:markdown/markdown.dart' as markdown;
import 'package:path_provider/path_provider.dart';
import 'package:pdf/pdf.dart';
import 'package:pdf/widgets.dart' as pw;
import 'package:printing/printing.dart';
... ... @@ -156,21 +153,17 @@ class MyAppState extends State<MyApp> {
}
Future<void> _printScreen() async {
final RenderRepaintBoundary boundary =
previewContainer.currentContext.findRenderObject();
final ui.Image im = await boundary.toImage();
final ByteData bytes =
await im.toByteData(format: ui.ImageByteFormat.rawRgba);
print('Print Screen ${im.width}x${im.height} ...');
final bool result =
await Printing.layoutPdf(onLayout: (PdfPageFormat format) {
await Printing.layoutPdf(onLayout: (PdfPageFormat format) async {
final pw.Document document = pw.Document();
final PdfImage image = PdfImage(document.document,
image: bytes.buffer.asUint8List(),
width: im.width,
height: im.height);
final PdfImage image = await wrapWidget(
document.document,
key: previewContainer,
pixelRatio: 2.0,
);
print('Print Screen ${image.width}x${image.height}...');
document.addPage(pw.Page(
pageFormat: format,
... ...
... ... @@ -20,3 +20,4 @@ export 'src/printer.dart';
export 'src/printing.dart';
export 'src/printing_info.dart';
export 'src/raster.dart';
export 'src/widget_wrapper.dart';
... ...
/*
* Copyright (C) 2017, David PHAM-VAN <dev.nfet.net@gmail.com>
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import 'dart:async';
import 'dart:typed_data';
import 'dart:ui' as ui;
import 'package:flutter/material.dart';
import 'package:flutter/rendering.dart';
import 'package:pdf/pdf.dart';
/// Wrap a Flutter Widget identified by a GlobalKey to a PdfImage.
Future<PdfImage> wrapWidget(
PdfDocument document, {
@required GlobalKey key,
int width,
int height,
double pixelRatio = 1.0,
}) async {
assert(key != null);
assert(pixelRatio != null && pixelRatio > 0);
final RenderRepaintBoundary wrappedWidget =
key.currentContext.findRenderObject();
ui.Image image = await wrappedWidget.toImage(pixelRatio: pixelRatio);
image = await _resize(image, width, height);
final ByteData byteData =
await image.toByteData(format: ui.ImageByteFormat.rawRgba);
final Uint8List imageData = byteData.buffer.asUint8List();
return PdfImage(document,
image: imageData, width: image.width, height: image.height);
}
Future<ui.Image> _resize(
ui.Image image,
int width,
int height,
) async {
if (width == null && height == null) {
return image;
}
width ??= (height / image.height * image.width).toInt();
height ??= (width / image.width * image.height).toInt();
final Completer<ui.Image> ptr = Completer<ui.Image>();
final Uint8List data =
(await image.toByteData(format: ui.ImageByteFormat.rawRgba))
.buffer
.asUint8List();
ui.decodeImageFromPixels(
data,
image.width,
image.height,
ui.PixelFormat.rgba8888,
(ui.Image result) {
ptr.complete(result);
},
targetWidth: width,
targetHeight: height,
);
return ptr.future;
}
... ...
... ... @@ -4,7 +4,7 @@ description: Plugin that allows Flutter apps to generate and print documents to
homepage: https://github.com/DavBfr/dart_pdf/tree/master/printing
repository: https://github.com/DavBfr/dart_pdf
issue_tracker: https://github.com/DavBfr/dart_pdf/issues
version: 3.2.1
version: 3.3.0
environment:
sdk: ">=2.3.0 <3.0.0"
... ...