hyttahub_firebase
Firebase core persistence implementations for the hyttahub package.
Features
Provides Firebase-specific implementations for:
- Authentication (
FirebaseHyttaHubAuth) - Firestore (
FirestoreHyttaHubStorage)
Usage
To use this package, you must first initialize Firebase, and then register the Firebase persistence implementation with the hyttahub PersistenceRegistry before calling initializeHyttaHub().
Here is a simplified example of how you might set this up in your main.dart:
import 'package:flutter/material.dart';
import 'package:firebase_core/firebase_core.dart';
import 'package:hyttahub/hyttahub.dart';
import 'package:hyttahub/proto/hyttahub_implementation.pb.dart';
import 'package:hyttahub/utilities/persistence_registries.dart';
import 'package:hyttahub_firebase/firebase_hyttahub_auth.dart';
import 'package:hyttahub_firebase/firestore_hyttahub_storage.dart';
import 'firebase_options.dart'; // Generated by FlutterFire CLI
void registerPersistence() {
PersistenceRegistry.registerImplementation(
HyttaHubImplementationDescriptor(
id: 'firebase',
name: 'Firebase Cloud',
type: StorageEnum.cloud,
storageBuilder: () => FirestoreHyttaHubStorage(),
authBuilder: () => FirebaseHyttaHubAuth(),
),
);
PersistenceRegistry.onInitializePlatform = (storage) async {
// Only initialize Firebase if we are using cloud storage
if (storage == StorageEnum.cloud) {
if (Firebase.apps.isEmpty) {
await Firebase.initializeApp(
options: DefaultFirebaseOptions.currentPlatform,
);
}
}
};
}
Future<void> main() async {
WidgetsFlutterBinding.ensureInitialized();
// 1. Register the Firebase implementation
registerPersistence();
// 2. Initialize the platform (this will call the Firebase.initializeApp logic above)
const storage = StorageEnum.cloud;
await PersistenceRegistry.initializePlatform(storage);
// 3. Initialize the core Hyttahub framework
await initializeHyttaHub(
implementation: HyttaHubImplementation(
appBuildNumber: 1,
cloudRootCollection: 'my_app',
appId: 'com.example.myapp',
storage: storage,
implementationId: 'firebase',
),
siteScreenRoute: (siteId) => SiteScreenRoute.fullPath(siteId),
);
runApp(const MyApp());
}