How the pieces connect
Flutter is the client; Firebase is the backend it talks to over the wire. The firebase_core plugin boots the connection in main(), then each product plugin (firebase_auth, cloud_firestore, firebase_storage, cloud_functions) opens its own channel to Google's servers. Auth issues a signed JWT that the SDK attaches to every Firestore, Storage, and Functions request automatically, so identity flows through without you wiring tokens by hand. Firestore pushes data the other way: a Query.snapshots() stream stays open and emits a new QuerySnapshot whenever a matching document changes server-side. Wrapped in a StreamBuilder, that turns a backend write into a UI rebuild with no manual refetch. Cloud Functions sit beside this for anything the client must not own — Stripe calls, privileged writes — reachable through FirebaseFunctions.instance.httpsCallable('name').