Firebase Uygulaması '[VARSAYILAN]' oluşturulmadı - Flutter ve Firebase'de Firebase.initializeApp () çağrısı yapın


142

Bir flutter Uygulaması oluşturuyorum ve Firebase'i entegre ettim ancak kaydolmak, giriş yapmak veya çıkış yapmak için bir düğmeyi tıkladığımda bu hatayı almaya devam ediyorum. Başkalarının da aynı soruyu sorduğunu gördüm ama hiçbiri benim için işe yaramıyor. Flutter ve android stüdyosu kullanıyorum. Herhangi bir yardımcı olabilir mi?

Bu kodumun bir alıntıdır

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

Aşağıda atılan istisna var

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

Yanıtlar:


333

17 Ağustos 2020'den İtibaren

Tüm Firebase sürümleri güncellendi ve artık Firebase.initializeApp()herhangi bir Firebase ürününü kullanmadan önce aramanız gerekiyor , örneğin:

İlk olarak, tüm Firebase ürünleri artık firebase_coresürüme (0.5.0+) bağlı olduğundan, onu pubspec.yamldosyaya eklemeniz gerekir :

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

O halde aramanız gerekir Firebase.initializeApp():

İlk Örnek

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

Firestore ile İkinci Örnek:

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

Üçüncü Örnek:

Başlatın ve initState()ardından yöntemi çağıracak setState()olan çağırın build().

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

Dördüncü Örnek:

Çağrıldıktan main()sonra yöntemde başlatWidgetsFlutterBinding.ensureInitialized();

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

Not : Yalnızca bir initializeApp()kez aramanız gerekir


38
4. örnek bu olmalıdır. Sadece eşzamansız eklemeyi unutmayın. Gecikmenin fark edilir olup olmadığını merak ediyorum.
Ryde

12
Evet, dördüncü örnek en iyisidir, sadece tüm yolları gösterdiği düşünülmüştür, ikincisi de iyidir çünkü aynı FutureBuilder'daki yangın deposundan veya gerçek zamanlı veritabanından ilk verileri almadan önce başlatabilirsiniz
Peter Haddad

4
Teşekkürler, # 4 kullanılarak çalışır. Ancak "geri" düğmesine basarsanız, uygulamaya geri döndüğünüzde, "Firebase Uygulaması Yok" [VARSAYILAN] "oluşturulduğunda aynı şeyi söyler - main () içinde olsa bile Firebase.initializeApp () 'yi çağırın
Octet

3
@MichaelDiCioccio flutter çerçevesi, flutter motoruyla etkileşime girebilmek için widgetbinding'i kullandı. Aradığınızda ensureInitislizedbunun bir örneğini oluşturur Widgetbindingve o zamandan beri Firebase.initializeApp()ihtiyaçlarını yerli çağırmak için bir platform kanallarını kullanmak sonra u bağlayıcı inialize gerekir. api.flutter.dev/flutter/widgets/WidgetsFlutterBinding/… (platform kanalı flutter motorunda)
Peter Haddad

2
# 4 Sağlayıcılarla çalışmıyor gibi görünüyor (başlangıçta olduğu gibi aynı hata mesajı)
kazara

49
  1. Pubspec.yaml adresine ekle

    firebase_core :
    
  2. main.dart'a ekle

    import 'package:firebase_core/firebase_core.dart';
    
    void main() async {
       WidgetsFlutterBinding.ensureInitialized();
       await Firebase.initializeApp();
       runApp(MyApp());
    }
    

1
Bu satırlar şunu verecektir: lib / main.dart: 6: 9: Hata: Getter bulunamadı: 'Firebase'. Firebase.initializeApp () bekliyor; ^^^^^^^^
Kaspar L. Palgi

Firebase_core'u aktarmayı unuttum. Bunu yaptım. Şimdi: Bu satırlar şunu verecektir: E / flutter (24294): [ERROR: flutter / lib / ui / ui_dart_state.cc (166)] İşlenmemiş İstisna: [çekirdek / uygulama yok] Firebase Uygulaması yok '[VARSAYILAN]' oluşturuldu -
Firebase.initializeApp

Burada firebase.google.com/support/release-notes/android yazıyor ki: Firebase Android kitaplığı firebase-core artık gerekli değil. Bu SDK, Google Analytics için Firebase SDK'sını içeriyordu. Şimdi, Analytics'i veya Analytics kullanımını öneren bir ürünü kullanmak için (aşağıdaki tabloya bakın), Analytics bağımlılığını açıkça eklemeniz gerekir: com.google.firebase: firebase-analytics: 17.5.0 veya com.google.firebase: firebase -analytics-ktx: 17.5.0.
Kaspar L. Palgi

Ya initializeApp çökerse? Uygulama başlamayacak. Bu olası sorun hakkında hiçbir şey bulamadım.
Boris Salimov

@BorisSalimov initializeApp()Async bir çağrı olduğu için, uygulama başarısız olsa bile başlayacaktır
21rw

11

Firebase'i flutter uygulamasıyla bağlamak istiyorsanız, kullanmadan önce firebase'i başlangıç ​​durumuna getirmeniz gerekir. Aşağıda verildiği gibi ilan edebilirsiniz ve bu sorunu çözmenize yardımcı olacaktır.

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

Videoda hata hakkında ayrıntılı bilgi alacaksınız


Bu bana bir hata gösteriyor - Aşağıdaki NoSuchMethodError Builder oluşturucuya atıldı: I / flutter (5612): 'O zaman' yöntemi null'da çağrıldı. I / flutter (5612): Alıcı: null I / flutter (5612): Denenen arama: sonra (Kapanış: (dinamik) => Null)
Abir Ahsan

Lütfen bağlantıdaki videoyu takip edin, sorununuz çözülecektir. Hala hatayla karşılaşıyorsanız lütfen bana bildirin.
Raju Gupta

7

İşte bunun için basit bir çözüm:

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

4

@ peter'in cevabı mükemmel !! ancak yine de kodunuzda ve flutter firebase kod laboratuarında hata alıyorsanız, bu eğitimlerin Ağustos 2020 itibariyle güncel olmadığını ve henüz güncellenmediğini unutmayın. aşağıdakiler gibi birçok başka değişiklik yapmanız gerekir:

  • yerine .datasahip.data()
  • yerine updateDatasahipupdate

Umarım bu benim gibi yeni başlayanlara yardımcı olabilir.


3

Uygulamayı ana ekrana bıraktığınızda hala sorun yaşıyorsanız, bunu .dartfirebase kullanarak herhangi bir dosyaya ekleyebilirsiniz:

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

  @override
  Widget build(BuildContext context) {

Veya a durumunda 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();
  }
}

Daha fazla bilgi için bu bağlantıya bakın .


Belgelerle aynı prosedürü uygulasam bile hatayı alıyorum. İşte hata No Firebase App '[DEFAULT]' has been created - call Firebase.initializeApp() . Firebase'i durum bilgisi olan widget'ta zaten başlattım.
Vikrant Agrahari

3

Peter'ın cevabını takip ettiyseniz ve hala aynı hatayı alıyorsanız, mainfonksiyonunuzda bulunan başka herhangi bir şeyin await Firebase.initializeApp()aramadan sonra geldiğinden emin olun , örneğin:

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await Firebase.initializeApp();
  FirebaseCrashlytics.instance.setCrashlyticsCollectionEnabled(true);
  FlutterError.onError = FirebaseCrashlytics.instance.recordFlutterError;
  runApp(MyApp());
}

Teşekkürler. @ Peter'ın cevabı yardımcı oldu
Kobby İndirimi

2

1. bu bağımlılığı ekleyin:

firebase_core :

2: proje ana işlevinde bu 2 satırı ekleyin ve işlevi eşzamansız yapın

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

artık firebase'i projedeki herhangi bir dosya veya widget'ta normal olarak kullanabilirsiniz.

FutureBuilder widget'ı da çalışacaktır ancak firebase'e her erişmek istediğinizde onu eklemeniz gerekir.


1

await Firebase.initializeApp();Hangisinin a olduğunu eklemeniz gerekir Future. Firebase işlevinizi çalıştıran dart dosyasının içinde aşağıdaki gibi yapın:

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

Future<void> main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await Firebase.initializeApp();
  runApp(MaterialApp());
}
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.