Flutter简化Firebase认证插件firebase_auth_simplify的使用

发布于 1周前 作者 itying888 来自 Flutter

Flutter简化Firebase认证插件firebase_auth_simplify的使用

1. 简介

firebase_auth_simplify 是一个简化 Firebase 认证流程的包装包。它将多个步骤的代码简化为一行,使得第三方登录(如 Google、Facebook、Kakao 等)更加容易实现。如果你希望减少代码量并简化集成过程,这个插件非常适合你。

2. 适用场景

  • 谁应该使用这个插件?

    • 如果你需要快速集成多种第三方登录方式,并且不希望编写冗余的代码,那么 firebase_auth_simplify 是一个不错的选择。
    • 如果你只使用 Firebase 提供的原生登录方式(如邮箱、电话),建议直接使用 firebase_auth 包。
  • 谁不应该使用这个插件?

    • 如果你的项目只需要 Firebase 提供的原生登录方式(如邮箱、电话),直接使用 firebase_auth 包会更轻量。
    • 如果你只使用部分第三方登录方式(如仅使用 Google 和 Facebook),但不想引入其他不必要的依赖包,建议手动集成这些登录方式。

3. 目前支持的登录方式

  • ✅ 邮箱
  • ✅ 电话
  • ✅ Google
  • ❌ Google Play Games
  • ✅ Facebook
  • ✅ Kakao
  • ✅ Apple
  • ❌ GameCenter
  • ❌ Twitter
  • ❌ Github
  • ❌ Line

4. 使用示例

4.1 初始化 Firebase

首先,确保你已经按照 Firebase 官方文档 的说明完成了 Firebase 的初始化配置。你需要在 Android/build.gradleiOS/Runner/Info.plist 中添加必要的配置。

import 'package:firebase_core/firebase_core.dart';

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await Firebase.initializeApp();
  runApp(MyApp());
}
4.2 简单的登录/注册/登出示例
4.2.1 邮箱登录/注册
import 'package:firebase_auth_simplify/firebase_auth_simplify.dart';

// 注册
FirebaseEmailAuthAPI(email: "user@example.com", password: "password123").signUp();

// 登录
FirebaseEmailAuthAPI(email: "user@example.com", password: "password123").signIn();
4.2.2 Google 登录
import 'package:firebase_auth_simplify/firebase_auth_simplify.dart';

// 登录
FirebaseGoogleAuthAPI().signIn();
4.2.3 Facebook 登录
import 'package:firebase_auth_simplify/firebase_auth_simplify.dart';

// 登录
FirebaseFacebookAuthAPI().signIn();
4.2.4 Kakao 登录
import 'package:firebase_auth_simplify/firebase_auth_simplify.dart';

// 登录
FirebaseKakaoAuthAPI().signIn();
4.2.5 登出
// 使用 FirebaseAuthProvider 进行登出,它会同时从 Firebase 和第三方提供商中登出
FirebaseAuthProvider.instance.signOut();
4.3 使用包装器(推荐)

FirebaseAuthProvider 提供了更高级的功能,例如自动管理第三方提供商的登出和账户链接。

4.3.1 登录/注册
// 使用包装器进行登录
FirebaseAuthProvider.instance.signInWith(FirebaseGoogleAuthAPI());

// 使用包装器进行注册(仅适用于 Firebase 提供的登录方式,如邮箱)
FirebaseAuthProvider.instance.signUpWith(FirebaseEmailAuthAPI(email: "user@example.com", password: "password123"));
4.3.2 账户链接
// 将当前用户与新的登录方式链接
FirebaseAuthProvider.instance.linkCurrentUserWith(FirebaseGoogleAuthAPI());
4.3.3 账户解绑
// 解绑当前用户的某个登录方式
FirebaseAuthProvider.instance.unlinkCurrentUserFrom(FirebaseGoogleAuthAPI());
4.4 完整示例 Demo

以下是一个完整的示例应用,展示了如何使用 firebase_auth_simplify 实现登录、注册和登出功能。

import 'package:flutter/material.dart';
import 'package:firebase_core/firebase_core.dart';
import 'package:firebase_auth/firebase_auth.dart';
import 'package:provider/provider.dart';
import 'package:firebase_auth_simplify/firebase_auth_simplify.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: 'Flutter Firebase Auth Simplify Example',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: AppPage(),
    );
  }
}

class AppPage extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    print(">>> Build [App] Page");

    return Scaffold(
      appBar: AppBar(title: Text("Firebase Auth Example")),
      body: _buildBody(),
    );
  }

  Widget _buildBody() {
    return StreamBuilder<User>(
      stream: FirebaseAuth.instance.authStateChanges(),
      builder: (_, snapshot) {
        if (snapshot.connectionState == ConnectionState.active) {
          if (snapshot.data == null) {
            return LoginPage();
          } else {
            return LandingPage();
          }
        } else {
          return _buildLoadingIndicator();
        }
      },
    );
  }

  Widget _buildLoadingIndicator() {
    return Center(
      child: SizedBox(
        child: CircularProgressIndicator(),
        height: 25,
        width: 25,
      ),
    );
  }
}

class LoginPage extends StatelessWidget {
  final TextEditingController _emailController = TextEditingController();
  final TextEditingController _passwordController = TextEditingController();

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Padding(
      padding: const EdgeInsets.all(16.0),
      child: Column(
        mainAxisAlignment: MainAxisAlignment.center,
        children: [
          TextField(
            controller: _emailController,
            decoration: InputDecoration(labelText: "Email"),
          ),
          TextField(
            controller: _passwordController,
            decoration: InputDecoration(labelText: "Password"),
            obscureText: true,
          ),
          SizedBox(height: 20),
          ElevatedButton(
            onPressed: () async {
              try {
                await FirebaseEmailAuthAPI(
                  email: _emailController.text,
                  password: _passwordController.text,
                ).signIn();
                ScaffoldMessenger.of(context).showSnackBar(SnackBar(content: Text("Login successful")));
              } catch (e) {
                ScaffoldMessenger.of(context).showSnackBar(SnackBar(content: Text("Login failed: $e")));
              }
            },
            child: Text("Login"),
          ),
          ElevatedButton(
            onPressed: () async {
              try {
                await FirebaseEmailAuthAPI(
                  email: _emailController.text,
                  password: _passwordController.text,
                ).signUp();
                ScaffoldMessenger.of(context).showSnackBar(SnackBar(content: Text("Sign up successful")));
              } catch (e) {
                ScaffoldMessenger.of(context).showSnackBar(SnackBar(content: Text("Sign up failed: $e")));
              }
            },
            child: Text("Sign Up"),
          ),
          ElevatedButton(
            onPressed: () async {
              try {
                await FirebaseAuthProvider.instance.signInWith(FirebaseGoogleAuthAPI());
                ScaffoldMessenger.of(context).showSnackBar(SnackBar(content: Text("Google Login successful")));
              } catch (e) {
                ScaffoldMessenger.of(context).showSnackBar(SnackBar(content: Text("Google Login failed: $e")));
              }
            },
            child: Text("Login with Google"),
          ),
          ElevatedButton(
            onPressed: () async {
              try {
                await FirebaseAuthProvider.instance.signInWith(FirebaseFacebookAuthAPI());
                ScaffoldMessenger.of(context).showSnackBar(SnackBar(content: Text("Facebook Login successful")));
              } catch (e) {
                ScaffoldMessenger.of(context).showSnackBar(SnackBar(content: Text("Facebook Login failed: $e")));
              }
            },
            child: Text("Login with Facebook"),
          ),
        ],
      ),
    );
  }
}

class LandingPage extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return Center(
      child: Column(
        mainAxisAlignment: MainAxisAlignment.center,
        children: [
          Text("Welcome! You are logged in."),
          ElevatedButton(
            onPressed: () async {
              try {
                await FirebaseAuthProvider.instance.signOut();
                ScaffoldMessenger.of(context).showSnackBar(SnackBar(content: Text("Logout successful")));
              } catch (e) {
                ScaffoldMessenger.of(context).showSnackBar(SnackBar(content: Text("Logout failed: $e")));
              }
            },
            child: Text("Logout"),
          ),
        ],
      ),
    );
  }
}

更多关于Flutter简化Firebase认证插件firebase_auth_simplify的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter简化Firebase认证插件firebase_auth_simplify的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,下面是一个关于如何使用 firebase_auth_simplify 插件来简化 Firebase 认证的 Flutter 代码示例。这个插件可以大大简化 Firebase 认证流程,让开发者能够更轻松地处理用户登录和注册功能。

首先,确保你的 Flutter 项目已经添加了 firebase_auth_simplify 依赖。在 pubspec.yaml 文件中添加以下依赖:

dependencies:
  flutter:
    sdk: flutter
  firebase_auth_simplify: ^latest_version  # 请替换为最新的版本号

然后运行 flutter pub get 来获取依赖。

接下来,配置 Firebase 项目。确保你已经在 Firebase 控制台中设置了你的项目,并下载了 google-services.json 文件(对于 Android)和 GoogleService-Info.plist 文件(对于 iOS),并将它们放置在相应的项目目录中。

在你的 Flutter 项目中,创建一个新的 Dart 文件(例如 auth_service.dart),并在其中配置和使用 firebase_auth_simplify 插件。以下是一个示例代码:

import 'package:flutter/material.dart';
import 'package:firebase_auth_simplify/firebase_auth_simplify.dart';

class AuthService {
  final FirebaseAuthSimplify _firebaseAuthSimplify = FirebaseAuthSimplify();

  // 用户注册
  Future<void> signUpWithEmailAndPassword(String email, String password) async {
    try {
      await _firebaseAuthSimplify.createUserWithEmailAndPassword(email: email, password: password);
      print("User registered successfully");
    } catch (e) {
      print("Error registering user: ${e.message}");
    }
  }

  // 用户登录
  Future<void> signInWithEmailAndPassword(String email, String password) async {
    try {
      await _firebaseAuthSimplify.signInWithEmailAndPassword(email: email, password: password);
      print("User logged in successfully");
    } catch (e) {
      print("Error logging in user: ${e.message}");
    }
  }

  // 登出用户
  Future<void> signOut() async {
    try {
      await _firebaseAuthSimplify.signOut();
      print("User signed out successfully");
    } catch (e) {
      print("Error signing out user: ${e.message}");
    }
  }

  // 获取当前用户信息
  User? getCurrentUser() {
    return _firebaseAuthSimplify.currentUser;
  }
}

在你的主应用文件中(例如 main.dart),你可以使用 AuthService 类来处理用户认证。以下是一个简单的示例:

import 'package:flutter/material.dart';
import 'auth_service.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  final AuthService _authService = AuthService();

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Firebase Auth Simplify Demo'),
        ),
        body: Padding(
          padding: const EdgeInsets.all(16.0),
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: [
              ElevatedButton(
                onPressed: () async {
                  await _authService.signUpWithEmailAndPassword('test@example.com', 'password123');
                },
                child: Text('Register'),
              ),
              SizedBox(height: 16),
              ElevatedButton(
                onPressed: () async {
                  await _authService.signInWithEmailAndPassword('test@example.com', 'password123');
                },
                child: Text('Login'),
              ),
              SizedBox(height: 16),
              ElevatedButton(
                onPressed: () async {
                  await _authService.signOut();
                },
                child: Text('Logout'),
              ),
            ],
          ),
        ),
      ),
    );
  }
}

在这个示例中,我们创建了一个 AuthService 类,该类封装了使用 firebase_auth_simplify 插件进行用户注册、登录和登出的方法。然后在 MyApp 类中,我们创建了三个按钮来分别触发注册、登录和登出操作。

请注意,这只是一个简单的示例,实际项目中你可能需要添加更多的错误处理和用户界面元素。另外,确保你已经在 Firebase 控制台中正确配置了电子邮件/密码认证提供者。

回到顶部