Skip to content

Commit 20d0002

Browse files
fix(storage, web): ensure exact same streams are not unsubscribed (#13034)
1 parent 111f5f6 commit 20d0002

File tree

1 file changed

+15
-2
lines changed
  • packages/firebase_storage/firebase_storage_web/lib/src/interop

1 file changed

+15
-2
lines changed

‎packages/firebase_storage/firebase_storage_web/lib/src/interop/storage.dart

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import 'dart:js_interop';
1111
import 'package:firebase_core_web/firebase_core_web_interop.dart'
1212
as core_interop;
1313
import 'package:firebase_core_web/firebase_core_web_interop.dart';
14+
import 'package:flutter/foundation.dart';
1415

1516
import 'storage_interop.dart' as storage_interop;
1617

@@ -343,8 +344,20 @@ class UploadTask extends JsObjectWrapper<storage_interop.UploadTaskJsImpl> {
343344
/// Returns [:true:] if it had an effect.
344345
bool cancel() => jsObject.cancel().toDart;
345346

346-
String _taskSnapshotWindowsKey(String appName, String bucket, String path) =>
347-
'flutterfire-${appName}_${bucket}_${path}_storageTask';
347+
// purely for debug mode and tracking listeners to clean up on "hot restart"
348+
final Map<String, int> _snapshotListeners = {};
349+
String _taskSnapshotWindowsKey(String appName, String bucket, String path) {
350+
if (kDebugMode) {
351+
final key = 'flutterfire-${appName}_${bucket}_${path}_storageTask';
352+
if (_snapshotListeners.containsKey(key)) {
353+
_snapshotListeners[key] = _snapshotListeners[key]! + 1;
354+
} else {
355+
_snapshotListeners[key] = 0;
356+
}
357+
return '$key-${_snapshotListeners[key]}';
358+
}
359+
return 'no-op';
360+
}
348361

349362
/// Stream for upload task state changed event.
350363
Stream<UploadTaskSnapshot> onStateChanged(

0 commit comments

Comments
 (0)