No Firebase App '[DEFAULT]' has been created - call Firebase.initializeApp() in Flutter and Firebase
Asked Answered
C

28

490

I am building a Flutter application and I have integrated Firebase, but I keep getting this error when I click on a button either to register, login, or logout. I have seen other people have asked the same question, but none seems to work for me. I am using Flutter and Android Studio. How can I fix this problem?

This is an excerpt of my code

class HomeScreen extends StatefulWidget {
  @override
  _HomeScreenState createState() => _HomeScreenState();
}

class _HomeScreenState extends State<HomeScreen> {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      backgroundColor: Colors.red,
      body: Center(
        child: Container(
          child: RaisedButton(
            onPressed: () {
              FirebaseAuth.instance.signOut().then((value) {
                Navigator.pushReplacement(
                    context,
                    MaterialPageRoute(
                        builder: (context) =>
                            LoginScreen()));
              });
            },
            child: Text("Logout"),
          )
        )
      )
    );
  }
}

Below is the thrown exception

══╡ EXCEPTION CAUGHT BY GESTURE ╞═══════════════════════════════════════════════════════════════════
The following FirebaseException was thrown while handling a gesture:
[core/no-app] No Firebase App '[DEFAULT]' has been created - call Firebase.initializeApp()

When the exception was thrown, this was the stack:

#0      MethodChannelFirebase.app (package:firebase_core_platform_interface/src/method_channel/method_channel_firebase.dart:118:5)
#1      Firebase.app (package:firebase_core/src/firebase.dart:52:41)
#2      FirebaseAuth.instance (package:firebase_auth/src/firebase_auth.dart:37:47)
#3      _HomeScreenState.build.<anonymous closure> (package:cosytok/screens/home.dart:20:28)
#4      _InkResponseState._handleTap (package:flutter/src/material/ink_well.dart:992:19)
#5      _InkResponseState.build.<anonymous closure> (package:flutter/src/material/ink_well.dart:1098:38)
#6      GestureRecognizer.invokeCallback (package:flutter/src/gestures/recognizer.dart:184:24)
#7      TapGestureRecognizer.handleTapUp (package:flutter/src/gestures/tap.dart:524:11)
#8      BaseTapGestureRecognizer._checkUp (package:flutter/src/gestures/tap.dart:284:5)
#9      BaseTapGestureRecognizer.handlePrimaryPointer (package:flutter/src/gestures/tap.dart:219:7)
#10     PrimaryPointerGestureRecognizer.handleEvent (package:flutter/src/gestures/recognizer.dart:477:9)
#11     PointerRouter._dispatch (package:flutter/src/gestures/pointer_router.dart:78:12)
#12     PointerRouter._dispatchEventToRoutes.<anonymous closure> (package:flutter/src/gestures/pointer_router.dart:124:9)
#13     _LinkedHashMapMixin.forEach (dart:collection-patch/compact_hash.dart:377:8)
#14     PointerRouter._dispatchEventToRoutes (package:flutter/src/gestures/pointer_router.dart:122:18)
#15     PointerRouter.route (package:flutter/src/gestures/pointer_router.dart:108:7)
#16     GestureBinding.handleEvent (package:flutter/src/gestures/binding.dart:220:19)
#17     GestureBinding.dispatchEvent (package:flutter/src/gestures/binding.dart:200:22)
#18     GestureBinding._handlePointerEvent (package:flutter/src/gestures/binding.dart:158:7)
#19     GestureBinding._flushPointerEventQueue (package:flutter/src/gestures/binding.dart:104:7)
#20     GestureBinding._handlePointerDataPacket (package:flutter/src/gestures/binding.dart:88:7)
#24     _invoke1 (dart:ui/hooks.dart:267:10)
#25     _dispatchPointerDataPacket (dart:ui/hooks.dart:176:5)
(elided 3 frames from dart:async)

Handler: "onTap"
Recognizer:
  TapGestureRecognizer#f0104
════════════════════════════════════════════════════════════════════════════════════════════════════

════════ Exception caught by gesture ═══════════════════════════════════════════════════════════════
The following FirebaseException was thrown while handling a gesture:
[core/no-app] No Firebase App '[DEFAULT]' has been created - call Firebase.initializeApp()
Creepie answered 19/8, 2020 at 17:35 Comment(2)
You should now use Dart-only way for initializing Firebase.Minhminho
I solved it by updating all the packages in pubspec.yaml to the latest version.Wimble
V
848

Starting Since August 17 2020

All Firebase versions have been updated and now you have to call Firebase.initializeApp() before using any Firebase product, for example:

First, all Firebase products now depend on firebase_core version (0.5.0+), therefore you need to add it in the pubspec.yaml file:

dependencies:
  flutter:
    sdk: flutter
  firebase_core : ^0.5.0
  # cloud_firestore: ^0.14.0 other firebase dependencies

Then you have to call Firebase.initializeApp():

First Example

import 'package:flutter/material.dart';

// Import the firebase_core plugin
import 'package:firebase_core/firebase_core.dart';

void main() {
  runApp(App());
}

class App extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return FutureBuilder(
      // Initialize FlutterFire
      future: Firebase.initializeApp(),
      builder: (context, snapshot) {
        // Check for errors
        if (snapshot.hasError) {
          return SomethingWentWrong();
        }

        // Once complete, show your application
        if (snapshot.connectionState == ConnectionState.done) {
          return MyAwesomeApp();
        }

        // Otherwise, show something whilst waiting for initialization to complete
        return Loading();
      },
    );
  }
}

Second Example with Firestore:

import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:flutter/material.dart';
import 'package:firebase_core/firebase_core.dart';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  // This widget is the root of your application.
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      debugShowCheckedModeBanner: false,
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: FirstRoute(title: 'First Route'),
    );
  }
}

class FirstRoute extends StatefulWidget {
  FirstRoute({Key key, this.title}) : super(key: key);
  final String title;

  @override
  _FirstRouteState createState() => _FirstRouteState();
}

class _FirstRouteState extends State<FirstRoute> {
  @override
  void initState() {
    super.initState();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
        appBar: AppBar(
          title: Text("test"),
        ),
        body: FutureBuilder(
          future: getData(),
          builder: (context, AsyncSnapshot<DocumentSnapshot> snapshot) {
            if (snapshot.connectionState == ConnectionState.done) {
              return Column(
                children: [
                  Container(
                    height: 27,
                    child: Text(
                      "Name: ${snapshot.data.data()['name']}",
                      overflow: TextOverflow.fade,
                      style: TextStyle(fontSize: 20),
                    ),
                  ),
                ],
              );
            } else if (snapshot.connectionState == ConnectionState.none) {
              return Text("No data");
            }
            return CircularProgressIndicator();
          },
        ));
  }

  Future<DocumentSnapshot> getData() async {
    await Firebase.initializeApp();
    return await FirebaseFirestore.instance
        .collection("users")
        .doc("docID")
        .get();
  }
}

Third Example:

Initialize it in initState() then call setState() which will call the build() method.

  @override
  void initState() {
    super.initState();
    Firebase.initializeApp().whenComplete(() { 
      print("completed");
      setState(() {});
    });
  }

Fourth Example:

Initialize it in the main() method after calling WidgetsFlutterBinding.ensureInitialized();

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await Firebase.initializeApp();
  runApp(MyApp());
}

Note: You only have to call initializeApp() once

Vtehsta answered 19/8, 2020 at 17:39 Comment(26)
the 4th example should be it. Just remember to add async. I wonder if the delay is noticeable.Councilor
Yup the 4th example is the best one, just thought to show all ways, the second is good also because you can just initialize before getting the first data from firestore or realtime database in the same FutureBuilderVtehsta
Thanks, it works using #4. But if you push "back" button, when you go back to the app, it says the same thing "No Firebase App '[DEFAULT]' has been created - call Firebase.initializeApp()" even if it's in main()Barfly
@Barfly I just tried it by clicking on the physical back button on a physical device with no issueVtehsta
@Barfly I just tried this (4th example) on both an emulator and on a physical device and tried what you said. On the emulator it crashes, but on the real device it runs just fine. Weird...Cheek
@AnisR. Very weird indeed, the other options will work on an emulatorVtehsta
For me it crash on physical device (OnePlus), but not everytimes, sometime it does, sometimes no. I may have an issue on my sideBarfly
4th one is life :) Just curious what does this do WidgetsFlutterBinding.ensureInitialized();Sapid
@MichaelDiCioccio the flutter framework used the widgetbinding to be able to interact with the flutter engine. When you call ensureInitislized it creates an instance of the Widgetbinding and since Firebase.initializeApp() needs to use platform channels to call native then u need to inialize the binding. api.flutter.dev/flutter/widgets/WidgetsFlutterBinding/… (platform channel are in flutter engine)Vtehsta
Using a FutureBuilder will completely rebuild the widget tree on each hot-reload, so the last one is the best optionTurbulence
On #1, what can Loading() and SomethingWentWrong() be? If I just stick a Text() in there it complains - "No Directionality widget found"Ko
#4 Doesn't seem to work with Providers (same error message as initially)Ko
Until yesterday (Sept 21, 2020) Firebase Messaging worked without Firebase.initializeApp()Audrey
Will getting red screen error for 2 sec then loading properly. How to restrict that red screen?Simeon
NOTE that this may affect in_app_purchase update listener setup, so I think initializeApp should be called after. That is only my assumption and I obviously didn't test this (can I even?), so take it with a grain of saltStepha
Fourth Example will hit E/FirebaseInstanceId( 1584): binding to the service failed but still can work, any idea this error how to fixGran
The 4th method doesn't work when using flutter_bloc does anybody know the best place to call it when using flutter_bloc i don't want to call it over and over againWonderful
@PeterHaddad I'm new to Flutter dev, but a little confused here. There is a lot of support for the 4th option, but won't that fail if you have no internet connection and crash or lag your app on startup? It seems like at least with option 3 you can render a loading screen or something and notify the user that you're offline or need a network connection. I could be mistaken if the Firebase.initializeApp() is actually an on-device process.Balanchine
Is anyone else getting this exception? FirebaseException ([core/not-initialized] Firebase has not been correctly initialized. Have you added the "google-services.json" file to the project? View the Android Installation documentation for more information: firebaseextended.github.io/flutterfire/docs/installation/… )Upstage
Note to use "flutter clean" after making these changes and rebuild the appFoundation
what if I don't wanna wait until the app is initialized with Firebase.initializeApp() ?? should I always wait as @PeterHaddad mentioned ?Endoscope
@Endoscope initializeApp() returns a Future that's why await is used, meaning that it will take time.. If you want to use any Firebase package then you have to wait until initializeApp() is done. If you are using a Firebase package in another page other than main.dart then you can use first example if you want should be fineVtehsta
@peterHaddad it sounds that I didn't clarify my question, I need to start my flutter app without having to wait for Firebase package to be fully initialized, giving that I use firebase in one of my inner pages (not in main.dart), what I did was I removed the async and await from main() method in the fourth example, but it ended up in a crash that happens sometimes which's related to Firebase app not initiated.Endoscope
I am getting the snapshot.hasError() true so what should I do... I had the same problem @PeterHaddad check this out I have created another query for this one #68977449Revolver
I don't know why but when I try debugging on chrome, browser freezes and VScode is displayed. #69219004Oletta
what if I'm having this problems when running the tests? (app fixed and runs)Karlkarla
D
194
  1. Add to pubspec.yaml

    firebase_core :
    
  2. add to main.dart

    import 'package:firebase_core/firebase_core.dart';
    
    void main() async {
       WidgetsFlutterBinding.ensureInitialized();
       await Firebase.initializeApp();
       runApp(MyApp());
    }
    
Diplomatic answered 22/8, 2020 at 14:55 Comment(9)
These lines will give: lib/main.dart:6:9: Error: Getter not found: 'Firebase'. await Firebase.initializeApp(); ^^^^^^^^Condition
I forgot to imprt firebase_core. Did that. Now: These lines will give: E/flutter (24294): [ERROR:flutter/lib/ui/ui_dart_state.cc(166)] Unhandled Exception: [core/no-app] No Firebase App '[DEFAULT]' has been created - call Firebase.initializeApp()Condition
It says here firebase.google.com/support/release-notes/android that: The Firebase Android library firebase-core is no longer needed. This SDK included the Firebase SDK for Google Analytics. Now, to use Analytics or a product that recommends the use of Analytics (see table below), you need to explicitly add the Analytics dependency: com.google.firebase:firebase-analytics:17.5.0 or com.google.firebase:firebase-analytics-ktx:17.5.0.Condition
What about if initializeApp will crash? Application wil not started. I not found anything about this possibly problem.Aundrea
@BorisSalimov Because initializeApp() is an async call, the application will still start even if it failsCapo
@Umuko Yes it is right if we will to use FutureBuilder and exception handling, but using await before runApp() may be cause of problem.Aundrea
It's show me a error - The following NoSuchMethodError was thrown building Builder: I/flutter ( 5612): The method 'then' was called on null. I/flutter ( 5612): Receiver: null I/flutter ( 5612): Tried calling: then(Closure: (dynamic) => Null)Pellucid
Is there a method without using init to run past cloud_firestore versions? Otherwise, do I have to update the project that has already been done?Mazarin
it Almost works to me! When i put exactly code, i had some errors, then i found that: firebase.flutter.dev/docs/overview/#initializationSkepticism
M
36

Dart-only initialization (Recommended)

  • Initialize Firebase on all platforms using CLI.

  • No need to add any native code.

  • No need to download any Google services file.

  1. Install FlutterFire CLI

    dart pub global activate flutterfire_cli
    
  2. (Optional) Add the following line to your ~/.zshrc file and save it

    export PATH="$PATH":"$HOME/.pub-cache/bin"
    
  3. Run the configure:

    flutterfire configure
    
  4. Press enter to configure all the platforms

    enter image description here

  5. You should now have a lib/firebase_options.dart file. Import this file in your main.dart and use Firebase.initializeApp.

    import 'firebase_options.dart';
    
    void main() async {
      WidgetsFlutterBinding.ensureInitialized();
    
      // This is the last thing you need to add. 
      await Firebase.initializeApp(
        options: DefaultFirebaseOptions.currentPlatform,
      );
    
      runApp(...);
    }
    

Migrating to Dart-only initialization:

If you already have an existing application, you can migrate it in the following ways.

  • Android:

    1. Delete google-services.json file from <flutter-project>/android/app:

      enter image description here

    2. Delete the following line in <flutter-project>/android/build.gradle file

      enter image description here

    3. Delete the following line in <flutter-project>/android/app/build.gradle file

      enter image description here

  • iOS

    Open <flutter-project>/ios/Runner.xcworkspace file in Xcode and delete the GoogleService-Info.plist file from the Runner.

    enter image description here

  • macOS

    Open <flutter-project>/macos/Runner.xcworkspace file in Xcode and delete the GoogleService-Info.plist file from the Runner.

    enter image description here

More information can be found here

Minhminho answered 23/12, 2021 at 20:30 Comment(8)
This is the only working solution I found, thanks a lot dude! I was using the platform based method and never aware of the new implemention. Once I tried to add Ios app, I fall into this error, by creating a fresh project and following this solved the issue.Triptolemus
I could not import 'firebase_options.dart'; and also DefaultFirebaseOptions.currentPlatform is not found. Is there anything to update?Biographical
@SwetaJain Was a firebase_options.dart file generated after the 4th step?Minhminho
This firebase cli solution is also the best I found. You can find flutter documentation here: firebase.google.com/docs/flutter/setupCultivator
in my case i also had to install firebase-tools to make this work. Anyhow this was the only thing worked for me :). (27 FEB, 2023)Jacobine
in my case, i had to a few minor things different than CopsOnRoad's answer, but between CopsOnRoad answer and the url @Cultivator provided (firebase.google.com/docs/flutter/setup) it fixed my error.Nations
For me it didint work for flutter web, saddly I've tried with flutterfire cli and manually configure (initializeApp with options provided by cloud messaging) no success at all... :(Talca
flutterfire configure generates the json files and the line in build.gradle it works with them but make switching from environment more complicated. Is it safe to remove those?Nozicka
F
20

If you followed Peter's answer and are still getting the same error, check to make sure anything else you have in your main function comes after the await Firebase.initializeApp() call, like so:

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await Firebase.initializeApp();
  FirebaseCrashlytics.instance.setCrashlyticsCollectionEnabled(true);
  FlutterError.onError = FirebaseCrashlytics.instance.recordFlutterError;
  runApp(MyApp());
}
Forest answered 23/10, 2020 at 15:6 Comment(0)
S
20

Since August 2017, all Firebase services have been updated so that you have to call Firebase.initializeApp() in your main before you can use any of the Firebase products, for example:

If you want to use the firebase_core plugin in a flutter application, then in your pubspec.yaml file add the firebase_core as below

dependencies:
  flutter:
    sdk: flutter
  firebase_core: ^1.19.1

Then call the Firebase.initializeApp(): in your app. same as something below:

import 'package:firebase_core/firebase_core.dart';

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await Firebase.initializeApp();
  runApp(MyApp());
}
Spleen answered 2/6, 2021 at 8:12 Comment(0)
V
17

First, add this dependency:

firebase_core :

Second: in the project main function, add these two lines and make the function async:

void main() async {
    // These two lines
    WidgetsFlutterBinding.ensureInitialized();
    await Firebase.initializeApp();

    //
    runApp(MyApp());
}

Now you can use Firebase normally in any file or widget in the project.

The FutureBuilder widget will work either, but you must add it every time you want to access Firebase.

Variolite answered 11/9, 2020 at 4:14 Comment(0)
S
11

Peter's answer is perfect, but if you still get an error in your code and follow the Flutter Firebase codelab, note that those tutorials are outdated as of August 2020 and not updated yet.

You need to do many other changes like:

  • replace .data with .data()
  • replace updateData with update
Shilashilha answered 4/9, 2020 at 19:35 Comment(0)
L
11

Since Flutter versions 2.8, FlutterFire can now be initialized from Dart on all platforms using the Firebase.initializeApp function. There's a more simple and quicker way to initialize a firebase project, instead of downloading the .json and .plist file from the firebase console and placing them into your Flutter project folders which can result in several warnings. This is a problem I've experienced several times and here's how I solved it.

After creating your project in the firebase console steps here and installed the Firebase CLI here, please proceed with the following steps:

You can skip step 1 and jump to step 4 if you've already configured your firebase project with flutterfire configure.

  1. From your project root terminal, command:

      $ flutterfire configure   
        // This requires the Firebase CLI to work.
    
  2. Select firebase project by hitting return or enter.

  3. insert the bundle ID. You can get this by right clicking the ios folder > then click'Open in xcode'. The Bundle Identifier will appear in the right white panel and you'll have to type this in the terminal manually when prompted.

** Proceed to step 5 if you already have the firebase_core plugin installed. **

  1. Install the latest version of the firebase_core plugin by running this command from your project root directory:

     $ flutter pub add firebase_core  // Adds to pubspec.yaml
    
  2. Add imports to the main file:

     import 'package:firebase_core/firebase_core.dart'; // 
     import 'firebase_options.dart'; // Generated file
    
  3. Update your main function to initialize firebase with this async function:

      Future<void> main() async {
       WidgetsFlutterBinding.ensureInitialized();
       await Firebase.initializeApp(options: 
       DefaultFirebaseOptions.currentPlatform);
       runApp(const YourAppName());
      }
    

See the FlutterFire documentation for more information.

Longfellow answered 18/3, 2022 at 14:43 Comment(2)
I was missing the 'firebase_options.dart' file to be imported. Thanks for the answer.Latialatices
I already tried this way and not working for firebase_messaging on fluttter web (ios and android is fine though)Talca
G
10

Flutter Web with Firebase

If you are using Flutter Web with Firebase make sure you have the SDKs installed in the body tag of your ./web/index.html

  <script src="https://www.gstatic.com/firebasejs/8.2.9/firebase-app.js"></script>
  <script src="https://www.gstatic.com/firebasejs/8.2.9/firebase-analytics.js"></script>

Furthermore, make sure you call firebase.initializeApp(...) with the configuration parameters in the index.html as well.

  <script>
    // Your web app's Firebase configuration
    // For Firebase JS SDK v7.20.0 and later, measurementId is optional
    var firebaseConfig = {
      apiKey: "AIz...",
      authDomain: "...",
      databaseURL: "https://<project-name>.firebaseio.com",
      projectId: "...",
      storageBucket: "<project-name>.appspot.com",
      messagingSenderId: "...",
      appId: "...",
      measurementId: "..."
    };
    firebase.initializeApp(firebaseConfig);
    firebase.analytics();
  </script>

At last configure firebase as described in Peter Haddad's answer:

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await Firebase.initializeApp();
  runApp(MyApp());
}
Gaelan answered 21/2, 2021 at 6:31 Comment(3)
That is not securely put sensitive data inside .htmlUnsung
@user7856586 what would you say is the sensitive data in this case?Gaelan
sorry I mean that we should also fix rules on Gcloud, cause storing naked data in html file is not secure. Look hereUnsung
T
9

You need to add await Firebase.initializeApp(); which is a Future. Do it inside the dart file that is running your Firebase function like below:

import 'package:firebase_core/firebase_core.dart';
...

Future<void> main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await Firebase.initializeApp();
  runApp(MaterialApp());
}
Transpolar answered 29/9, 2020 at 7:13 Comment(0)
P
7

If you still have the problem when you leave the app to the main screen, you could add this to whatever .dart file using Firebase:

class App extends StatelessWidget {

  final Future<FirebaseApp> _initialization = Firebase.initializeApp();

  @override
  Widget build(BuildContext context) {

Or in the case of a StatefulWidget:

import 'package:flutter/material.dart';

// Import the firebase_core plugin
import 'package:firebase_core/firebase_core.dart';

void main() {
  runApp(App());
}

class App extends StatefulWidget {
  _AppState createState() => _AppState();
}

class _AppState extends State<App> {
  // Set default `_initialized` and `_error` state to false
  bool _initialized = false;
  bool _error = false;

  // Define an async function to initialize FlutterFire
  void initializeFlutterFire() async {
    try {
      // Wait for Firebase to initialize and set `_initialized` state to true
      await Firebase.initializeApp();
      setState(() {
        _initialized = true;
      });
    } catch(e) {
      // Set `_error` state to true if Firebase initialization fails
      setState(() {
        _error = true;
      });
    }
  }

  @override
  void initState() {
    initializeFlutterFire();
    super.initState();
  }

  @override
  Widget build(BuildContext context) {
    // Show error message if initialization failed
    if(_error) {
      return SomethingWentWrong();
    }

    // Show a loader until FlutterFire is initialized
    if (!_initialized) {
      return Loading();
    }

    return MyAwesomeApp();
  }
}

For more information, check this link.

Phyletic answered 3/9, 2020 at 13:38 Comment(1)
I am getting the error even if I do the same procedure as documentation. here is the error No Firebase App '[DEFAULT]' has been created - call Firebase.initializeApp() . I already initialized the Firebase in stateful widget.Exemplary
T
5

This is the way to initialize firebase in 2022

First of all, Install FlutterFire with this link ==> Flutter Fire Installation Link

After installing FlutterFire, you'll need to add these lines of code in your lib/main.dart file

  import 'package:firebase_core/firebase_core.dart';
  import 'firebase_options.dart';  

Then edit your Main Function as done below

void main() async {
 WidgetsFlutterBinding.ensureInitialized();
   await Firebase.initializeApp(options:                                  
   DefaultFirebaseOptions.currentPlatform,);
 runApp(MyApp()); 
 }

This can change in the future, so refer to this link for the latest implementation reference below

Initializing FlutterFire#

Titanic answered 22/2, 2022 at 10:46 Comment(1)
Still getting the error.Photoengraving
N
4

In most cases this problem is observed after upgrading the project from older Flutter version to null safety. These things should be checked:

Ensure you have firebase-core in pubscpec.yaml

Import firebase core:

import 'package:firebase_core/firebase_core.dart';

Init Firebase before any call - preferably inside main.dart so it is executed before any other implementation:

WidgetsFlutterBinding.ensureInitialized();
await Firebase.initializeApp(
  options: DefaultFirebaseOptions.currentPlatform,
);

From offical documentation.

Neomineomycin answered 12/9, 2022 at 11:1 Comment(3)
I did this but I still get the same error in the title and I followed the flutter fire config commands .please adviseGift
All the answers are just repeating the same thing that repeatedly also don't work. Ha!Photoengraving
Exactly @KhoPhi.... Didn't wor for me as well... (flutter web only, iOS and Android is fine)Talca
A
4

You should call await Firebase.initializeApp(); before using any Firebase code in your app:

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await Firebase.initializeApp();
  runApp(MyApp());
}

Take into account that if you put that line in another method:

Future<void> configure() async {
  WidgetsFlutterBinding.ensureInitialized();
  await Firebase.initializeApp();
  // More code...
}

Don't forget to add the await clause when calling that method:

void main() async {
  await configure();
  runApp(const MyApp());
}

Because the method runApp could be called before executing the await Firebase.initializeApp(); line from the configure method


Remember to add the firebase_core: ^2.13.0 package into the pubspec.yaml file:

dependencies:
  firebase_core : ^2.13.0
  # firebase_auth: ^4.6.1 or other firebase packages

And import the firebase_core package:

import 'package:firebase_core/firebase_core.dart';

Amperehour answered 22/5, 2023 at 0:55 Comment(0)
J
3

I needed to reconfigure the Firebase app with FlutterFire cli.

https://firebase.flutter.dev/docs/cli

  1. Install firebase-tool via NPM: npm install -g firebase-tools
  2. Install flutterfire cli: dart pub global activate flutterfire_cli
  3. Run this command to configure firebase in your project: flutterfire configure

Follow the above link and initialise as follows:

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await Firebase.initializeApp(options: DefaultFirebaseOptions.currentPlatform);
  runApp(const MyApp());
}

As its await call, The app will show splash screen and Firebase may not initialise so I proceeded next with another FutureBuilder for home screen to make sure Firebase app is initialised before I use FirebaseAuth.

home: FutureBuilder(
          future: Firebase.initializeApp(),
          builder: (context, snapshot) {
            if (snapshot.hasError) {
              return Text(snapshot.error.toString(),
                  style: TextStyle(fontSize: 10));
            }

            if (snapshot.connectionState == ConnectionState.done) {
              return StreamBuilder(
                stream: FirebaseAuth.instance.authStateChanges(),
                builder: (context, snapshot) {
                  return snapshot.hasData ? Home() : AuthPage();
                },
              );
            } else {
              return Text('');
            }
          })
Judd answered 9/3, 2022 at 8:51 Comment(1)
I have updated answer. ThanksJudd
P
3

Make sure you are using the right/official version of the firebase package.

I was using:

firebase_core_dart: <version-number>

at: https://pub.dev/packages/firebase_core_dart

instead of the official

firebase_core: <version-number>

at https://pub.dev/packages/firebase_core

Using the first option, I got the initialized when using:

await Firebase.initializeApp(
    options: DefaultFirebaseOptions.currentPlatform,
  ).whenComplete(
      () => print('FIREBASE INITIALIZED================>'));

but the authentication failed with the error message described by the OP.

Prehension answered 7/11, 2022 at 7:22 Comment(0)
C
2

You can initialize in the main.dart file as well like this using FutureBuilder.

 future: Firebase.initializeApp(),

Look at this example.

void main() {
  runApp(App());
}

class App extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return FutureBuilder(
      // Initialize FlutterFire
      future: Firebase.initializeApp(),
      builder: (context, snapshot) {
       return MaterialApp(
          debugShowCheckedModeBanner: false,
          title: 'NEWSAPI.org',
          home: SplashScreen(),
       
          routes: <String, WidgetBuilder>{
            SPLASH_SCREEN: (BuildContext context) => SplashScreen(),
          },);
      },
    );
  }
}
Caril answered 2/2, 2021 at 10:14 Comment(1)
An explanation would in order. E.g., what is the idea/gist? Please respond by editing your answer, not here in comments (without "Edit:", "Update:", or similar - the answer should appear as if it was written today).Evyn
M
2

I wanted to comment. But this issue have lot of trails. For my case.

I was initializing Injection Container Before Firebase. Hierarchy needs to be check.

Hive.init(directory.path);
  await Firebase.initializeApp();// before
  await di.init();
Motorcycle answered 21/12, 2021 at 9:36 Comment(0)
H
2

For Flutter Users

If you've set Firebase correctly, do not forget to add

await

before

Firebase.initializeApp();

That is mainly the problem with that Exception. And since it's a Future, do this:

Future<void> main() async {
      await Firebase.initializeApp();
Hiatt answered 21/1, 2022 at 4:11 Comment(0)
O
2

Initialise with firebase options

void main() async{
  WidgetsFlutterBinding.ensureInitialized();
  await Firebase.initializeApp(
  options: DefaultFirebaseOptions.currentPlatform).catchError((e){
    print(" Error : ${e.toString()}");
  });
}
Ow answered 12/9, 2022 at 11:7 Comment(0)
S
2

Try the below code. It will resolve the issue for both IOS and Android.

import 'dart:io';
import 'package:firebase_core/firebase_core.dart';

    void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  if (Platform.isIOS) {
    await Firebase.initializeApp(
      options: const FirebaseOptions(
          apiKey: "found in your google service-info.plist",
          appId: "found in your google service-info.plist",
          messagingSenderId: "found in firebase",
          projectId: "found in firebase"),
    );
  } else {
    await Firebase.initializeApp();
  }
  runApp(const MyApp());
}
Sirocco answered 8/11, 2022 at 7:18 Comment(0)
H
1

you neeed to add await FirebaseApp.initializeApp() in main function remember to add await in main function

Hamal answered 24/10, 2021 at 5:36 Comment(0)
T
1

On my case, I added web support to my existing project. The one thing which solved the issue is,

In the web/index.html file

Changing the verison of all the firebase sdk imports from 9.6.6 to 8.10.0

Snippet

<script src="https://www.gstatic.com/firebasejs/8.10.0/firebase-app.js"></script>
  <script src="https://www.gstatic.com/firebasejs/8.10.0/firebase-app-check.js"></script>  
  <script src="https://www.gstatic.com/firebasejs/8.10.0/firebase-firestore.js"></script>
  <script src="https://www.gstatic.com/firebasejs/8.10.0/firebase-auth.js"></script>
  <script src="https://www.gstatic.com/firebasejs/8.10.0/firebase-storage.js"></script>
  <script src="https://www.gstatic.com/firebasejs/8.10.0/firebase-messaging.js"></script>
 <script>
  var firebaseConfig = {
   ....
   }
Triptolemus answered 13/2, 2022 at 10:45 Comment(0)
R
1

If you are working on a project in which the firebase_core was preconfigured and then you are trying to add new packages it will give that error.

You have to first remove firebase_core: from pubsec.yaml and then save the file and reconfigure it through flutter pub add firebase_core and then flutterfire configure.

Then you can add any new packages.

Ruffin answered 13/7, 2022 at 3:53 Comment(1)
Nope. I started a fresh blank project, and the error is still throwing upPhotoengraving
G
1

In my case, I resolved this issue by adding the Google services plugin in

android/app/build.gradle.

apply plugin: 'com.google.gms.google-services'

Gasoline answered 25/6, 2023 at 14:20 Comment(0)
A
0

In my case it was because for the Web version you have to manually add stuff in the index.html file, not only the .js dependency, but the configuration. See Web Installation.

We tend to forget that for most stuff Flutter is compiled to the target without the need to change anything target-specific, but in this case one must add the configuration for each target.

Abfarad answered 14/2, 2021 at 16:26 Comment(0)
E
0

Use This for flutter :

   const firebaseConfig = {

    apiKey: "",
    authDomain: "",
    projectId: "",
    storageBucket: "",
    messagingSenderId: "",
    appId: "",
    measurementId: ""
    };
   
  // Initialize Firebase
  firebase.initializeApp(firebaseConfig);
  firebase.getAnalytics(app);

Instead of this

   const firebaseConfig = {

    apiKey: "",
    authDomain: "",
    projectId: "",
    storageBucket: "",
    messagingSenderId: "",
    appId: "",
    measurementId: ""
    };

    // Initialize Firebase
    const app = initializeApp(firebaseConfig);
    const analytics = getAnalytics(app);
Emasculate answered 3/10, 2021 at 14:36 Comment(0)
B
0

Initialize with firebase options like this:

void main() async{
WidgetsFlutterBinding.ensureInitialized();
await Firebase.initializeApp(
options: DefaultFirebaseOptions.currentPlatform).catchError((e){
  print(" Error : ${e.toString()}");
});
}
Blackshear answered 28/2, 2022 at 12:15 Comment(1)
Your answer could be improved with additional supporting information. Please edit to add further details, such as citations or documentation, so that others can confirm that your answer is correct. You can find more information on how to write good answers in the help center.Feathers

© 2022 - 2024 — McMap. All rights reserved.