我知道这个问题之前已经被问过 100 次了,是的,我已经检查过这些问题,但我不知道为什么我的 Firebase 无法初始化。如果有人可以看一下并提供一些见解,它只是我此时尝试连接的基本 flutter 生成的应用程序......
下面未列出,但尝试过在 setState({})
、FutureBuilder()
中进行初始化,以及重新制作新的 FireStore 项目/db。
google-services.json 位置:
主要:
import 'package:flutter/material.dart';
import 'package:firebase_auth/firebase_auth.dart';
import 'package:firebase_core/firebase_core.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
await Firebase.initializeApp();
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
visualDensity: VisualDensity.adaptivePlatformDensity,
),
home: MyHomePage(title: 'Flutter Demo Home Page'),
);
}
}
class MyHomePage extends StatefulWidget {
MyHomePage({Key key, this.title}) : super(key: key);
final String title;
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
int _counter = 0;
void _incrementCounter() {
setState(() {
_counter++;
});
}
@override
Widget build(BuildContext context) {
Scaffold(
appBar: AppBar(
title: Text(widget.title),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text(
'You have pushed the button this many times:',
),
Text(
'$_counter',
style: Theme.of(context).textTheme.headline4,
),
],
),
),
floatingActionButton: FloatingActionButton(
onPressed: _incrementCounter,
tooltip: 'Increment',
child: Icon(Icons.add),
), // This trailing comma makes auto-formatting nicer for build methods.
);
}
}
公共(public)规范
dependencies:
flutter:
sdk: flutter
firebase_core:
firebase_auth: ^0.18.4+1
firebase_storage: ^4.0.1
cupertino_icons: ^1.0.0
构建\gradle:
buildscript {
ext.kotlin_version = '1.3.50'
repositories {
google()
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:3.5.0'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
classpath 'com.google.gms:google-services:4.3.4'
}
}
allprojects {
repositories {
google()
jcenter()
}
}
rootProject.buildDir = '../build'
subprojects {
project.buildDir = "${rootProject.buildDir}/${project.name}"
}
subprojects {
project.evaluationDependsOn(':app')
}
task clean(type: Delete) {
delete rootProject.buildDir
}
应用程序\构建\gradle:
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle"
android {
compileSdkVersion 29
sourceSets {
main.java.srcDirs += 'src/main/kotlin'
}
lintOptions {
disable 'InvalidPackage'
}
defaultConfig {
applicationId "com.example.fish_app"
minSdkVersion 16
targetSdkVersion 29
versionCode flutterVersionCode.toInteger()
versionName flutterVersionName
multiDexEnabled true
}
buildTypes {
release {
signingConfig signingConfigs.debug
}
}
}
flutter {
source '../..'
}
dependencies {
implementation 'com.android.support:multidex:1.0.3'
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
implementation platform('com.google.firebase:firebase-bom:26.1.1')
implementation 'com.google.firebase:firebase-analytics'
}
最佳答案
您可以创建一个方法来初始化 firebase 并使用该方法作为 Future Builder 的 future。你可以这样做:-
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: MyHome(),
);}
}
// ignore if some imports are not present
class MyHome extends StatelessWidget{
//initializing firebase in an method and giving it as an future
initializeFirebase() async{
await Firebase.initializeApp();
}
@override
Widget build(BuildContext context){
return FutureBuilder(
future:initializeFirebase(),
builder:(context,snapshot){
if(snapshot.connectionState==ConnectionState.active){
// return any Widget you like
return HomePage();//navigate to any page say HomePage
}
else{
return Center(child:Text("Loading..."));
}
}
);
}
}
关于Firebase 尚未正确初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65272035/