Fixes an issue that could result in a crash when selecting a media item twice (#518)

This commit is contained in:
Miguel Ruivo 2020-12-10 13:00:56 +00:00
parent 2aafd1131c
commit fe19d20270
4 changed files with 17 additions and 8 deletions

View File

@ -1,3 +1,6 @@
## 2.1.1
iOS: Fixes an issue that could result in a crash when selecting a media item twice. ([#518](https://github.com/miguelpruivo/flutter_file_picker/issues/518)).
## 2.1.0 ## 2.1.0
Adds `withReadStream` that allows bigger files to be streamed read into a `Stream<List<int>>`. Thanks @redsolver. Adds `withReadStream` that allows bigger files to be streamed read into a `Stream<List<int>>`. Thanks @redsolver.

View File

@ -14,6 +14,7 @@
@property (nonatomic) MPMediaPickerController *audioPickerController; @property (nonatomic) MPMediaPickerController *audioPickerController;
@property (nonatomic) NSArray<NSString *> * allowedExtensions; @property (nonatomic) NSArray<NSString *> * allowedExtensions;
@property (nonatomic) BOOL loadDataToMemory; @property (nonatomic) BOOL loadDataToMemory;
@property (nonatomic) dispatch_group_t group;
@end @end
@implementation FilePickerPlugin @implementation FilePickerPlugin
@ -362,6 +363,10 @@ didPickDocumentsAtURLs:(NSArray<NSURL *> *)urls{
-(void)picker:(PHPickerViewController *)picker didFinishPicking:(NSArray<PHPickerResult *> *)results API_AVAILABLE(ios(14)){ -(void)picker:(PHPickerViewController *)picker didFinishPicking:(NSArray<PHPickerResult *> *)results API_AVAILABLE(ios(14)){
if(self.group != nil) {
return;
}
Log(@"Picker:%@ didFinishPicking:%@", picker, results); Log(@"Picker:%@ didFinishPicking:%@", picker, results);
[picker dismissViewControllerAnimated:YES completion:nil]; [picker dismissViewControllerAnimated:YES completion:nil];
@ -375,15 +380,15 @@ didPickDocumentsAtURLs:(NSArray<NSURL *> *)urls{
NSMutableArray<NSURL *> * urls = [[NSMutableArray alloc] initWithCapacity:results.count]; NSMutableArray<NSURL *> * urls = [[NSMutableArray alloc] initWithCapacity:results.count];
dispatch_group_t group = dispatch_group_create(); self.group = dispatch_group_create();
for (PHPickerResult *result in results) { for (PHPickerResult *result in results) {
dispatch_group_enter(group); dispatch_group_enter(_group);
[result.itemProvider loadFileRepresentationForTypeIdentifier:@"public.item" completionHandler:^(NSURL * _Nullable url, NSError * _Nullable error) { [result.itemProvider loadFileRepresentationForTypeIdentifier:@"public.item" completionHandler:^(NSURL * _Nullable url, NSError * _Nullable error) {
if(url == nil) { if(url == nil) {
Log("Could not load the picked given file: %@", error); Log("Could not load the picked given file: %@", error);
dispatch_group_leave(group); dispatch_group_leave(self->_group);
return; return;
} }
@ -408,11 +413,12 @@ didPickDocumentsAtURLs:(NSArray<NSURL *> *)urls{
} }
[urls addObject:cachedUrl]; [urls addObject:cachedUrl];
dispatch_group_leave(group); dispatch_group_leave(self->_group);
}]; }];
} }
dispatch_group_notify(group, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0),^{ dispatch_group_notify(_group, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0),^{
self->_group = nil;
[self handleResult:urls]; [self handleResult:urls];
}); });
} }

View File

@ -16,8 +16,8 @@ class PlatformFile {
this.bytes = data['bytes'], this.bytes = data['bytes'],
this.size = data['size']; this.size = data['size'];
/// The absolute path for a cached copy of this file. It can be used to create a /// The absolute path for a cached copy of this file. It can be used to create a
/// a file instance with a descriptor for the given path. /// file instance with a descriptor for the given path.
/// ``` /// ```
/// final File myFile = File(platformFile.path); /// final File myFile = File(platformFile.path);
/// ``` /// ```

View File

@ -1,7 +1,7 @@
name: file_picker name: file_picker
description: A package that allows you to use a native file explorer to pick single or multiple absolute file paths, with extension filtering support. description: A package that allows you to use a native file explorer to pick single or multiple absolute file paths, with extension filtering support.
homepage: https://github.com/miguelpruivo/plugins_flutter_file_picker homepage: https://github.com/miguelpruivo/plugins_flutter_file_picker
version: 2.1.0 version: 2.1.1
dependencies: dependencies:
flutter: flutter: