1+ import 'dart:async' ;
2+
13import 'package:firebase_admin/src/service.dart' ;
24
35import '../firebase_admin.dart' ;
6+ import 'app/app.dart' ;
47import 'app/app_extension.dart' ;
58import 'app.dart' ;
69
710import 'package:firebase_dart/standalone_database.dart' ;
811
12+ class _AuthTokenProvider implements AuthTokenProvider {
13+ final FirebaseAppInternals internals;
14+
15+ _AuthTokenProvider (this .internals);
16+
17+ @override
18+ Future <String ?> getToken ([bool forceRefresh = false ]) async {
19+ print ('getToken' );
20+ print ((await internals.getToken (forceRefresh)).accessToken);
21+ return (await internals.getToken (forceRefresh)).accessToken;
22+ }
23+
24+ @override
25+ Stream <String ?> get onTokenChanged {
26+ var controller = StreamController <String ?>();
27+ var listener = (v) => controller.add (v);
28+
29+ controller.onListen = () {
30+ internals.addAuthTokenListener (listener);
31+ };
32+ controller.onCancel = () => internals.removeAuthTokenListener (listener);
33+
34+ return controller.stream;
35+ }
36+ }
37+
938/// Firebase Realtime Database service.
1039class Database implements FirebaseService {
1140 final StandaloneFirebaseDatabase _database;
@@ -15,13 +44,10 @@ class Database implements FirebaseService {
1544
1645 /// Do not call this constructor directly. Instead, use app().database.
1746 Database (this .app)
18- : _database = StandaloneFirebaseDatabase (app.options.databaseUrl ??
19- 'https://${app .projectId }.firebaseio.com/' ) {
20- _database.authenticate (app.internals.getToken ().then ((v) => v.accessToken));
21-
22- app.internals
23- .addAuthTokenListener ((token) => _database.authenticate (token));
24- }
47+ : _database = StandaloneFirebaseDatabase (
48+ app.options.databaseUrl ??
49+ 'https://${app .projectId }.firebaseio.com/' ,
50+ authTokenProvider: _AuthTokenProvider (app.internals));
2551
2652 /// Returns a [Reference] representing the location in the Database
2753 /// corresponding to the provided [path] . If no path is provided, the
0 commit comments