Context & Problem
Recent cleanups (#18604, #18624) removed package:flutter/foundation.dart, package:flutter/material.dart, and package:flutter_web_plugins imports from *_platform_interface data models and firebase_core_web. Because FlutterFire web implementations (firebase_core_web, firebase_auth_web, cloud_firestore_web) are built on dart:js_interop and package:web, they can compile to JS and Wasm GC without pulling in dart:ui or the Flutter engine.
However, non-Flutter Dart web frameworks (e.g. Jaspr) and pure-Dart environments cannot resolve these packages using standalone dart pub get because firebase_core_platform_interface (and sibling *_platform_interface packages) still declare flutter: sdk: flutter in pubspec.yaml.
The sole remaining reason *_platform_interface depends on flutter: sdk: flutter is that it bundles the default MethodChannel* implementation (package:flutter/services.dart). Meanwhile, package:plugin_platform_interface itself is already 100% pure Dart.
Proposed Options
We would like feedback from the maintainers on two architectural options to remove the flutter: sdk: flutter dependency from the platform interface layer:
Option A: Move MethodChannel* out of *_platform_interface (In-Place Pure Dart)
- Move
MethodChannelFirebase (package:flutter/services.dart) from firebase_core_platform_interface into the app-facing firebase_core package (or a dedicated firebase_core_method_channel subpackage).
- Remove
flutter: sdk: flutter and environment: flutter: from firebase_core_platform_interface/pubspec.yaml.
- Pros: Zero new packages;
*_platform_interface becomes 100% pure Dart immediately.
- Cons: Technically a breaking change for external consumers or test suites that directly instantiate
MethodChannelFirebase from firebase_core_platform_interface (requires scheduling for the next major version bump).
Option B: Extract Pure-Dart Leaf Package (package:firebase_common / *_interface)
- Extract pure-Dart platform contracts and shared domain models (
FirebaseAppPlatform, FirebaseOptions, FirebaseException, Timestamp, GeoPoint, etc.) into a zero-dependency pure-Dart package (e.g. package:firebase_common).
- Have
*_platform_interface re-export these types alongside MethodChannel*, while *_web packages depend directly on the pure-Dart package.
- Pros: 100% backwards-compatible; requires no major version bump to existing
*_platform_interface packages; enables code sharing with server-side firebase-admin-dart.
- Cons: Introduces a new leaf package to publish and maintain in the monorepo.
Acceptance Criteria
Context & Problem
Recent cleanups (#18604, #18624) removed
package:flutter/foundation.dart,package:flutter/material.dart, andpackage:flutter_web_pluginsimports from*_platform_interfacedata models andfirebase_core_web. Because FlutterFire web implementations (firebase_core_web,firebase_auth_web,cloud_firestore_web) are built ondart:js_interopandpackage:web, they can compile to JS and Wasm GC without pulling indart:uior the Flutter engine.However, non-Flutter Dart web frameworks (e.g. Jaspr) and pure-Dart environments cannot resolve these packages using standalone
dart pub getbecausefirebase_core_platform_interface(and sibling*_platform_interfacepackages) still declareflutter: sdk: flutterinpubspec.yaml.The sole remaining reason
*_platform_interfacedepends onflutter: sdk: flutteris that it bundles the defaultMethodChannel*implementation (package:flutter/services.dart). Meanwhile,package:plugin_platform_interfaceitself is already 100% pure Dart.Proposed Options
We would like feedback from the maintainers on two architectural options to remove the
flutter: sdk: flutterdependency from the platform interface layer:Option A: Move
MethodChannel*out of*_platform_interface(In-Place Pure Dart)MethodChannelFirebase(package:flutter/services.dart) fromfirebase_core_platform_interfaceinto the app-facingfirebase_corepackage (or a dedicatedfirebase_core_method_channelsubpackage).flutter: sdk: flutterandenvironment: flutter:fromfirebase_core_platform_interface/pubspec.yaml.*_platform_interfacebecomes 100% pure Dart immediately.MethodChannelFirebasefromfirebase_core_platform_interface(requires scheduling for the next major version bump).Option B: Extract Pure-Dart Leaf Package (
package:firebase_common/*_interface)FirebaseAppPlatform,FirebaseOptions,FirebaseException,Timestamp,GeoPoint, etc.) into a zero-dependency pure-Dart package (e.g.package:firebase_common).*_platform_interfacere-export these types alongsideMethodChannel*, while*_webpackages depend directly on the pure-Dart package.*_platform_interfacepackages; enables code sharing with server-sidefirebase-admin-dart.Acceptance Criteria
MethodChannel*(package:flutter/services.dart) from the pure-Dart interface layer.FirebaseExceptionrather than catching/throwingPlatformException.