Showing
9 changed files
with
111 additions
and
7 deletions
@@ -27,8 +27,10 @@ public class PrintJob: UIPrintPageRenderer, UIPrintInteractionControllerDelegate | @@ -27,8 +27,10 @@ public class PrintJob: UIPrintPageRenderer, UIPrintInteractionControllerDelegate | ||
27 | private var pdfDocument: CGPDFDocument? | 27 | private var pdfDocument: CGPDFDocument? |
28 | private var urlObservation: NSKeyValueObservation? | 28 | private var urlObservation: NSKeyValueObservation? |
29 | private var jobName: String? | 29 | private var jobName: String? |
30 | + private var printerName: String? | ||
30 | private var orientation: UIPrintInfo.Orientation? | 31 | private var orientation: UIPrintInfo.Orientation? |
31 | private let semaphore = DispatchSemaphore(value: 0) | 32 | private let semaphore = DispatchSemaphore(value: 0) |
33 | + private var dynamic = false | ||
32 | 34 | ||
33 | public init(printing: PrintingPlugin, index: Int) { | 35 | public init(printing: PrintingPlugin, index: Int) { |
34 | self.printing = printing | 36 | self.printing = printing |
@@ -47,9 +49,13 @@ public class PrintJob: UIPrintPageRenderer, UIPrintInteractionControllerDelegate | @@ -47,9 +49,13 @@ public class PrintJob: UIPrintPageRenderer, UIPrintInteractionControllerDelegate | ||
47 | } | 49 | } |
48 | } | 50 | } |
49 | 51 | ||
50 | - func cancelJob(_: String?) { | 52 | + func cancelJob(_ error: String?) { |
51 | pdfDocument = nil | 53 | pdfDocument = nil |
54 | + if dynamic { | ||
52 | semaphore.signal() | 55 | semaphore.signal() |
56 | + } else { | ||
57 | + printing.onCompleted(printJob: self, completed: false, error: error as NSString?) | ||
58 | + } | ||
53 | } | 59 | } |
54 | 60 | ||
55 | func setDocument(_ data: Data?) { | 61 | func setDocument(_ data: Data?) { |
@@ -58,11 +64,44 @@ public class PrintJob: UIPrintPageRenderer, UIPrintInteractionControllerDelegate | @@ -58,11 +64,44 @@ public class PrintJob: UIPrintPageRenderer, UIPrintInteractionControllerDelegate | ||
58 | let dataProvider = CGDataProvider(dataInfo: nil, data: bytesPointer, size: data?.count ?? 0, releaseData: dataProviderReleaseDataCallback) | 64 | let dataProvider = CGDataProvider(dataInfo: nil, data: bytesPointer, size: data?.count ?? 0, releaseData: dataProviderReleaseDataCallback) |
59 | pdfDocument = CGPDFDocument(dataProvider!) | 65 | pdfDocument = CGPDFDocument(dataProvider!) |
60 | 66 | ||
67 | + if dynamic { | ||
61 | // Unblock the main thread | 68 | // Unblock the main thread |
62 | semaphore.signal() | 69 | semaphore.signal() |
70 | + return | ||
71 | + } | ||
72 | + | ||
73 | + let controller = UIPrintInteractionController.shared | ||
74 | + controller.delegate = self | ||
75 | + | ||
76 | + let printInfo = UIPrintInfo.printInfo() | ||
77 | + printInfo.jobName = jobName! | ||
78 | + printInfo.outputType = .general | ||
79 | + if orientation != nil { | ||
80 | + printInfo.orientation = orientation! | ||
81 | + orientation = nil | ||
82 | + } | ||
83 | + controller.printInfo = printInfo | ||
84 | + controller.printPageRenderer = self | ||
85 | + | ||
86 | + DispatchQueue.main.async { | ||
87 | + if self.printerName != nil { | ||
88 | + let printerURL = URL(string: self.printerName!) | ||
89 | + | ||
90 | + if printerURL == nil { | ||
91 | + self.printing.onCompleted(printJob: self, completed: false, error: "Unable to find printer URL") | ||
92 | + return | ||
93 | + } | ||
94 | + | ||
95 | + let printer = UIPrinter(url: printerURL!) | ||
96 | + controller.print(to: printer, completionHandler: self.completionHandler) | ||
97 | + } else { | ||
98 | + controller.present(animated: true, completionHandler: self.completionHandler) | ||
99 | + } | ||
100 | + } | ||
63 | } | 101 | } |
64 | 102 | ||
65 | override public var numberOfPages: Int { | 103 | override public var numberOfPages: Int { |
104 | + if dynamic { | ||
66 | printing.onLayout( | 105 | printing.onLayout( |
67 | printJob: self, | 106 | printJob: self, |
68 | width: paperRect.size.width, | 107 | width: paperRect.size.width, |
@@ -75,6 +114,7 @@ public class PrintJob: UIPrintPageRenderer, UIPrintInteractionControllerDelegate | @@ -75,6 +114,7 @@ public class PrintJob: UIPrintPageRenderer, UIPrintInteractionControllerDelegate | ||
75 | 114 | ||
76 | // Block the main thread, waiting for a document | 115 | // Block the main thread, waiting for a document |
77 | semaphore.wait() | 116 | semaphore.wait() |
117 | + } | ||
78 | 118 | ||
79 | return pdfDocument?.numberOfPages ?? 0 | 119 | return pdfDocument?.numberOfPages ?? 0 |
80 | } | 120 | } |
@@ -87,7 +127,8 @@ public class PrintJob: UIPrintPageRenderer, UIPrintInteractionControllerDelegate | @@ -87,7 +127,8 @@ public class PrintJob: UIPrintPageRenderer, UIPrintInteractionControllerDelegate | ||
87 | printing.onCompleted(printJob: self, completed: completed, error: error?.localizedDescription as NSString?) | 127 | printing.onCompleted(printJob: self, completed: completed, error: error?.localizedDescription as NSString?) |
88 | } | 128 | } |
89 | 129 | ||
90 | - func printPdf(name: String, withPageSize size: CGSize, andMargin _: CGRect, withPrinter printerID: String?) { | 130 | + func printPdf(name: String, withPageSize size: CGSize, andMargin margin: CGRect, withPrinter printerID: String?, dynamically dyn: Bool) { |
131 | + dynamic = dyn | ||
91 | let printing = UIPrintInteractionController.isPrintingAvailable | 132 | let printing = UIPrintInteractionController.isPrintingAvailable |
92 | if !printing { | 133 | if !printing { |
93 | self.printing.onCompleted(printJob: self, completed: false, error: "Printing not available") | 134 | self.printing.onCompleted(printJob: self, completed: false, error: "Printing not available") |
@@ -99,6 +140,7 @@ public class PrintJob: UIPrintPageRenderer, UIPrintInteractionControllerDelegate | @@ -99,6 +140,7 @@ public class PrintJob: UIPrintPageRenderer, UIPrintInteractionControllerDelegate | ||
99 | } | 140 | } |
100 | 141 | ||
101 | jobName = name | 142 | jobName = name |
143 | + printerName = printerID | ||
102 | 144 | ||
103 | let controller = UIPrintInteractionController.shared | 145 | let controller = UIPrintInteractionController.shared |
104 | controller.delegate = self | 146 | controller.delegate = self |
@@ -128,7 +170,20 @@ public class PrintJob: UIPrintPageRenderer, UIPrintInteractionControllerDelegate | @@ -128,7 +170,20 @@ public class PrintJob: UIPrintPageRenderer, UIPrintInteractionControllerDelegate | ||
128 | return | 170 | return |
129 | } | 171 | } |
130 | 172 | ||
173 | + if dynamic { | ||
131 | controller.present(animated: true, completionHandler: completionHandler) | 174 | controller.present(animated: true, completionHandler: completionHandler) |
175 | + return | ||
176 | + } | ||
177 | + | ||
178 | + self.printing.onLayout( | ||
179 | + printJob: self, | ||
180 | + width: size.width, | ||
181 | + height: size.height, | ||
182 | + marginLeft: margin.minX, | ||
183 | + marginTop: margin.minY, | ||
184 | + marginRight: size.width - margin.maxX, | ||
185 | + marginBottom: size.height - margin.maxY | ||
186 | + ) | ||
132 | } | 187 | } |
133 | 188 | ||
134 | static func sharePdf(data: Data, withSourceRect rect: CGRect, andName name: String) { | 189 | static func sharePdf(data: Data, withSourceRect rect: CGRect, andName name: String) { |
@@ -59,6 +59,7 @@ public class PrintingPlugin: NSObject, FlutterPlugin { | @@ -59,6 +59,7 @@ public class PrintingPlugin: NSObject, FlutterPlugin { | ||
59 | let marginRight = CGFloat((args["marginRight"] as! NSNumber).floatValue) | 59 | let marginRight = CGFloat((args["marginRight"] as! NSNumber).floatValue) |
60 | let marginBottom = CGFloat((args["marginBottom"] as! NSNumber).floatValue) | 60 | let marginBottom = CGFloat((args["marginBottom"] as! NSNumber).floatValue) |
61 | let printJob = PrintJob(printing: self, index: args["job"] as! Int) | 61 | let printJob = PrintJob(printing: self, index: args["job"] as! Int) |
62 | + let dynamic = args["dynamic"] as! Bool | ||
62 | jobs[args["job"] as! UInt32] = printJob | 63 | jobs[args["job"] as! UInt32] = printJob |
63 | printJob.printPdf(name: name, | 64 | printJob.printPdf(name: name, |
64 | withPageSize: CGSize( | 65 | withPageSize: CGSize( |
@@ -70,7 +71,8 @@ public class PrintingPlugin: NSObject, FlutterPlugin { | @@ -70,7 +71,8 @@ public class PrintingPlugin: NSObject, FlutterPlugin { | ||
70 | y: marginTop, | 71 | y: marginTop, |
71 | width: width - marginRight - marginLeft, | 72 | width: width - marginRight - marginLeft, |
72 | height: height - marginBottom - marginTop | 73 | height: height - marginBottom - marginTop |
73 | - ), withPrinter: printer) | 74 | + ), withPrinter: printer, |
75 | + dynamically: dynamic) | ||
74 | result(NSNumber(value: 1)) | 76 | result(NSNumber(value: 1)) |
75 | } else if call.method == "sharePdf" { | 77 | } else if call.method == "sharePdf" { |
76 | let object = args["doc"] as! FlutterStandardTypedData | 78 | let object = args["doc"] as! FlutterStandardTypedData |
@@ -64,6 +64,7 @@ abstract class PrintingPlatform extends PlatformInterface { | @@ -64,6 +64,7 @@ abstract class PrintingPlatform extends PlatformInterface { | ||
64 | LayoutCallback onLayout, | 64 | LayoutCallback onLayout, |
65 | String name, | 65 | String name, |
66 | PdfPageFormat format, | 66 | PdfPageFormat format, |
67 | + bool dynamicLayout, | ||
67 | ); | 68 | ); |
68 | 69 | ||
69 | /// Enumerate the available printers on the system. | 70 | /// Enumerate the available printers on the system. |
@@ -142,6 +142,7 @@ class MethodChannelPrinting extends PrintingPlatform { | @@ -142,6 +142,7 @@ class MethodChannelPrinting extends PrintingPlatform { | ||
142 | LayoutCallback onLayout, | 142 | LayoutCallback onLayout, |
143 | String name, | 143 | String name, |
144 | PdfPageFormat format, | 144 | PdfPageFormat format, |
145 | + bool dynamicLayout, | ||
145 | ) async { | 146 | ) async { |
146 | final job = _printJobs.add( | 147 | final job = _printJobs.add( |
147 | onCompleted: Completer<bool>(), | 148 | onCompleted: Completer<bool>(), |
@@ -158,6 +159,7 @@ class MethodChannelPrinting extends PrintingPlatform { | @@ -158,6 +159,7 @@ class MethodChannelPrinting extends PrintingPlatform { | ||
158 | 'marginTop': format.marginTop, | 159 | 'marginTop': format.marginTop, |
159 | 'marginRight': format.marginRight, | 160 | 'marginRight': format.marginRight, |
160 | 'marginBottom': format.marginBottom, | 161 | 'marginBottom': format.marginBottom, |
162 | + 'dynamic': dynamicLayout, | ||
161 | }; | 163 | }; |
162 | 164 | ||
163 | await _channel.invokeMethod<int>('printPdf', params); | 165 | await _channel.invokeMethod<int>('printPdf', params); |
@@ -34,6 +34,7 @@ class PdfPreview extends StatefulWidget { | @@ -34,6 +34,7 @@ class PdfPreview extends StatefulWidget { | ||
34 | this.pdfFileName, | 34 | this.pdfFileName, |
35 | this.useActions = true, | 35 | this.useActions = true, |
36 | this.pages, | 36 | this.pages, |
37 | + this.dynamicLayout = true, | ||
37 | }) : super(key: key); | 38 | }) : super(key: key); |
38 | 39 | ||
39 | /// Called when a pdf document is needed | 40 | /// Called when a pdf document is needed |
@@ -90,6 +91,11 @@ class PdfPreview extends StatefulWidget { | @@ -90,6 +91,11 @@ class PdfPreview extends StatefulWidget { | ||
90 | /// Pages to display. Default will display all the pages. | 91 | /// Pages to display. Default will display all the pages. |
91 | final List<int>? pages; | 92 | final List<int>? pages; |
92 | 93 | ||
94 | + /// Request page re-layout to match the printer paper and margins. | ||
95 | + /// Mitigate an issue with iOS and macOS print dialog that prevent any | ||
96 | + /// channel message while opened. | ||
97 | + final bool dynamicLayout; | ||
98 | + | ||
93 | @override | 99 | @override |
94 | _PdfPreviewState createState() => _PdfPreviewState(); | 100 | _PdfPreviewState createState() => _PdfPreviewState(); |
95 | } | 101 | } |
@@ -512,6 +518,7 @@ class _PdfPreviewState extends State<PdfPreview> { | @@ -512,6 +518,7 @@ class _PdfPreviewState extends State<PdfPreview> { | ||
512 | onLayout: widget.build, | 518 | onLayout: widget.build, |
513 | name: widget.pdfFileName ?? 'Document', | 519 | name: widget.pdfFileName ?? 'Document', |
514 | format: format, | 520 | format: format, |
521 | + dynamicLayout: widget.dynamicLayout, | ||
515 | ); | 522 | ); |
516 | 523 | ||
517 | if (result && widget.onPrinted != null) { | 524 | if (result && widget.onPrinted != null) { |
@@ -40,12 +40,14 @@ mixin Printing { | @@ -40,12 +40,14 @@ mixin Printing { | ||
40 | required LayoutCallback onLayout, | 40 | required LayoutCallback onLayout, |
41 | String name = 'Document', | 41 | String name = 'Document', |
42 | PdfPageFormat format = PdfPageFormat.standard, | 42 | PdfPageFormat format = PdfPageFormat.standard, |
43 | + bool dynamicLayout = true, | ||
43 | }) { | 44 | }) { |
44 | return PrintingPlatform.instance.layoutPdf( | 45 | return PrintingPlatform.instance.layoutPdf( |
45 | null, | 46 | null, |
46 | onLayout, | 47 | onLayout, |
47 | name, | 48 | name, |
48 | format, | 49 | format, |
50 | + dynamicLayout, | ||
49 | ); | 51 | ); |
50 | } | 52 | } |
51 | 53 | ||
@@ -122,12 +124,14 @@ mixin Printing { | @@ -122,12 +124,14 @@ mixin Printing { | ||
122 | required LayoutCallback onLayout, | 124 | required LayoutCallback onLayout, |
123 | String name = 'Document', | 125 | String name = 'Document', |
124 | PdfPageFormat format = PdfPageFormat.standard, | 126 | PdfPageFormat format = PdfPageFormat.standard, |
127 | + bool dynamicLayout = true, | ||
125 | }) { | 128 | }) { |
126 | return PrintingPlatform.instance.layoutPdf( | 129 | return PrintingPlatform.instance.layoutPdf( |
127 | printer, | 130 | printer, |
128 | onLayout, | 131 | onLayout, |
129 | name, | 132 | name, |
130 | format, | 133 | format, |
134 | + dynamicLayout, | ||
131 | ); | 135 | ); |
132 | } | 136 | } |
133 | 137 |
@@ -30,6 +30,7 @@ public class PrintJob: NSView, NSSharingServicePickerDelegate { | @@ -30,6 +30,7 @@ public class PrintJob: NSView, NSSharingServicePickerDelegate { | ||
30 | private var pdfDocument: CGPDFDocument? | 30 | private var pdfDocument: CGPDFDocument? |
31 | private var page: CGPDFPage? | 31 | private var page: CGPDFPage? |
32 | private let semaphore = DispatchSemaphore(value: 0) | 32 | private let semaphore = DispatchSemaphore(value: 0) |
33 | + private var dynamic = false | ||
33 | 34 | ||
34 | public init(printing: PrintingPlugin, index: Int) { | 35 | public init(printing: PrintingPlugin, index: Int) { |
35 | self.printing = printing | 36 | self.printing = printing |
@@ -49,6 +50,7 @@ public class PrintJob: NSView, NSSharingServicePickerDelegate { | @@ -49,6 +50,7 @@ public class PrintJob: NSView, NSSharingServicePickerDelegate { | ||
49 | setFrameSize(size) | 50 | setFrameSize(size) |
50 | setBoundsSize(size) | 51 | setBoundsSize(size) |
51 | 52 | ||
53 | + if dynamic { | ||
52 | printing.onLayout( | 54 | printing.onLayout( |
53 | printJob: self, | 55 | printJob: self, |
54 | width: printOperation!.printInfo.paperSize.width, | 56 | width: printOperation!.printInfo.paperSize.width, |
@@ -61,6 +63,7 @@ public class PrintJob: NSView, NSSharingServicePickerDelegate { | @@ -61,6 +63,7 @@ public class PrintJob: NSView, NSSharingServicePickerDelegate { | ||
61 | 63 | ||
62 | // Block the main thread, waiting for a document | 64 | // Block the main thread, waiting for a document |
63 | semaphore.wait() | 65 | semaphore.wait() |
66 | + } | ||
64 | 67 | ||
65 | if pdfDocument != nil { | 68 | if pdfDocument != nil { |
66 | range.pointee.length = pdfDocument!.numberOfPages | 69 | range.pointee.length = pdfDocument!.numberOfPages |
@@ -90,8 +93,16 @@ public class PrintJob: NSView, NSSharingServicePickerDelegate { | @@ -90,8 +93,16 @@ public class PrintJob: NSView, NSSharingServicePickerDelegate { | ||
90 | let dataProvider = CGDataProvider(dataInfo: nil, data: bytesPointer, size: data?.count ?? 0, releaseData: dataProviderReleaseDataCallback) | 93 | let dataProvider = CGDataProvider(dataInfo: nil, data: bytesPointer, size: data?.count ?? 0, releaseData: dataProviderReleaseDataCallback) |
91 | pdfDocument = CGPDFDocument(dataProvider!) | 94 | pdfDocument = CGPDFDocument(dataProvider!) |
92 | 95 | ||
96 | + if dynamic { | ||
93 | // Unblock the main thread | 97 | // Unblock the main thread |
94 | semaphore.signal() | 98 | semaphore.signal() |
99 | + return | ||
100 | + } | ||
101 | + | ||
102 | + DispatchQueue.main.async { | ||
103 | + let window = NSApplication.shared.mainWindow! | ||
104 | + self.printOperation!.runModal(for: window, delegate: self, didRun: #selector(self.printOperationDidRun(printOperation:success:contextInfo:)), contextInfo: nil) | ||
105 | + } | ||
95 | } | 106 | } |
96 | 107 | ||
97 | override public func draw(_: NSRect) { | 108 | override public func draw(_: NSRect) { |
@@ -119,7 +130,8 @@ public class PrintJob: NSView, NSSharingServicePickerDelegate { | @@ -119,7 +130,8 @@ public class PrintJob: NSView, NSSharingServicePickerDelegate { | ||
119 | return printers | 130 | return printers |
120 | } | 131 | } |
121 | 132 | ||
122 | - public func printPdf(name: String, withPageSize size: CGSize, andMargin _: CGRect, withPrinter printer: String?) { | 133 | + public func printPdf(name: String, withPageSize size: CGSize, andMargin _: CGRect, withPrinter printer: String?, dynamically dyn: Bool) { |
134 | + dynamic = dyn | ||
123 | let sharedInfo = NSPrintInfo.shared | 135 | let sharedInfo = NSPrintInfo.shared |
124 | let sharedDict = sharedInfo.dictionary() | 136 | let sharedDict = sharedInfo.dictionary() |
125 | let printInfoDict = NSMutableDictionary(dictionary: sharedDict) | 137 | let printInfoDict = NSMutableDictionary(dictionary: sharedDict) |
@@ -133,20 +145,38 @@ public class PrintJob: NSView, NSSharingServicePickerDelegate { | @@ -133,20 +145,38 @@ public class PrintJob: NSView, NSSharingServicePickerDelegate { | ||
133 | // Print the custom view | 145 | // Print the custom view |
134 | printOperation = NSPrintOperation(view: self, printInfo: printInfo) | 146 | printOperation = NSPrintOperation(view: self, printInfo: printInfo) |
135 | printOperation!.jobTitle = name | 147 | printOperation!.jobTitle = name |
136 | - printOperation!.printPanel.options = [.showsPreview, .showsPaperSize, .showsOrientation] | 148 | + printOperation!.printPanel.options = [.showsPreview] |
137 | if printer != nil { | 149 | if printer != nil { |
138 | printInfo.printer = NSPrinter(name: printer!)! | 150 | printInfo.printer = NSPrinter(name: printer!)! |
139 | printOperation!.showsPrintPanel = false | 151 | printOperation!.showsPrintPanel = false |
140 | printOperation!.showsProgressPanel = false | 152 | printOperation!.showsProgressPanel = false |
141 | } | 153 | } |
142 | 154 | ||
155 | + if dynamic { | ||
143 | let window = NSApplication.shared.mainWindow! | 156 | let window = NSApplication.shared.mainWindow! |
157 | + printOperation!.printPanel.options = [.showsPreview, .showsPaperSize, .showsOrientation] | ||
144 | printOperation!.runModal(for: window, delegate: self, didRun: #selector(printOperationDidRun(printOperation:success:contextInfo:)), contextInfo: nil) | 158 | printOperation!.runModal(for: window, delegate: self, didRun: #selector(printOperationDidRun(printOperation:success:contextInfo:)), contextInfo: nil) |
159 | + return | ||
160 | + } | ||
161 | + | ||
162 | + printing.onLayout( | ||
163 | + printJob: self, | ||
164 | + width: printOperation!.printInfo.paperSize.width, | ||
165 | + height: printOperation!.printInfo.paperSize.height, | ||
166 | + marginLeft: printOperation!.printInfo.leftMargin, | ||
167 | + marginTop: printOperation!.printInfo.topMargin, | ||
168 | + marginRight: printOperation!.printInfo.rightMargin, | ||
169 | + marginBottom: printOperation!.printInfo.bottomMargin | ||
170 | + ) | ||
145 | } | 171 | } |
146 | 172 | ||
147 | - func cancelJob(_: String?) { | 173 | + func cancelJob(_ error: String?) { |
148 | pdfDocument = nil | 174 | pdfDocument = nil |
175 | + if dynamic { | ||
149 | semaphore.signal() | 176 | semaphore.signal() |
177 | + } else { | ||
178 | + printing.onCompleted(printJob: self, completed: false, error: error as NSString?) | ||
179 | + } | ||
150 | } | 180 | } |
151 | 181 | ||
152 | public static func sharePdf(data: Data, withSourceRect rect: CGRect, andName name: String) { | 182 | public static func sharePdf(data: Data, withSourceRect rect: CGRect, andName name: String) { |
@@ -59,6 +59,7 @@ public class PrintingPlugin: NSObject, FlutterPlugin { | @@ -59,6 +59,7 @@ public class PrintingPlugin: NSObject, FlutterPlugin { | ||
59 | let marginRight = CGFloat((args["marginRight"] as! NSNumber).floatValue) | 59 | let marginRight = CGFloat((args["marginRight"] as! NSNumber).floatValue) |
60 | let marginBottom = CGFloat((args["marginBottom"] as! NSNumber).floatValue) | 60 | let marginBottom = CGFloat((args["marginBottom"] as! NSNumber).floatValue) |
61 | let printJob = PrintJob(printing: self, index: args["job"] as! Int) | 61 | let printJob = PrintJob(printing: self, index: args["job"] as! Int) |
62 | + let dynamic = args["dynamic"] as! Bool | ||
62 | jobs[args["job"] as! UInt32] = printJob | 63 | jobs[args["job"] as! UInt32] = printJob |
63 | printJob.printPdf(name: name, | 64 | printJob.printPdf(name: name, |
64 | withPageSize: CGSize( | 65 | withPageSize: CGSize( |
@@ -70,7 +71,8 @@ public class PrintingPlugin: NSObject, FlutterPlugin { | @@ -70,7 +71,8 @@ public class PrintingPlugin: NSObject, FlutterPlugin { | ||
70 | y: marginTop, | 71 | y: marginTop, |
71 | width: width - marginRight - marginLeft, | 72 | width: width - marginRight - marginLeft, |
72 | height: height - marginBottom - marginTop | 73 | height: height - marginBottom - marginTop |
73 | - ), withPrinter: printer) | 74 | + ), withPrinter: printer, |
75 | + dynamically: dynamic) | ||
74 | result(NSNumber(value: 1)) | 76 | result(NSNumber(value: 1)) |
75 | } else if call.method == "listPrinters" { | 77 | } else if call.method == "listPrinters" { |
76 | let printJob = PrintJob(printing: self, index: -1) | 78 | let printJob = PrintJob(printing: self, index: -1) |
@@ -113,6 +113,7 @@ class MockPrinting extends Mock | @@ -113,6 +113,7 @@ class MockPrinting extends Mock | ||
113 | LayoutCallback onLayout, | 113 | LayoutCallback onLayout, |
114 | String name, | 114 | String name, |
115 | PdfPageFormat format, | 115 | PdfPageFormat format, |
116 | + bool dynamicLayout, | ||
116 | ) async => | 117 | ) async => |
117 | true; | 118 | true; |
118 | 119 |
-
Please register or login to post a comment