我刚刚在我的 flutter 应用程序中实现了 firebase 身份验证,但是当我运行该应用程序时,它没有启动。我不知道出了什么问题,有人可以指导我在哪里可以更改代码。在我的应用程序中,我实现了包装文件,在其中检查用户的状态。
Main.dart
import 'package:firebase_core/firebase_core.dart';
import 'package:flutter/material.dart';
import 'package:stream/wrapper.dart';
void main() async {
await Firebase.initializeApp();
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
@override
Widget build(BuildContext context) {
return MaterialApp(
debugShowCheckedModeBanner: false,
title: 'Firebase Auth',
theme: ThemeData(
colorScheme: ColorScheme.fromSeed(seedColor: Colors.blue),
useMaterial3: true,
),
home: Wrapper(),
);
}
}
wrapper.dart
import 'package:flutter/material.dart';
import 'package:firebase_auth/firebase_auth.dart';
import 'package:stream/home.dart';
import 'package:stream/login.dart';
class Wrapper extends StatefulWidget {
const Wrapper({super.key});
@override
State<Wrapper> createState() => _WrapperState();
}
class _WrapperState extends State<Wrapper> {
@override
Widget build(BuildContext context) {
return Scaffold(
body: StreamBuilder(
stream: FirebaseAuth.instance.authStateChanges(),
builder: (context, snapshot) {
if (snapshot.hasData) {
return Home();
} else {
return Login();
}
},
),
);
}
}
我只想使用 firebase 开始身份验证。
您应该在 void main() 函数中初始化 Flutter 绑定,如下所示:
void main() async {
WidgetsFlutterBinding.ensureInitialized();
await Firebase.initializeApp(
options: const FirebaseOptions(
apiKey: "Your apikey",
appId: "Your appId",
messagingSenderId: "Your messagingSenderId",
projectId: "Your projectId",
),
);
runApp(const MyApp());
}
说明:
WidgetsFlutterBinding.ensureInitialized(); 用于确保在发生任何其他操作之前初始化 Flutter 框架所需的绑定。当您尝试执行某些操作(例如访问存储或网络调用等特定于平台的服务)时,这一点尤其重要,这需要完全设置 Flutter 框架。
例如,如果您尝试初始化 Firebase 或任何其他需要特定于平台的初始化的插件,您通常会调用 WidgetsFlutterBinding.ensureInitialized();在应用程序的 main() 函数的开头或初始化这些插件之前。这可确保在执行任何特定于平台的代码之前设置必要的 Flutter 绑定。