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:实现登录逻辑

安装

  1. 将最新版本的包添加到您的pubspec.yaml文件中(并运行dart pub get):
dependencies:
  firebase_sign_in: ^0.0.16
  1. 导入包并在Flutter应用中使用它:
import 'package:firebase_sign_in/sociallogin.dart';

使用

  1. 使用initialize方法进行初始化:
FirebaseSetup.initialize(types: [SignupType.google, SignupType.apple]);
  1. 初始化FirebaseSetup类,并使用signinsignout方法:
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

1 回复

更多关于Flutter身份验证插件firebase_sign_in的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


在Flutter中使用Firebase进行身份验证是一个常见的需求,firebase_auth 插件是官方提供的用于处理身份验证的插件。以下是如何在Flutter项目中使用 firebase_auth 插件进行身份验证的步骤。

1. 添加依赖

首先,你需要在 pubspec.yaml 文件中添加 firebase_authfirebase_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}'),
          ],
        ),
      ),
    );
  }
}
回到顶部