David PHAM-VAN

Add a filename parameter for sharing

1 # 1.3.4 1 # 1.3.4
2 * Fix dart lint warnings 2 * Fix dart lint warnings
3 * Add documentation 3 * Add documentation
  4 +* Add a filename parameter for sharing
4 5
5 # 1.3.3 6 # 1.3.3
6 * Update Readme 7 * Update Readme
@@ -152,7 +152,7 @@ public class PrintingPlugin extends PrintDocumentAdapter implements MethodCallHa @@ -152,7 +152,7 @@ public class PrintingPlugin extends PrintDocumentAdapter implements MethodCallHa
152 result.success(0); 152 result.success(0);
153 break; 153 break;
154 case "sharePdf": 154 case "sharePdf":
155 - sharePdf((byte[]) call.argument("doc")); 155 + sharePdf((byte[]) call.argument("doc"), (String) call.argument("name"));
156 result.success(0); 156 result.success(0);
157 break; 157 break;
158 default: 158 default:
@@ -161,11 +161,16 @@ public class PrintingPlugin extends PrintDocumentAdapter implements MethodCallHa @@ -161,11 +161,16 @@ public class PrintingPlugin extends PrintDocumentAdapter implements MethodCallHa
161 } 161 }
162 } 162 }
163 163
164 - private void sharePdf(byte[] data) { 164 + private void sharePdf(byte[] data, String name) {
165 try { 165 try {
166 final File externalFilesDirectory = 166 final File externalFilesDirectory =
167 - activity.getExternalFilesDir(Environment.DIRECTORY_PICTURES);  
168 - File shareFile = File.createTempFile("document", ".pdf", externalFilesDirectory); 167 + activity.getExternalFilesDir(Environment.DIRECTORY_DOCUMENTS);
  168 + File shareFile;
  169 + if (name == null) {
  170 + shareFile = File.createTempFile("document-", ".pdf", externalFilesDirectory);
  171 + } else {
  172 + shareFile = new File(externalFilesDirectory, name);
  173 + }
169 174
170 FileOutputStream stream = new FileOutputStream(shareFile); 175 FileOutputStream stream = new FileOutputStream(shareFile);
171 stream.write(data); 176 stream.write(data);
@@ -44,7 +44,7 @@ class MyAppState extends State<MyApp> { @@ -44,7 +44,7 @@ class MyAppState extends State<MyApp> {
44 referenceBox.localToGlobal(referenceBox.paintBounds.bottomRight); 44 referenceBox.localToGlobal(referenceBox.paintBounds.bottomRight);
45 final Rect bounds = Rect.fromPoints(topLeft, bottomRight); 45 final Rect bounds = Rect.fromPoints(topLeft, bottomRight);
46 46
47 - Printing.sharePdf(document: pdf, bounds: bounds); 47 + Printing.sharePdf(document: pdf, filename: 'my-résumé.pdf', bounds: bounds);
48 } 48 }
49 49
50 Future<void> _printScreen() async { 50 Future<void> _printScreen() async {
@@ -50,7 +50,8 @@ @@ -50,7 +50,8 @@
50 [[call.arguments objectForKey:@"x"] floatValue], 50 [[call.arguments objectForKey:@"x"] floatValue],
51 [[call.arguments objectForKey:@"y"] floatValue], 51 [[call.arguments objectForKey:@"y"] floatValue],
52 [[call.arguments objectForKey:@"w"] floatValue], 52 [[call.arguments objectForKey:@"w"] floatValue],
53 - [[call.arguments objectForKey:@"h"] floatValue])]; 53 + [[call.arguments objectForKey:@"h"] floatValue])
  54 + andName:[call.arguments objectForKey:@"name"]];
54 result(@1); 55 result(@1);
55 } else { 56 } else {
56 result(FlutterMethodNotImplemented); 57 result(FlutterMethodNotImplemented);
@@ -92,21 +93,27 @@ @@ -92,21 +93,27 @@
92 } 93 }
93 94
94 - (void)sharePdf:(nonnull FlutterStandardTypedData*)data 95 - (void)sharePdf:(nonnull FlutterStandardTypedData*)data
95 - withSourceRect:(CGRect)rect { 96 + withSourceRect:(CGRect)rect
  97 + andName:(NSString*)name {
96 NSURL* tmpDirURL = [NSURL fileURLWithPath:NSTemporaryDirectory() 98 NSURL* tmpDirURL = [NSURL fileURLWithPath:NSTemporaryDirectory()
97 isDirectory:YES]; 99 isDirectory:YES];
98 100
99 CFUUIDRef uuid = CFUUIDCreate(NULL); 101 CFUUIDRef uuid = CFUUIDCreate(NULL);
100 - assert(uuid != NULL); 102 + assert(uuid != nil);
101 103
102 CFStringRef uuidStr = CFUUIDCreateString(NULL, uuid); 104 CFStringRef uuidStr = CFUUIDCreateString(NULL, uuid);
103 - assert(uuidStr != NULL);  
104 -  
105 - NSURL* fileURL = [[tmpDirURL  
106 - URLByAppendingPathComponent:[NSString  
107 - stringWithFormat:@"pdf-%@", uuidStr]]  
108 - URLByAppendingPathExtension:@"pdf"];  
109 - assert(fileURL != NULL); 105 + assert(uuidStr != nil);
  106 +
  107 + NSURL* fileURL;
  108 + if ([name isEqual:[NSNull null]]) {
  109 + fileURL = [[tmpDirURL
  110 + URLByAppendingPathComponent:[NSString stringWithFormat:@"document-%@",
  111 + uuidStr]]
  112 + URLByAppendingPathExtension:@"pdf"];
  113 + } else {
  114 + fileURL = [tmpDirURL URLByAppendingPathComponent:name];
  115 + }
  116 + assert(fileURL != nil);
110 117
111 CFRelease(uuidStr); 118 CFRelease(uuidStr);
112 CFRelease(uuid); 119 CFRelease(uuid);
@@ -65,7 +65,10 @@ mixin Printing { @@ -65,7 +65,10 @@ mixin Printing {
65 65
66 /// Displays a platform popup to share the Pdf document to another application 66 /// Displays a platform popup to share the Pdf document to another application
67 static Future<void> sharePdf( 67 static Future<void> sharePdf(
68 - {PdfDocument document, List<int> bytes, Rect bounds}) async { 68 + {PdfDocument document,
  69 + List<int> bytes,
  70 + String filename,
  71 + Rect bounds}) async {
69 assert(document != null || bytes != null); 72 assert(document != null || bytes != null);
70 assert(!(document == null && bytes == null)); 73 assert(!(document == null && bytes == null));
71 74
@@ -77,6 +80,7 @@ mixin Printing { @@ -77,6 +80,7 @@ mixin Printing {
77 80
78 final Map<String, dynamic> params = <String, dynamic>{ 81 final Map<String, dynamic> params = <String, dynamic>{
79 'doc': Uint8List.fromList(bytes), 82 'doc': Uint8List.fromList(bytes),
  83 + 'name': filename,
80 'x': bounds.left, 84 'x': bounds.left,
81 'y': bounds.top, 85 'y': bounds.top,
82 'w': bounds.width, 86 'w': bounds.width,