Skip to content

Commit 4fd9982

Browse files
authored
feat(firebase_core_web): decouple foundation imports and fix JS SDK interop (#18624)
1 parent b4eeafb commit 4fd9982

5 files changed

Lines changed: 29 additions & 38 deletions

File tree

‎packages/firebase_core/firebase_core_web/lib/firebase_core_web.dart‎

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,6 @@ import 'package:firebase_core_platform_interface/firebase_core_platform_interfac
1111
import 'package:firebase_core_web/src/firebase_core_version.dart';
1212
import 'package:firebase_core_web/src/interop/package_web_tweaks.dart';
1313
import 'package:firebase_core_web/src/interop/utils/es6_interop.dart';
14-
import 'package:flutter/foundation.dart';
15-
import 'package:flutter_web_plugins/flutter_web_plugins.dart';
1614
import 'package:meta/meta.dart';
1715
import 'package:web/web.dart' as web;
1816

‎packages/firebase_core/firebase_core_web/lib/src/firebase_core_web.dart‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ class FirebaseCoreWeb extends FirebasePlatform {
6868
static const String _libraryName = 'flutter-fire-core';
6969

7070
/// Registers that [FirebaseCoreWeb] is the platform implementation.
71-
static void registerWith(Registrar registrar) {
71+
static void registerWith(dynamic registrar) {
7272
FirebasePlatform.instance = FirebaseCoreWeb();
7373
}
7474

‎packages/firebase_core/firebase_core_web/lib/src/interop/core.dart‎

Lines changed: 15 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -34,23 +34,22 @@ App initializeApp({
3434
String? measurementId,
3535
String? appId,
3636
}) {
37-
name ??= defaultFirebaseAppName;
38-
39-
return App.getInstance(
40-
firebase_interop.initializeApp(
41-
firebase_interop.FirebaseOptions(
42-
apiKey: apiKey?.toJS,
43-
authDomain: authDomain?.toJS,
44-
databaseURL: databaseURL?.toJS,
45-
projectId: projectId?.toJS,
46-
storageBucket: storageBucket?.toJS,
47-
messagingSenderId: messagingSenderId?.toJS,
48-
measurementId: measurementId?.toJS,
49-
appId: appId?.toJS,
50-
),
51-
name.toJS,
52-
),
37+
final options = firebase_interop.FirebaseOptions(
38+
apiKey: apiKey?.toJS,
39+
authDomain: authDomain?.toJS,
40+
databaseURL: databaseURL?.toJS,
41+
projectId: projectId?.toJS,
42+
storageBucket: storageBucket?.toJS,
43+
messagingSenderId: messagingSenderId?.toJS,
44+
measurementId: measurementId?.toJS,
45+
appId: appId?.toJS,
5346
);
47+
48+
final jsApp = (name != null && name != defaultFirebaseAppName)
49+
? firebase_interop.initializeApp(options, name.toJS)
50+
: firebase_interop.initializeApp(options);
51+
52+
return App.getInstance(jsApp);
5453
}
5554

5655
App app([String? name]) {

‎packages/firebase_core/firebase_core_web/lib/src/interop/utils/utils.dart‎

Lines changed: 13 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -11,32 +11,30 @@ import 'dart:async';
1111
import 'dart:js_interop';
1212
import 'dart:js_interop_unsafe';
1313
import 'package:web/web.dart' as web;
14-
import 'package:flutter/foundation.dart';
1514

1615
import 'func.dart';
1716

17+
// ignore: do_not_use_environment
18+
const bool _kDebugMode = !bool.fromEnvironment('dart.vm.product');
19+
1820
/// Handles the [Future] object with the provided [mapper] function.
1921
JSPromise handleFutureWithMapper<T, S>(
20-
Future<JSAny?> future,
22+
Future<T> future,
2123
Func1<T, S> mapper,
2224
) {
23-
// Taken from js_interop:286
2425
return JSPromise((JSFunction resolve, JSFunction reject) {
25-
future.then((JSAny? value) {
26-
resolve.callAsFunction(resolve, value);
27-
return value;
26+
future.then<void>((T value) {
27+
final Object? target = mapper(value);
28+
final JSAny? jsVal = target?.jsify();
29+
resolve.callAsFunction(resolve, jsVal);
2830
}, onError: (Object error, StackTrace stackTrace) {
2931
final errorConstructor =
3032
globalContext.getProperty('Error'.toJS)! as JSFunction;
31-
final wrapper = errorConstructor.callAsConstructor<JSObject>(
32-
'Dart exception thrown from converted Future. Use the properties '
33-
"'error' to fetch the boxed error and 'stack' to recover "
34-
'the stack trace.'
35-
.toJS);
33+
final wrapper = errorConstructor
34+
.callAsConstructor<JSObject>('Dart exception: $error'.toJS);
3635
wrapper['error'] = error.toJSBox;
3736
wrapper['stack'] = stackTrace.toString().toJS;
3837
reject.callAsFunction(reject, wrapper);
39-
return wrapper;
4038
});
4139
}.toJS);
4240
}
@@ -45,7 +43,7 @@ JSPromise handleFutureWithMapper<T, S>(
4543
// and clean up on hot restart if it exists.
4644
// See: https://github.com/firebase/flutterfire/issues/7064
4745
void unsubscribeWindowsListener(String key) {
48-
if (kDebugMode) {
46+
if (_kDebugMode) {
4947
final unsubscribe = web.window.getProperty(key.toJS);
5048
if (unsubscribe != null) {
5149
(unsubscribe as JSFunction).callAsFunction();
@@ -54,13 +52,13 @@ void unsubscribeWindowsListener(String key) {
5452
}
5553

5654
void setWindowsListener(String key, JSFunction unsubscribe) {
57-
if (kDebugMode) {
55+
if (_kDebugMode) {
5856
web.window.setProperty(key.toJS, unsubscribe);
5957
}
6058
}
6159

6260
void removeWindowsListener(String key) {
63-
if (kDebugMode) {
61+
if (_kDebugMode) {
6462
if (web.window.hasProperty(key.toJS) == true.toJS) {
6563
web.window.delete(key.toJS);
6664
}

‎packages/firebase_core/firebase_core_web/pubspec.yaml‎

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,6 @@ environment:
1111

1212
dependencies:
1313
firebase_core_platform_interface: ^8.1.1
14-
flutter:
15-
sdk: flutter
16-
flutter_web_plugins:
17-
sdk: flutter
1814
meta: ^1.8.0
1915
web: ^1.0.0
2016

0 commit comments

Comments
 (0)