कोई फायरबेस ऐप '[DEFAULT]' नहीं बनाया गया है - फ़्लटर और फायरग्रेज़ में Firebase.initializeApp () पर कॉल करें


181

मैं एक स्पंदन ऐप बना रहा हूं और मैंने फायरबेस को एकीकृत किया है लेकिन मुझे यह त्रुटि तब होती है जब मैं एक बटन पर क्लिक करता हूं या तो पंजीकरण, लॉगिन या लॉगआउट करता हूं। मैंने देखा है कि अन्य लोगों ने भी यही सवाल पूछा है लेकिन कोई भी मेरे लिए काम नहीं करता है। मैं स्पंदन और एंड्रॉइड स्टूडियो का उपयोग कर रहा हूं। क्या कोई मदद कर सकता है?

यह मेरे कोड का एक अंश है

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

नीचे अपवाद फेंका गया है

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

जवाबों:


409

17 अगस्त 2020 से शुरू हो रहा है

सभी फायरबेस संस्करण अपडेट किए गए हैं और अब आपको Firebase.initializeApp()किसी भी फायरबेस उत्पाद का उपयोग करने से पहले कॉल करना होगा , उदाहरण के लिए:

सबसे पहले, सभी फायरबेस उत्पाद अब firebase_coreसंस्करण (0.5.0+) पर निर्भर करते हैं , इसलिए आपको इसे pubspec.yamlफ़ाइल में जोड़ने की आवश्यकता है :

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

फिर आपको कॉल करना होगा Firebase.initializeApp():

पहला उदाहरण

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

फायरस्टार के साथ दूसरा उदाहरण:

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

तीसरा उदाहरण:

प्रारंभ में इसे initState()तब कॉल करें setState()जो build()विधि को कॉल करेगा ।

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

चौथा उदाहरण:

main()कॉल करने के बाद विधि में इसे प्रारंभ करेंWidgetsFlutterBinding.ensureInitialized();

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

नोट : आपको केवल initializeApp()एक बार कॉल करना है


47
चौथा उदाहरण यह होना चाहिए। बस async जोड़ना याद रखें। मुझे आश्चर्य है कि अगर देरी ध्यान देने योग्य है।
राइड

15
Yup 4th उदाहरण सबसे अच्छा है, बस सभी तरीकों को दिखाने के लिए सोचा गया है, दूसरा भी अच्छा है क्योंकि आप एक ही FutureBuilder में फायरस्टार या रीयलटाइम डेटाबेस से पहला डेटा प्राप्त करने से पहले शुरू कर सकते हैं
पीटर हद्दाद

5
धन्यवाद, यह # 4 का उपयोग करके काम करता है। लेकिन अगर आप "बैक" बटन को धक्का देते हैं, तो जब आप ऐप पर वापस जाते हैं, तो यह एक ही बात कहता है "नो फायरबेस ऐप '[DEFAULT]' बनाया गया है - फायरबेज.ऑनलाइनइज़ेटऐप () कॉल करें, भले ही यह मुख्य हो (
ऑक्टेट

4
@MichaelDiCioccio स्पंदन ढांचे के साथ इंटरैक्ट करने में सक्षम होने के लिए स्पंदनबाइंडिंग का उपयोग किया गया। जब आप कॉल करते हैं तो ensureInitislizedइसका एक उदाहरण बनता है Widgetbindingऔर जब से Firebase.initializeApp()देशी कॉल करने के लिए प्लेटफ़ॉर्म चैनलों का उपयोग करने की आवश्यकता होती है तब यू को बंधन को निष्क्रिय करने की आवश्यकता होती है। api.flutter.dev/flutter/widgets/WidgetsFlutterBinding/… (प्लेटफ़ॉर्म चैनल फ़्लटर इंजन में हैं)
पीटर

2
# 4 करता है (जैसा कि शुरू में एक ही त्रुटि संदेश) प्रदाताओं के साथ काम करने के लिए प्रतीत नहीं
त्याज्य

73
  1. Pubspec.yaml में जोड़ें

    firebase_core :
    
  2. main.dart में जोड़ें

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

1
ये पंक्तियाँ देंगी: lib / main.dart: 6: 9: Error: Getter not found: 'Firebase'। प्रतीक्षा करें Firebase.initializeApp (); ^^^^^^^^
कास्पर एल Palgi

मैं firebase_core imprt करना भूल गया। वह किया। अब: ये पंक्तियाँ दे देंगे: E / flutter (24294): [ERROR: flutter / lib / ui / ui_dart_state.cc (166)] अखंडित अपवाद: [core / no-app: 'Firebase App' [DEFAULT] 'किया गया है बनाया - कॉल Firebase.initializeApp ()
कास्पर एल पाल्गी

यह कहता है कि यहाँ firebase.google.com/support/release-notes/android है: Firebase Android लाइब्रेरी फ़ायरबॉस्-कोर की अब आवश्यकता नहीं है। इस SDK में Google Analytics के लिए Firebase SDK शामिल था। अब, Analytics या उत्पाद का उपयोग करने के लिए जो Analytics के उपयोग की अनुशंसा करता है (नीचे तालिका देखें), आपको स्पष्ट रूप से Analytics निर्भरता जोड़ने की आवश्यकता है: com.google.firebase: firebase-analytics: 17.5.0 या com.google.firebase: firebase -Analytics-KTX: 17.5.0।
कास्पर एल पाल्गी

अगर initializeApp क्रैश हो जाएगा तो क्या होगा? आवेदन wil शुरू नहीं हुआ। मुझे संभवतः इस समस्या के बारे में कुछ भी नहीं मिला।
बोरिस सालिमोव

@BorisSalimov क्योंकि initializeApp()एक async कॉल है, आवेदन विफल होने पर भी शुरू हो जाएगा
21rw

12

अगर आप फायरबेस को स्पंदन ऐप से जोड़ना चाहते हैं, तो उपयोग करने से पहले आपको फायरबेस को इनबिल्ट करना होगा। आप इसे नीचे दिए गए रूप में घोषित कर सकते हैं और इससे समस्या को हल करने में मदद मिलेगी

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

वीडियो में आपको त्रुटि के बारे में विस्तार से मिलेगा


यह मुझे एक त्रुटि दिखा रहा है - निम्नलिखित NoSuchMethodError को फेंक दिया गया था बिल्डर: I / flutter (5612): विधि 'तब' को शून्य पर बुलाया गया था। I / स्पंदन (5612): प्राप्तकर्ता: null I / स्पंदन (5612): कोशिश की गई कॉलिंग: तब (बंद करना: (गतिशील) => अशक्त)
Abir Ahsan

कृपया उस वीडियो का अनुसरण करें जो लिंक में है, आपका मुद्दा हल हो जाएगा। यदि अभी भी त्रुटि का सामना करना पड़ रहा है तो pls मुझे बताएं।
राजू गुप्ता

10

इसके लिए एक सरल उपाय यहां प्रस्तुत है:

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

6

@ पीटर का जवाब एकदम सही !! लेकिन अगर आपको अभी भी अपने कोड में त्रुटि मिलती है और फ़्लटर फायरबेस कोडेलैब का अनुसरण करते हैं, तो ध्यान दें कि वे ट्यूटोरियल अगस्त 2020 तक पुराने हो चुके हैं और अभी तक अपडेट नहीं हुए हैं। आपको कई अन्य परिवर्तन करने की आवश्यकता है जैसे:

  • के .dataसाथ बदलें.data()
  • के updateDataसाथ बदलेंupdate

आशा है कि यह मेरी तरह कुछ newbies में मदद कर सकता है।


6

यदि आपने पीटर के उत्तर का अनुसरण किया है और अभी भी वही त्रुटि हो रही है , तो कॉल के mainबाद आपके फ़ंक्शन में मौजूद कुछ भी सुनिश्चित करने के लिए जाँच await Firebase.initializeApp()करें, जैसे:

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

धन्यवाद। @ पीटर के जवाब ने हालांकि मदद की
कोबी डिस्काउंट

4

यदि आपको अभी भी समस्या है जब आप ऐप को मुख्य स्क्रीन पर छोड़ देते हैं, तो आप इसे .dartफायरबेस के उपयोग से किसी भी फ़ाइल में जोड़ सकते हैं :

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

  @override
  Widget build(BuildContext context) {

या के मामले में 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();
  }
}

अधिक जानकारी के लिए इस लिंक को देखें


1
मुझे त्रुटि मिल रही है भले ही मैं प्रलेखन के रूप में एक ही प्रक्रिया करूं। यहाँ त्रुटि है No Firebase App '[DEFAULT]' has been created - call Firebase.initializeApp() । मैंने पहले ही फायरबेस को स्टेटफुल विजेट में इनिशियलाइज़ कर दिया है।
विक्रांत अग्रहरी

3

1 इस निर्भरता को जोड़ें:

firebase_core :

2: प्रोजेक्ट में मुख्य फ़ंक्शन इन 2 लाइनों को जोड़ते हैं और फ़ंक्शन को async बनाते हैं

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

अब आप प्रोजेक्ट में किसी भी फाइल या विजेट में सामान्य रूप से फायरबेस का उपयोग कर सकते हैं।

FutureBuilder विजेट भी काम करेगा, लेकिन जब भी आप फायरबेस एक्सेस करना चाहते हैं, तो आपको इसे हर बार जोड़ना होगा।


2

आपको जोड़ने की जरूरत है await Firebase.initializeApp();जो एक है Future। इसे डार्ट फ़ाइल के अंदर करें जो आपके फायरबेस फ़ंक्शन को नीचे की तरह चला रहा है:

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

Future<void> main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await Firebase.initializeApp();
  runApp(MaterialApp());
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.