Flutter身份验证插件firebase_sign_in的使用
Flutter身份验证插件firebase_sign_in的使用
如何在Android上集成
步骤1:配置Firebase项目
访问Firebase控制台(https://console.firebase.google.com/),创建一个新的Firebase项目或使用现有的项目。
将Android应用添加到您的Firebase项目,并按照指示下载google-services.json
文件。
将google-services.json
文件放置在Flutter项目的android/app
目录下。
步骤2:配置Android应用
打开android/build.gradle
文件,在依赖项部分添加以下内容:
classpath 'com.google.gms:google-services:4.3.10'
打开android/app/build.gradle
文件,在底部添加以下内容:
apply plugin: 'com.google.gms.google-services'
步骤3:在主函数中初始化Firebase
步骤4:实现登录逻辑
如何在iOS上集成
步骤1:配置Firebase项目
访问Firebase控制台(https://console.firebase.google.com/),创建一个新的Firebase项目或使用现有的项目。
将iOS应用添加到您的Firebase项目,并按照指示下载GoogleService-Info.plist
文件。
将GoogleService-Info.plist
文件放置在Flutter项目的ios/Runner
目录下。
步骤2:配置iOS应用
打开Xcode并导航到Flutter项目的ios/Runner
目录。打开Runner.xcworkspace
文件。
在Xcode中,选择左侧项目导航器中的“Runner”项目,然后选择“Runner”目标,并导航到“Signing & Capabilities”标签页。
如果尚未启用,则启用“Sign in with Apple”功能。
步骤3:在主函数中初始化Firebase
步骤4:实现登录逻辑
安装
- 将最新版本的包添加到您的
pubspec.yaml
文件中(并运行dart pub get
):
dependencies:
firebase_sign_in: ^0.0.16
- 导入包并在Flutter应用中使用它:
import 'package:firebase_sign_in/sociallogin.dart';
使用
- 使用
initialize
方法进行初始化:
FirebaseSetup.initialize(types: [SignupType.google, SignupType.apple]);
- 初始化
FirebaseSetup
类,并使用signin
和signout
方法:
FirebaseSetup firebaseSetup = FirebaseSetup(scopes: ['email']);
firebaseSetup.signin(type: SignupType.google);
firebaseSetup.signout(type: SignupType.google);
示例代码
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:firebase_sign_in/sociallogin.dart';
Future<void> main() async {
FirebaseSetup.initialize(types: [SignupType.google, SignupType.apple]);
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
useMaterial3: true,
),
debugShowCheckedModeBanner: false,
home: const GoogleSignin(),
);
}
}
class GoogleSignin extends StatefulWidget {
const GoogleSignin({Key? key}) : super(key: key);
[@override](/user/override)
State<GoogleSignin> createState() => _GoogleSigninState();
}
class _GoogleSigninState extends State<GoogleSignin> {
FirebaseSetup firebaseSetup = FirebaseSetup(scopes: ['email']);
String? username;
String? email;
String? profileUrl;
[@override](/user/override)
void initState() {
super.initState();
}
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
body: Container(
color: Colors.teal,
child: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
Visibility(
visible: email?.isEmpty == false,
child: Column(
children: [
ClipOval(
child: Image.network(
profileUrl ?? '',
height: 100,
width: 100,
),
),
SizedBox(height: 20),
Text(username ?? '',
style: TextStyle(fontSize: 20, fontWeight: FontWeight.bold)),
SizedBox(height: 20),
Text(email ?? '', style: TextStyle(fontSize: 16)),
SizedBox(height: 50),
],
),
),
Visibility(
visible: email?.isEmpty ?? true,
child: InkWell(
onTap: () async {
final account = await firebaseSetup.signin(type: SignupType.google);
setState(() {
this.username = account?.userName;
this.email = account?.email;
this.profileUrl = account?.profileUrl;
});
},
child: Container(
height: 50,
width: 200,
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.circular(10)),
child: Row(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
Image.asset(
'assets/images/googleIcon.png',
height: 20,
width: 20,
),
SizedBox(width: 10),
Text('Sign In with Google'),
],
),
),
),
),
SizedBox(height: 50),
TextButton(
onPressed: () {
firebaseSetup.signout(type: SignupType.google);
setState(() {
email = '';
username = '';
profileUrl = '';
});
},
child: Text('Logout'),
),
],
),
),
),
);
}
}
更多关于Flutter身份验证插件firebase_sign_in的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter身份验证插件firebase_sign_in的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
在Flutter中使用Firebase进行身份验证是一个常见的需求,firebase_auth
插件是官方提供的用于处理身份验证的插件。以下是如何在Flutter项目中使用 firebase_auth
插件进行身份验证的步骤。
1. 添加依赖
首先,你需要在 pubspec.yaml
文件中添加 firebase_auth
和 firebase_core
依赖。
dependencies:
flutter:
sdk: flutter
firebase_core: latest_version
firebase_auth: latest_version
然后运行 flutter pub get
来安装依赖。
2. 初始化 Firebase
在 main.dart
文件中,初始化 Firebase。
import 'package:firebase_core/firebase_core.dart';
import 'package:flutter/material.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
await Firebase.initializeApp();
runApp(MyApp());
}
class MyApp extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
title: 'Firebase Auth Demo',
home: AuthScreen(),
);
}
}
3. 创建身份验证界面
创建一个简单的身份验证界面,包含电子邮件和密码输入框,以及登录和注册按钮。
import 'package:flutter/material.dart';
import 'package:firebase_auth/firebase_auth.dart';
class AuthScreen extends StatefulWidget {
[@override](/user/override)
_AuthScreenState createState() => _AuthScreenState();
}
class _AuthScreenState extends State<AuthScreen> {
final _emailController = TextEditingController();
final _passwordController = TextEditingController();
Future<void> _signIn() async {
try {
UserCredential userCredential = await FirebaseAuth.instance.signInWithEmailAndPassword(
email: _emailController.text,
password: _passwordController.text,
);
print('User signed in: ${userCredential.user!.uid}');
} on FirebaseAuthException catch (e) {
print('Failed to sign in: ${e.message}');
}
}
Future<void> _signUp() async {
try {
UserCredential userCredential = await FirebaseAuth.instance.createUserWithEmailAndPassword(
email: _emailController.text,
password: _passwordController.text,
);
print('User registered: ${userCredential.user!.uid}');
} on FirebaseAuthException catch (e) {
print('Failed to register: ${e.message}');
}
}
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Firebase Auth'),
),
body: Padding(
padding: const EdgeInsets.all(16.0),
child: Column(
children: [
TextField(
controller: _emailController,
decoration: InputDecoration(labelText: 'Email'),
),
TextField(
controller: _passwordController,
decoration: InputDecoration(labelText: 'Password'),
obscureText: true,
),
SizedBox(height: 20),
ElevatedButton(
onPressed: _signIn,
child: Text('Sign In'),
),
ElevatedButton(
onPressed: _signUp,
child: Text('Sign Up'),
),
],
),
),
);
}
}
4. 处理身份验证状态
你可以使用 FirebaseAuth.instance.authStateChanges()
来监听用户的身份验证状态,并根据状态更新UI。
import 'package:flutter/material.dart';
import 'package:firebase_auth/firebase_auth.dart';
class AuthWrapper extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
return StreamBuilder<User?>(
stream: FirebaseAuth.instance.authStateChanges(),
builder: (context, snapshot) {
if (snapshot.connectionState == ConnectionState.active) {
User? user = snapshot.data;
if (user == null) {
return AuthScreen();
} else {
return HomeScreen(user);
}
}
return CircularProgressIndicator();
},
);
}
}
然后修改 main.dart
,使用 AuthWrapper
作为应用的根组件。
void main() async {
WidgetsFlutterBinding.ensureInitialized();
await Firebase.initializeApp();
runApp(MyApp());
}
class MyApp extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
title: 'Firebase Auth Demo',
home: AuthWrapper(),
);
}
}
5. 创建主页
创建一个简单的主页,显示当前用户的信息,并提供注销功能。
import 'package:flutter/material.dart';
import 'package:firebase_auth/firebase_auth.dart';
class HomeScreen extends StatelessWidget {
final User user;
HomeScreen(this.user);
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Home'),
actions: [
IconButton(
icon: Icon(Icons.logout),
onPressed: () async {
await FirebaseAuth.instance.signOut();
},
),
],
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Text('Welcome, ${user.email}'),
],
),
),
);
}
}