Firebase Uygulaması '[VARSAYILAN]' oluşturulmadı - Flutter ve Firebase'de Firebase.initializeApp () çağrısı yapın
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
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_core
sürüme (0.5.0+) bağlıdır , bu nedenle onu pubspec.yaml
dosyaya 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
Pubspec.yaml adresine ekle
firebase_core :
main.dart'a ekle
import 'package:firebase_core/firebase_core.dart'; void main() async { WidgetsFlutterBinding.ensureInitialized(); await Firebase.initializeApp(); runApp(MyApp()); }
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());
}
İşte bunun için basit bir çözüm:
void main() async {
WidgetsFlutterBinding.ensureInitialized();
await Firebase.initializeApp();
runApp(MyApp(),);
}
@ 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
.data
sahip.data()
- yerine
updateData
sahipupdate
Umarım bu benim gibi yeni başlayanlara yardımcı olabilir.
Uygulamayı ana ekrana bıraktığınızda hala sorun yaşıyorsanız, bunu .dart
firebase 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 .
Peter'ın cevabını takip ettiyseniz ve hala aynı hatayı alıyorsanız, main
fonksiyonunuzda 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());
}
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 pencere öğesinde normal olarak kullanabilirsiniz.
FutureBuilder widget'ı da çalışacaktır ancak firebase'e her erişmek istediğinizde onu eklemelisiniz.
await Firebase.initializeApp();
Hangisinin a olduğunu eklemeniz gerekir Future
. Bunu, 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());
}