@@ -19,7 +19,6 @@ import 'src/interop/app_check.dart' as app_check_interop;
19
19
class FirebaseAppCheckWeb extends FirebaseAppCheckPlatform {
20
20
static const recaptchaTypeV3 = 'recaptcha-v3' ;
21
21
static const recaptchaTypeEnterprise = 'enterprise' ;
22
-
23
22
static Map <String , StreamController <String ?>> _tokenChangesListeners = {};
24
23
25
24
/// Stub initializer to allow the [registerWith] to create an instance without
@@ -121,17 +120,25 @@ class FirebaseAppCheckWeb extends FirebaseAppCheckPlatform {
121
120
return convertWebExceptions <Future <void >>(() async {
122
121
_webAppCheck ?? = app_check_interop.getAppCheckInstance (
123
122
core_interop.app (app.name), webProvider);
124
- if (_tokenChangesListeners[app.name] == null ) {
125
- _tokenChangesListeners[app.name] =
126
- StreamController <String ?>.broadcast ();
127
-
128
- _delegate! .onTokenChanged ().map ((event) {
129
- _tokenChangesListeners[app.name]! .add (event.token.toDart);
130
- });
131
- }
123
+ _initialiseStreamController ();
132
124
});
133
125
}
134
126
127
+ void _initialiseStreamController () {
128
+ if (_tokenChangesListeners[app.name] == null ) {
129
+ _tokenChangesListeners[app.name] = StreamController <String ?>.broadcast (
130
+ onCancel: () {
131
+ _tokenChangesListeners[app.name]! .close ();
132
+ _tokenChangesListeners.remove (app.name);
133
+ _delegate! .idTokenChangedController? .close ();
134
+ },
135
+ );
136
+ _delegate! .onTokenChanged (app.name).listen ((event) {
137
+ _tokenChangesListeners[app.name]! .add (event.token.toDart);
138
+ });
139
+ }
140
+ }
141
+
135
142
@override
136
143
Future <String ?> getToken (bool forceRefresh) async {
137
144
return convertWebExceptions <Future <String ?>>(() async {
@@ -162,6 +169,9 @@ class FirebaseAppCheckWeb extends FirebaseAppCheckPlatform {
162
169
163
170
@override
164
171
Stream <String ?> get onTokenChange {
165
- return _tokenChangesListeners[app.name]! .stream;
172
+ _initialiseStreamController ();
173
+ return convertWebExceptions (
174
+ () => _tokenChangesListeners[app.name]! .stream,
175
+ );
166
176
}
167
177
}
0 commit comments