Showing
6 changed files
with
26 additions
and
64 deletions
@@ -59,9 +59,11 @@ class PrintingPlugin extends PrintingPlatform { | @@ -59,9 +59,11 @@ class PrintingPlugin extends PrintingPlatform { | ||
59 | 59 | ||
60 | @override | 60 | @override |
61 | Future<bool> layoutPdf( | 61 | Future<bool> layoutPdf( |
62 | + Printer? printer, | ||
62 | LayoutCallback onLayout, | 63 | LayoutCallback onLayout, |
63 | String name, | 64 | String name, |
64 | PdfPageFormat format, | 65 | PdfPageFormat format, |
66 | + bool dynamicLayout, | ||
65 | ) async { | 67 | ) async { |
66 | final result = await onLayout(format); | 68 | final result = await onLayout(format); |
67 | 69 | ||
@@ -158,16 +160,6 @@ class PrintingPlugin extends PrintingPlatform { | @@ -158,16 +160,6 @@ class PrintingPlugin extends PrintingPlatform { | ||
158 | } | 160 | } |
159 | 161 | ||
160 | @override | 162 | @override |
161 | - Future<bool> directPrintPdf( | ||
162 | - Printer printer, | ||
163 | - LayoutCallback onLayout, | ||
164 | - String name, | ||
165 | - PdfPageFormat format, | ||
166 | - ) { | ||
167 | - return layoutPdf(onLayout, name, format); | ||
168 | - } | ||
169 | - | ||
170 | - @override | ||
171 | Future<List<Printer>> listPrinters() { | 163 | Future<List<Printer>> listPrinters() { |
172 | throw UnimplementedError(); | 164 | throw UnimplementedError(); |
173 | } | 165 | } |
@@ -60,6 +60,7 @@ abstract class PrintingPlatform extends PlatformInterface { | @@ -60,6 +60,7 @@ abstract class PrintingPlatform extends PlatformInterface { | ||
60 | /// and false if it is canceled. | 60 | /// and false if it is canceled. |
61 | /// throws an exception in case of error | 61 | /// throws an exception in case of error |
62 | Future<bool> layoutPdf( | 62 | Future<bool> layoutPdf( |
63 | + Printer? printer, | ||
63 | LayoutCallback onLayout, | 64 | LayoutCallback onLayout, |
64 | String name, | 65 | String name, |
65 | PdfPageFormat format, | 66 | PdfPageFormat format, |
@@ -71,18 +72,6 @@ abstract class PrintingPlatform extends PlatformInterface { | @@ -71,18 +72,6 @@ abstract class PrintingPlatform extends PlatformInterface { | ||
71 | /// Opens the native printer picker interface, and returns the URL of the selected printer. | 72 | /// Opens the native printer picker interface, and returns the URL of the selected printer. |
72 | Future<Printer?> pickPrinter(Rect bounds); | 73 | Future<Printer?> pickPrinter(Rect bounds); |
73 | 74 | ||
74 | - /// Prints a Pdf document to a specific local printer with no UI | ||
75 | - /// | ||
76 | - /// returns a future with a `bool` set to true if the document is printed | ||
77 | - /// and false if it is canceled. | ||
78 | - /// throws an exception in case of error | ||
79 | - Future<bool> directPrintPdf( | ||
80 | - Printer printer, | ||
81 | - LayoutCallback onLayout, | ||
82 | - String name, | ||
83 | - PdfPageFormat format, | ||
84 | - ); | ||
85 | - | ||
86 | /// Displays a platform popup to share the Pdf document to another application | 75 | /// Displays a platform popup to share the Pdf document to another application |
87 | Future<bool> sharePdf( | 76 | Future<bool> sharePdf( |
88 | Uint8List bytes, | 77 | Uint8List bytes, |
@@ -15,7 +15,6 @@ | @@ -15,7 +15,6 @@ | ||
15 | */ | 15 | */ |
16 | 16 | ||
17 | import 'dart:async'; | 17 | import 'dart:async'; |
18 | -import 'dart:io'; | ||
19 | import 'dart:typed_data'; | 18 | import 'dart:typed_data'; |
20 | 19 | ||
21 | import 'package:flutter/rendering.dart' show Rect; | 20 | import 'package:flutter/rendering.dart' show Rect; |
@@ -62,14 +61,14 @@ class MethodChannelPrinting extends PrintingPlatform { | @@ -62,14 +61,14 @@ class MethodChannelPrinting extends PrintingPlatform { | ||
62 | try { | 61 | try { |
63 | bytes = await job.onLayout!(format); | 62 | bytes = await job.onLayout!(format); |
64 | } catch (e) { | 63 | } catch (e) { |
65 | - if (Platform.isMacOS || Platform.isIOS) { | 64 | + if (job.useFFI) { |
66 | return setErrorFfi(job, e.toString()); | 65 | return setErrorFfi(job, e.toString()); |
67 | } | 66 | } |
68 | 67 | ||
69 | rethrow; | 68 | rethrow; |
70 | } | 69 | } |
71 | 70 | ||
72 | - if (Platform.isMacOS || Platform.isIOS) { | 71 | + if (job.useFFI) { |
73 | return setDocumentFfi(job, bytes); | 72 | return setDocumentFfi(job, bytes); |
74 | } | 73 | } |
75 | 74 | ||
@@ -139,6 +138,7 @@ class MethodChannelPrinting extends PrintingPlatform { | @@ -139,6 +138,7 @@ class MethodChannelPrinting extends PrintingPlatform { | ||
139 | 138 | ||
140 | @override | 139 | @override |
141 | Future<bool> layoutPdf( | 140 | Future<bool> layoutPdf( |
141 | + Printer? printer, | ||
142 | LayoutCallback onLayout, | 142 | LayoutCallback onLayout, |
143 | String name, | 143 | String name, |
144 | PdfPageFormat format, | 144 | PdfPageFormat format, |
@@ -149,6 +149,7 @@ class MethodChannelPrinting extends PrintingPlatform { | @@ -149,6 +149,7 @@ class MethodChannelPrinting extends PrintingPlatform { | ||
149 | ); | 149 | ); |
150 | 150 | ||
151 | final params = <String, dynamic>{ | 151 | final params = <String, dynamic>{ |
152 | + if (printer != null) 'printer': printer.url, | ||
152 | 'name': name, | 153 | 'name': name, |
153 | 'job': job.index, | 154 | 'job': job.index, |
154 | 'width': format.width, | 155 | 'width': format.width, |
@@ -199,37 +200,6 @@ class MethodChannelPrinting extends PrintingPlatform { | @@ -199,37 +200,6 @@ class MethodChannelPrinting extends PrintingPlatform { | ||
199 | } | 200 | } |
200 | 201 | ||
201 | @override | 202 | @override |
202 | - Future<bool> directPrintPdf( | ||
203 | - Printer printer, | ||
204 | - LayoutCallback onLayout, | ||
205 | - String name, | ||
206 | - PdfPageFormat format, | ||
207 | - ) async { | ||
208 | - final job = _printJobs.add( | ||
209 | - onCompleted: Completer<bool>(), | ||
210 | - onLayout: onLayout, | ||
211 | - ); | ||
212 | - | ||
213 | - final params = <String, dynamic>{ | ||
214 | - 'name': name, | ||
215 | - 'printer': printer.url, | ||
216 | - 'width': format.width, | ||
217 | - 'height': format.height, | ||
218 | - 'marginLeft': format.marginLeft, | ||
219 | - 'marginTop': format.marginTop, | ||
220 | - 'marginRight': format.marginRight, | ||
221 | - 'marginBottom': format.marginBottom, | ||
222 | - 'job': job.index, | ||
223 | - }; | ||
224 | - await _channel.invokeMethod<int>('printPdf', params); | ||
225 | - try { | ||
226 | - return await job.onCompleted!.future; | ||
227 | - } finally { | ||
228 | - _printJobs.remove(job.index); | ||
229 | - } | ||
230 | - } | ||
231 | - | ||
232 | - @override | ||
233 | Future<bool> sharePdf( | 203 | Future<bool> sharePdf( |
234 | Uint8List bytes, | 204 | Uint8List bytes, |
235 | String filename, | 205 | String filename, |
@@ -15,6 +15,7 @@ | @@ -15,6 +15,7 @@ | ||
15 | */ | 15 | */ |
16 | 16 | ||
17 | import 'dart:async'; | 17 | import 'dart:async'; |
18 | +import 'dart:io'; | ||
18 | import 'dart:typed_data'; | 19 | import 'dart:typed_data'; |
19 | 20 | ||
20 | import 'callback.dart'; | 21 | import 'callback.dart'; |
@@ -29,6 +30,7 @@ class PrintJob { | @@ -29,6 +30,7 @@ class PrintJob { | ||
29 | this.onHtmlRendered, | 30 | this.onHtmlRendered, |
30 | this.onCompleted, | 31 | this.onCompleted, |
31 | this.onPageRasterized, | 32 | this.onPageRasterized, |
33 | + required this.useFFI, | ||
32 | }); | 34 | }); |
33 | 35 | ||
34 | /// Callback used when calling Printing.layoutPdf() | 36 | /// Callback used when calling Printing.layoutPdf() |
@@ -45,6 +47,9 @@ class PrintJob { | @@ -45,6 +47,9 @@ class PrintJob { | ||
45 | 47 | ||
46 | /// The Job number | 48 | /// The Job number |
47 | final int index; | 49 | final int index; |
50 | + | ||
51 | + /// Use the FFI side-channel to send the PDF data | ||
52 | + final bool useFFI; | ||
48 | } | 53 | } |
49 | 54 | ||
50 | /// Represents a list of print jobs | 55 | /// Represents a list of print jobs |
@@ -69,6 +74,7 @@ class PrintJobs { | @@ -69,6 +74,7 @@ class PrintJobs { | ||
69 | onHtmlRendered: onHtmlRendered, | 74 | onHtmlRendered: onHtmlRendered, |
70 | onCompleted: onCompleted, | 75 | onCompleted: onCompleted, |
71 | onPageRasterized: onPageRasterized, | 76 | onPageRasterized: onPageRasterized, |
77 | + useFFI: Platform.isMacOS || Platform.isIOS, | ||
72 | ); | 78 | ); |
73 | _printJobs[job.index] = job; | 79 | _printJobs[job.index] = job; |
74 | return job; | 80 | return job; |
@@ -41,7 +41,12 @@ mixin Printing { | @@ -41,7 +41,12 @@ mixin Printing { | ||
41 | String name = 'Document', | 41 | String name = 'Document', |
42 | PdfPageFormat format = PdfPageFormat.standard, | 42 | PdfPageFormat format = PdfPageFormat.standard, |
43 | }) { | 43 | }) { |
44 | - return PrintingPlatform.instance.layoutPdf(onLayout, name, format); | 44 | + return PrintingPlatform.instance.layoutPdf( |
45 | + null, | ||
46 | + onLayout, | ||
47 | + name, | ||
48 | + format, | ||
49 | + ); | ||
45 | } | 50 | } |
46 | 51 | ||
47 | /// Enumerate the available printers on the system. | 52 | /// Enumerate the available printers on the system. |
@@ -118,7 +123,7 @@ mixin Printing { | @@ -118,7 +123,7 @@ mixin Printing { | ||
118 | String name = 'Document', | 123 | String name = 'Document', |
119 | PdfPageFormat format = PdfPageFormat.standard, | 124 | PdfPageFormat format = PdfPageFormat.standard, |
120 | }) { | 125 | }) { |
121 | - return PrintingPlatform.instance.directPrintPdf( | 126 | + return PrintingPlatform.instance.layoutPdf( |
122 | printer, | 127 | printer, |
123 | onLayout, | 128 | onLayout, |
124 | name, | 129 | name, |
@@ -108,7 +108,12 @@ class MockPrinting extends Mock | @@ -108,7 +108,12 @@ class MockPrinting extends Mock | ||
108 | Future<PrintingInfo> info() async => const PrintingInfo(); | 108 | Future<PrintingInfo> info() async => const PrintingInfo(); |
109 | 109 | ||
110 | @override | 110 | @override |
111 | - Future<bool> layoutPdf(onLayout, String name, PdfPageFormat format) async => | 111 | + Future<bool> layoutPdf( |
112 | + Printer? printer, | ||
113 | + LayoutCallback onLayout, | ||
114 | + String name, | ||
115 | + PdfPageFormat format, | ||
116 | + ) async => | ||
112 | true; | 117 | true; |
113 | 118 | ||
114 | @override | 119 | @override |
@@ -119,11 +124,6 @@ class MockPrinting extends Mock | @@ -119,11 +124,6 @@ class MockPrinting extends Mock | ||
119 | Future<Printer?> pickPrinter(Rect bounds) async => null; | 124 | Future<Printer?> pickPrinter(Rect bounds) async => null; |
120 | 125 | ||
121 | @override | 126 | @override |
122 | - Future<bool> directPrintPdf( | ||
123 | - Printer printer, onLayout, String name, PdfPageFormat format) async => | ||
124 | - true; | ||
125 | - | ||
126 | - @override | ||
127 | Stream<PdfRaster> raster( | 127 | Stream<PdfRaster> raster( |
128 | Uint8List document, List<int>? pages, double dpi) async* {} | 128 | Uint8List document, List<int>? pages, double dpi) async* {} |
129 | 129 |
-
Please register or login to post a comment