Showing
8 changed files
with
85 additions
and
9 deletions
@@ -3,7 +3,7 @@ | @@ -3,7 +3,7 @@ | ||
3 | # | 3 | # |
4 | Pod::Spec.new do |s| | 4 | Pod::Spec.new do |s| |
5 | s.name = 'printing' | 5 | s.name = 'printing' |
6 | - s.version = '0.0.1' | 6 | + s.version = '1.0.0' |
7 | s.summary = 'Plugin that allows Flutter apps to generate and print documents to android or ios compatible printers' | 7 | s.summary = 'Plugin that allows Flutter apps to generate and print documents to android or ios compatible printers' |
8 | s.description = <<-DESC | 8 | s.description = <<-DESC |
9 | Plugin that allows Flutter apps to generate and print documents to android or ios compatible printers | 9 | Plugin that allows Flutter apps to generate and print documents to android or ios compatible printers |
@@ -23,6 +23,7 @@ import 'dart:js_util'; | @@ -23,6 +23,7 @@ import 'dart:js_util'; | ||
23 | import 'dart:typed_data'; | 23 | import 'dart:typed_data'; |
24 | import 'dart:ui'; | 24 | import 'dart:ui'; |
25 | 25 | ||
26 | +import 'package:flutter/foundation.dart'; | ||
26 | import 'package:flutter/rendering.dart' show Rect; | 27 | import 'package:flutter/rendering.dart' show Rect; |
27 | import 'package:flutter_web_plugins/flutter_web_plugins.dart'; | 28 | import 'package:flutter_web_plugins/flutter_web_plugins.dart'; |
28 | import 'package:image/image.dart' as im; | 29 | import 'package:image/image.dart' as im; |
@@ -65,7 +66,30 @@ class PrintingPlugin extends PrintingPlatform { | @@ -65,7 +66,30 @@ class PrintingPlugin extends PrintingPlatform { | ||
65 | PdfPageFormat format, | 66 | PdfPageFormat format, |
66 | bool dynamicLayout, | 67 | bool dynamicLayout, |
67 | ) async { | 68 | ) async { |
68 | - final result = await onLayout(format); | 69 | + late Uint8List result; |
70 | + try { | ||
71 | + result = await onLayout(format); | ||
72 | + } catch (e, s) { | ||
73 | + InformationCollector? collector; | ||
74 | + | ||
75 | + assert(() { | ||
76 | + collector = () sync* { | ||
77 | + yield StringProperty('PageFormat', format.toString()); | ||
78 | + }; | ||
79 | + return true; | ||
80 | + }()); | ||
81 | + | ||
82 | + FlutterError.reportError(FlutterErrorDetails( | ||
83 | + exception: e, | ||
84 | + stack: s, | ||
85 | + stackFilter: (input) => input, | ||
86 | + library: 'printing', | ||
87 | + context: ErrorDescription('while generating a PDF'), | ||
88 | + informationCollector: collector, | ||
89 | + )); | ||
90 | + | ||
91 | + rethrow; | ||
92 | + } | ||
69 | 93 | ||
70 | if (result.isEmpty) { | 94 | if (result.isEmpty) { |
71 | return false; | 95 | return false; |
@@ -29,7 +29,7 @@ import 'raster.dart'; | @@ -29,7 +29,7 @@ import 'raster.dart'; | ||
29 | 29 | ||
30 | /// The interface that implementations of printing must implement. | 30 | /// The interface that implementations of printing must implement. |
31 | abstract class PrintingPlatform extends PlatformInterface { | 31 | abstract class PrintingPlatform extends PlatformInterface { |
32 | - /// Constructs a UrlLauncherPlatform. | 32 | + /// Constructs a PrintingPlatform. |
33 | PrintingPlatform() : super(token: _token); | 33 | PrintingPlatform() : super(token: _token); |
34 | 34 | ||
35 | static final Object _token = Object(); | 35 | static final Object _token = Object(); |
@@ -17,6 +17,7 @@ | @@ -17,6 +17,7 @@ | ||
17 | import 'dart:async'; | 17 | import 'dart:async'; |
18 | import 'dart:typed_data'; | 18 | import 'dart:typed_data'; |
19 | 19 | ||
20 | +import 'package:flutter/foundation.dart'; | ||
20 | import 'package:flutter/rendering.dart' show Rect; | 21 | import 'package:flutter/rendering.dart' show Rect; |
21 | import 'package:flutter/services.dart'; | 22 | import 'package:flutter/services.dart'; |
22 | import 'package:pdf/pdf.dart'; | 23 | import 'package:pdf/pdf.dart'; |
@@ -60,7 +61,25 @@ class MethodChannelPrinting extends PrintingPlatform { | @@ -60,7 +61,25 @@ class MethodChannelPrinting extends PrintingPlatform { | ||
60 | Uint8List bytes; | 61 | Uint8List bytes; |
61 | try { | 62 | try { |
62 | bytes = await job.onLayout!(format); | 63 | bytes = await job.onLayout!(format); |
63 | - } catch (e) { | 64 | + } catch (e, s) { |
65 | + InformationCollector? collector; | ||
66 | + | ||
67 | + assert(() { | ||
68 | + collector = () sync* { | ||
69 | + yield StringProperty('PageFormat', format.toString()); | ||
70 | + }; | ||
71 | + return true; | ||
72 | + }()); | ||
73 | + | ||
74 | + FlutterError.reportError(FlutterErrorDetails( | ||
75 | + exception: e, | ||
76 | + stack: s, | ||
77 | + stackFilter: (input) => input, | ||
78 | + library: 'printing', | ||
79 | + context: ErrorDescription('while generating a PDF'), | ||
80 | + informationCollector: collector, | ||
81 | + )); | ||
82 | + | ||
64 | if (job.useFFI) { | 83 | if (job.useFFI) { |
65 | return setErrorFfi(job, e.toString()); | 84 | return setErrorFfi(job, e.toString()); |
66 | } | 85 | } |
@@ -2,6 +2,7 @@ import 'dart:async'; | @@ -2,6 +2,7 @@ import 'dart:async'; | ||
2 | import 'dart:math'; | 2 | import 'dart:math'; |
3 | import 'dart:typed_data'; | 3 | import 'dart:typed_data'; |
4 | 4 | ||
5 | +import 'package:flutter/foundation.dart'; | ||
5 | import 'package:flutter/material.dart'; | 6 | import 'package:flutter/material.dart'; |
6 | import 'package:pdf/pdf.dart'; | 7 | import 'package:pdf/pdf.dart'; |
7 | import 'package:pdf/widgets.dart' as pw; | 8 | import 'package:pdf/widgets.dart' as pw; |
@@ -140,13 +141,42 @@ class _PdfPreviewState extends State<PdfPreview> { | @@ -140,13 +141,42 @@ class _PdfPreviewState extends State<PdfPreview> { | ||
140 | Uint8List _doc; | 141 | Uint8List _doc; |
141 | 142 | ||
142 | if (!info.canRaster) { | 143 | if (!info.canRaster) { |
144 | + assert(() { | ||
145 | + if (kIsWeb) { | ||
146 | + FlutterError.reportError(FlutterErrorDetails( | ||
147 | + exception: Exception( | ||
148 | + 'Unable to find the `pdf.js` library.\nPlease follow the installation instructions at https://github.com/DavBfr/dart_pdf/tree/master/printing#installing'), | ||
149 | + library: 'printing', | ||
150 | + context: ErrorDescription('while rendering a PDF'), | ||
151 | + )); | ||
152 | + } | ||
153 | + | ||
154 | + return true; | ||
155 | + }()); | ||
156 | + | ||
143 | return; | 157 | return; |
144 | } | 158 | } |
145 | 159 | ||
146 | try { | 160 | try { |
147 | _doc = await widget.build(computedPageFormat); | 161 | _doc = await widget.build(computedPageFormat); |
148 | - } catch (e) { | ||
149 | - error = e; | 162 | + } catch (exception, stack) { |
163 | + InformationCollector? collector; | ||
164 | + | ||
165 | + assert(() { | ||
166 | + collector = () sync* { | ||
167 | + yield StringProperty('PageFormat', computedPageFormat.toString()); | ||
168 | + }; | ||
169 | + return true; | ||
170 | + }()); | ||
171 | + | ||
172 | + FlutterError.reportError(FlutterErrorDetails( | ||
173 | + exception: exception, | ||
174 | + stack: stack, | ||
175 | + library: 'printing', | ||
176 | + context: ErrorDescription('while generating a PDF'), | ||
177 | + informationCollector: collector, | ||
178 | + )); | ||
179 | + error = exception; | ||
150 | return; | 180 | return; |
151 | } | 181 | } |
152 | 182 | ||
@@ -270,7 +300,6 @@ class _PdfPreviewState extends State<PdfPreview> { | @@ -270,7 +300,6 @@ class _PdfPreviewState extends State<PdfPreview> { | ||
270 | if (error != null) { | 300 | if (error != null) { |
271 | var content = _showError(); | 301 | var content = _showError(); |
272 | assert(() { | 302 | assert(() { |
273 | - print(error); | ||
274 | content = ErrorWidget(error!); | 303 | content = ErrorWidget(error!); |
275 | return true; | 304 | return true; |
276 | }()); | 305 | }()); |
@@ -3,7 +3,7 @@ | @@ -3,7 +3,7 @@ | ||
3 | # | 3 | # |
4 | Pod::Spec.new do |s| | 4 | Pod::Spec.new do |s| |
5 | s.name = 'printing' | 5 | s.name = 'printing' |
6 | - s.version = '0.0.1' | 6 | + s.version = '1.0.0' |
7 | s.summary = 'Plugin that allows Flutter apps to generate and print documents to android or ios compatible printers' | 7 | s.summary = 'Plugin that allows Flutter apps to generate and print documents to android or ios compatible printers' |
8 | s.description = <<-DESC | 8 | s.description = <<-DESC |
9 | Plugin that allows Flutter apps to generate and print documents to android or ios compatible printers | 9 | Plugin that allows Flutter apps to generate and print documents to android or ios compatible printers |
@@ -7,7 +7,7 @@ description: > | @@ -7,7 +7,7 @@ description: > | ||
7 | homepage: https://github.com/DavBfr/dart_pdf/tree/master/printing | 7 | homepage: https://github.com/DavBfr/dart_pdf/tree/master/printing |
8 | repository: https://github.com/DavBfr/dart_pdf | 8 | repository: https://github.com/DavBfr/dart_pdf |
9 | issue_tracker: https://github.com/DavBfr/dart_pdf/issues | 9 | issue_tracker: https://github.com/DavBfr/dart_pdf/issues |
10 | -version: 5.0.3 | 10 | +version: 5.0.4 |
11 | 11 | ||
12 | environment: | 12 | environment: |
13 | sdk: ">=2.12.0-0 <3.0.0" | 13 | sdk: ">=2.12.0-0 <3.0.0" |
-
Please register or login to post a comment