import 'package:firebase_auth/firebase_auth.dart';
import 'package:firebase_core/firebase_core.dart';
import 'package:flutter/material.dart';
import 'package:keol_beta/providers/authservice.dart';
import 'package:keol_beta/screen/home.dart';
import 'package:keol_beta/screen/login.dart';
import 'package:provider/provider.dart';
void main() {
WidgetsFlutterBinding.ensureInitialized();
runApp(
ChangeNotifierProvider(
create: (context) => AuthService(),
child: MyApp(),
),
);
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Keol Beta',
theme: ThemeData(
primarySwatch: Colors.blue,
visualDensity: VisualDensity.adaptivePlatformDensity,
),
home: MyApp(),
debugShowCheckedModeBanner: false);
}
}
FutureBuilder<User> mainMethod(BuildContext context) {
return FutureBuilder(
future: Provider.of<AuthService>(context).getUser(),
builder: (BuildContext context, AsyncSnapshot snapshot) {
Firebase.initializeApp();
if (snapshot.connectionState == ConnectionState.done) {
if (snapshot.error != null) {
print("ini error di main");
return Text(snapshot.error.toString());
}
print("Connect Done " + snapshot.toString());
return snapshot.hasData
// ? HomePage(currentUser: snapshot.data)
// ? HomePage()
// : LoginPage();
? LoginPage()
: HomePage();
} else {
print("Connect Failure");
return Center(
child: Container(
child: CircularProgressIndicator(),
alignment: Alignment(0, 0),
),
);
}
},
);
}
class MyHomePage extends StatefulWidget {
MyHomePage({Key key, this.title}) : super(key: key);
final String title;
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
bool _initialized = false;
bool _error = false;
void initializeFlutterFire() async {
try {
await Firebase.initializeApp();
setState(() {
_initialized = true;
});
} catch (e) {
setState(() {
_error = true;
});
}
}
@override
void initState() {
initializeFlutterFire();
super.initState();
}
@override
Widget build(BuildContext context) {
if (_error) {
return showAlertDialog(context, "error");
}
if (!_initialized) {
return showAlertDialog(context, "loading");
}
return mainMethod(context);
}
}
showAlertDialog(BuildContext context, String value) {
Widget okButton = TextButton(
child: Text("OK"),
onPressed: () {},
);
AlertDialog alert = AlertDialog(
title: Text("Error"),
content: Text(value),
actions: [
okButton,
],
);
showDialog(
context: context,
builder: (BuildContext context) {
return alert;
},
);
}
所以,我正在为我的学士学位做我的最后一个项目,并且仍然是 Flutter 的新手。 我正在尝试使用
升级我的依赖项firebase_core: ^0.7.0
之前是 0.5.0,在新版本中,它需要初始化默认的 Firebase,我正在尝试这样做,但不知何故它出现了堆栈溢出错误。
快3天了我一无所获,有什么解决办法吗?
答案 0 :(得分:0)
在身份验证服务之前尝试 init firebase 应用程序:
void main() async {
WidgetsFlutterBinding.ensureInitialized();
await Firebase.initializeApp();
runApp(
ChangeNotifierProvider(
create: (context) => AuthService(),
child: MyApp(),
),
);
}
答案 1 :(得分:0)
我想我发现你的代码有什么问题。
根据 documentation,您应该在任何 Firebase 调用之前运行 await Firebase.initializeApp()
。
在您的代码中,您在调用 Provider.of<AuthService>(context).getUser()
之后调用它,我想(因为没有此文件的代码)使用 Firebase 身份验证代码。
您应该在使用 await Firebase.initializeApp()
关键字运行应用程序之前调用 await
,因为 Firebase.initializeApp()
返回 Future
。在进一步并在未初始化的对象上调用 Firebase 方法之前,完成此 Future 很重要。
void main() async {
WidgetsFlutterBinding.ensureInitialized();
await Firebase.initializeApp();
runApp(
ChangeNotifierProvider(
create: (context) => AuthService(),
child: MyApp(),
),
);
}