Skip to content

Commit 93f1517

Browse files
fix(app-check, web): ensure exact same streams are not unsubscribed (#13035)
1 parent 20d0002 commit 93f1517

File tree

1 file changed

+16
-2
lines changed
  • packages/firebase_app_check/firebase_app_check_web/lib/src/interop

1 file changed

+16
-2
lines changed

‎packages/firebase_app_check/firebase_app_check_web/lib/src/interop/app_check.dart

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import 'dart:js_interop_unsafe';
88

99
import 'package:firebase_app_check_platform_interface/firebase_app_check_platform_interface.dart';
1010
import 'package:firebase_core_web/firebase_core_web_interop.dart';
11+
import 'package:flutter/foundation.dart';
1112

1213
import 'app_check_interop.dart' as app_check_interop;
1314

@@ -76,8 +77,21 @@ class AppCheck extends JsObjectWrapper<app_check_interop.AppCheckJsImpl> {
7677
// ignore: close_sinks
7778
_idTokenChangedController;
7879

79-
String _appCheckWindowsKey(String appName) =>
80-
'flutterfire-${appName}_onTokenChanged';
80+
// purely for debug mode and tracking listeners to clean up on "hot restart"
81+
final Map<String, int> _tokenListeners = {};
82+
String _appCheckWindowsKey(String appName) {
83+
if (kDebugMode) {
84+
final key = 'flutterfire-${appName}_onTokenChanged';
85+
if (_tokenListeners.containsKey(key)) {
86+
_tokenListeners[key] = _tokenListeners[key]! + 1;
87+
} else {
88+
_tokenListeners[key] = 0;
89+
}
90+
return '$key-${_tokenListeners[key]}';
91+
}
92+
return 'no-op';
93+
}
94+
8195
Stream<app_check_interop.AppCheckTokenResult> onTokenChanged(String appName) {
8296
final appCheckWindowsKey = _appCheckWindowsKey(appName);
8397
unsubscribeWindowsListener(appCheckWindowsKey);

0 commit comments

Comments
 (0)