Tidak ada Aplikasi Firebase '[DEFAULT]' yang telah dibuat - panggil Firebase.initializeApp () di Flutter dan Firebase

Aug 19 2020

Saya sedang membangun Aplikasi flutter dan saya telah mengintegrasikan Firebase tetapi saya terus mendapatkan kesalahan ini ketika saya mengklik tombol untuk mendaftar, masuk, atau keluar. Saya telah melihat orang lain mengajukan pertanyaan yang sama tetapi tampaknya tidak ada yang berhasil untuk saya. Saya menggunakan flutter dan studio android. Ada yang bisa membantu?

Ini adalah kutipan dari kode saya

    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"),
          )
        )
      )
    );
  }
}

Di bawah ini adalah pengecualian yang diberikan

══╡ 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()

Jawaban

352 PeterHaddad Aug 19 2020 at 17:39

Mulai Sejak 17 Agustus 2020

Semua versi Firebase telah diupdate dan sekarang Anda harus menelepon Firebase.initializeApp()sebelum menggunakan produk Firebase apa pun, misalnya:

Pertama, semua produk Firebase sekarang bergantung pada firebase_coreversi (0.5.0+), oleh karena itu Anda perlu menambahkannya di pubspec.yamlfile:

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

Kemudian Anda harus menelepon Firebase.initializeApp():

Contoh Pertama

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();
      },
    );
  }
}

Contoh Kedua dengan 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();
  }
}

Contoh Ketiga:

Inisialisasinya initState()kemudian panggil setState()yang akan memanggil build()metode tersebut.

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

Contoh Keempat:

Lakukan inisialisasi dalam main()metode setelah memanggilWidgetsFlutterBinding.ensureInitialized();

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

Catatan : Anda hanya perlu menelepon initializeApp()sekali

57 MuhammadAshraf Aug 22 2020 at 14:55
  1. Tambahkan ke pubspec.yaml

    firebase_core :
    
  2. tambahkan ke main.dart

    import 'package:firebase_core/firebase_core.dart';
    
    void main() async {
       WidgetsFlutterBinding.ensureInitialized();
       await Firebase.initializeApp();
       runApp(MyApp());
    }
    
11 RajuGupta Sep 04 2020 at 11:36

Jika Anda ingin menghubungkan firebase dengan aplikasi flutter, Anda perlu mengaktifkan firebase sebelum menggunakannya. Anda dapat mendeklarasikannya seperti yang diberikan di bawah ini dan ini akan membantu Anda menyelesaikan masalah

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

Dalam video tersebut Anda akan mendapatkan detail tentang kesalahan tersebut

7 FarrukhSajjad Sep 16 2020 at 06:38

Berikut adalah solusi sederhana untuk ini:

void main() async {
WidgetsFlutterBinding.ensureInitialized();
await Firebase.initializeApp();
runApp(MyApp(),);
}
4 Muhammad Sep 04 2020 at 19:35

@ Jawaban peter adalah Sempurna !! tetapi Jika Anda masih mendapatkan kesalahan dalam kode Anda dan mengikuti codelab firebase flutter, perhatikan bahwa tutorial tersebut sudah usang pada Agustus 2020 dan belum diperbarui. Anda perlu melakukan banyak perubahan lain seperti:

  • ganti .datadengan.data()
  • ganti updateDatadenganupdate

Semoga ini dapat membantu beberapa pemula seperti saya.

3 MehdiRezzagHebla Sep 03 2020 at 13:38

Jika Anda masih mengalami masalah saat meninggalkan aplikasi ke layar utama, Anda dapat menambahkan ini ke .dartfile apa pun menggunakan firebase:

class App extends StatelessWidget {
  
  final Future<FirebaseApp> _initialization = Firebase.initializeApp();

  @override
  Widget build(BuildContext context) {

Atau dalam kasus 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();
  }
}

Untuk informasi lebih lanjut, periksa tautan ini .

3 J.Saw Oct 23 2020 at 15:06

Jika Anda mengikuti jawaban Peter dan masih mendapatkan kesalahan yang sama, periksa untuk memastikan apa pun yang Anda miliki di mainfungsi Anda muncul setelah await Firebase.initializeApp()panggilan, seperti:

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await Firebase.initializeApp();
  FirebaseCrashlytics.instance.setCrashlyticsCollectionEnabled(true);
  FlutterError.onError = FirebaseCrashlytics.instance.recordFlutterError;
  runApp(MyApp());
}
2 AbdelrahmanTarek Sep 11 2020 at 04:14

Pertama tambahkan ketergantungan ini:

firebase_core :

2: dalam fungsi utama proyek tambahkan 2 baris ini dan buat fungsi asinkron

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

sekarang Anda dapat menggunakan firebase secara normal di file atau widget apa pun dalam proyek.

Widget FutureBuilder juga akan berfungsi, tetapi Anda harus menambahkannya setiap kali ingin mengakses firebase.

1 giftmarimo Sep 29 2020 at 07:13

Anda perlu menambahkan await Firebase.initializeApp();yang merupakan file Future. Lakukan di dalam file dart yang menjalankan fungsi Firebase Anda seperti di bawah ini:

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

Future<void> main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await Firebase.initializeApp();
  runApp(MaterialApp());
}