@@ -412,10 +412,10 @@ - (void)referencePutDataApp:(PigeonStorageFirebaseApp *)app
412412 self->_tasks [handle] = task;
413413 }
414414
415- completion ([self setupTaskListeners: task], nil );
415+ completion ([self setupTaskListeners: task handle: handle ], nil );
416416}
417417
418- - (NSString *)setupTaskListeners : (FIRStorageObservableTask *)task {
418+ - (NSString *)setupTaskListeners : (FIRStorageObservableTask *)task handle : ( NSNumber *) handle {
419419 // Generate a random UUID to register with
420420 NSString *uuid = [[NSUUID UUID ] UUIDString ];
421421
@@ -426,7 +426,10 @@ - (NSString *)setupTaskListeners:(FIRStorageObservableTask *)task {
426426 FlutterEventChannel *channel = [FlutterEventChannel eventChannelWithName: channelName
427427 binaryMessenger: _binaryMessenger];
428428 FLTTaskStateChannelStreamHandler *handler =
429- [[FLTTaskStateChannelStreamHandler alloc ] initWithTask: task];
429+ [[FLTTaskStateChannelStreamHandler alloc ] initWithTask: task
430+ storagePlugin: self
431+ channelName: channelName
432+ handle: handle];
430433 [channel setStreamHandler: handler];
431434
432435 [_eventChannels setObject: channel forKey: channelName];
@@ -435,6 +438,23 @@ - (NSString *)setupTaskListeners:(FIRStorageObservableTask *)task {
435438 return uuid;
436439}
437440
441+ - (void )cleanUpTask : (NSString *)channelName handle : (NSNumber *)handle {
442+ NSObject <FlutterStreamHandler> *handler = [_streamHandlers objectForKey: channelName];
443+ if (handler) {
444+ [_streamHandlers removeObjectForKey: channelName];
445+ }
446+
447+ FlutterEventChannel *channel = [_eventChannels objectForKey: channelName];
448+ if (channel) {
449+ [channel setStreamHandler: nil ];
450+ [_eventChannels removeObjectForKey: channelName];
451+ }
452+
453+ @synchronized (self->_tasks ) {
454+ [self ->_tasks removeObjectForKey: handle];
455+ }
456+ }
457+
438458- (void )referencePutStringApp : (PigeonStorageFirebaseApp *)app
439459 reference : (PigeonStorageReference *)reference
440460 data : (NSString *)data
@@ -456,7 +476,7 @@ - (void)referencePutStringApp:(PigeonStorageFirebaseApp *)app
456476 self->_tasks [handle] = task;
457477 }
458478
459- completion ([self setupTaskListeners: task], nil );
479+ completion ([self setupTaskListeners: task handle: handle ], nil );
460480}
461481
462482- (void )referencePutFileApp : (PigeonStorageFirebaseApp *)app
@@ -481,7 +501,7 @@ - (void)referencePutFileApp:(PigeonStorageFirebaseApp *)app
481501 self->_tasks [handle] = task;
482502 }
483503
484- completion ([self setupTaskListeners: task], nil );
504+ completion ([self setupTaskListeners: task handle: handle ], nil );
485505}
486506
487507- (void )referenceDownloadFileApp : (PigeonStorageFirebaseApp *)app
@@ -501,7 +521,7 @@ - (void)referenceDownloadFileApp:(PigeonStorageFirebaseApp *)app
501521 self->_tasks [handle] = task;
502522 }
503523
504- completion ([self setupTaskListeners: task], nil );
524+ completion ([self setupTaskListeners: task handle: handle ], nil );
505525}
506526
507527- (void )referenceUpdateMetadataApp : (PigeonStorageFirebaseApp *)app
0 commit comments