I know I have to do Firebase.initializeApp() but I don't know where to put it, I tried some answers of others questions about the same issue but no one works.
I also tried adding WidgetsFlutterBinding.ensureInitialized(); await Firebase.initializeApp(); in void main()
Main.dart
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
const MyApp({Key? key}) : super(key: key);
// This widget is the root of your application.
@override
Widget build(BuildContext context) {
final AuthenticationService _authenticationService =
AuthenticationService();
final AuthenticationBloc _authenticationBloc =
AuthenticationBloc(_authenticationService);
return AuthenticationBlocProvider(
authenticationBloc: _authenticationBloc,
key: null,
child: StreamBuilder(
initialData: null,
stream: _authenticationBloc.user,
builder: (BuildContext context, AsyncSnapshot snapshot) {
if (snapshot.connectionState == ConnectionState.waiting) {
return Container(
color: Colors.pink,
child: CircularProgressIndicator(),
);
} else if (snapshot.hasData) {
return HomeBlocProvider(
homeBloc: HomeBloc(DbFirestoreService(),
_authenticationService), // Inject the DbFirestoreService() & AuthenticationService()
uid: snapshot.data,
key: null,
child: _buildMaterialApp(HomePage()),
);
} else {
return _buildMaterialApp(Login());
}
},
),
);
}
MaterialApp _buildMaterialApp(Widget homePage) {
return MaterialApp(
debugShowCheckedModeBanner: false,
title: 'Journal',
theme: ThemeData(
primarySwatch: Colors.lightGreen,
canvasColor: Colors.lightGreen.shade50,
bottomAppBarColor: Colors.lightGreen,
),
home: homePage,
);
}
}
auth.dart
class AuthenticationService implements AuthenticationApi {
final FirebaseAuth _firebaseAuth = FirebaseAuth.instance;
FirebaseAuth getFirebaseAuth() {
return _firebaseAuth;
}
Future<String> currentUserUid() async {
var user = _firebaseAuth.currentUser;
return user!.uid;
}
Future<void> signOut() async {
return _firebaseAuth.signOut();
}
Future<String> signInWithEmailAndPassword(
{required String email, required String password}) async {
final UserCredential user = await _firebaseAuth.signInWithEmailAndPassword(
email: email, password: password);
return user.user!.uid;
}
Future<String> createUserWithEmailAndPassword(
{required String email, required String password}) async {
final UserCredential user = await _firebaseAuth
.createUserWithEmailAndPassword(email: email, password: password);
return user.user!.uid;
}
}
I am new with flutter. Thanks for the help
4 Answers 4
You should initialize your Firebase like this:
void main() async {
WidgetsFlutterBinding.ensureInitialized();
await Firebase.initializeApp();
runApp(MyApp());
}
Make sure to import Firebase core
import 'package:firebase_core/firebase_core.dart';
import 'package:firebase_core/firebase_core.dart';
import 'package:flutter/material.dart';
...
Future<void> main() async {
WidgetsFlutterBinding.ensureInitialized();
await Firebase.initializeApp({
appId: 'your_app_id',
apiKey: 'your_db_api_key',
messagingSenderId: 'your_sender_id',
projectId: 'your_project name',
});
runApp(MyApp());
}
...
those app_id, api_key, sender_id, project_name will be available from the firebase console easily.
2 Comments
The initialization should happen in your main.dart while launching the app.
import 'package:firebase_core/firebase_core.dart';
This is the import to have Firebase class visible to our dart file.
void main() async {
WidgetsFlutterBinding.ensureInitialized();
await Firebase.initializeApp();
runApp(MyApp());
}
This line ensures firebase is initialised properly before you could use in your app. Its an async operation so await is important too.
await Firebase.initializeApp();
dependency in pubspec.yaml
firebase_core: ^2.25.4
Dart Version:
dart --version
Dart SDK version: 3.2.6 (stable)
Flutter Version:
flutter --version
Flutter 3.16.9 • channel stable •
Comments
Check your node version and add firebase-tools which is compatible to that version. In my case it was: 9.23.1 for node 16
npm install -g [email protected]dart pub global activate flutterfire_cliflutterfire configure
This will create firebase_options.dart file.
Now, import it in the file where you are initializing the app
import 'firebase_options.dart'
Future<void> main() async {
WidgetsFlutterBinding.ensureInitialized();
await Firebase.initializeApp(
options: DefaultFirebaseOptions.currentPlatform
);
runApp(const MyApp());
}
await Firebase.initializeApp( options: DefaultFirebaseOptions.currentPlatform, );