Flutter Firebase认证插件easy_firebase_auth的使用

Flutter Firebase认证插件easy_firebase_auth的使用

在您的Flutter应用中集成Firebase认证功能可以非常简单。本指南将介绍如何使用easy_firebase_auth插件来实现电子邮件登录、Google登录、Apple登录以及匿名登录。

支持的Firebase认证方法

  • 使用电子邮件登录
  • 使用Google登录
  • 使用Apple登录
  • 匿名登录

基本用法

首先,确保您已经在项目中集成了Firebase,并添加了easy_firebase_auth依赖。您可以在pubspec.yaml文件中添加以下依赖:

dependencies:
  flutter:
    sdk: flutter
  firebase_core: ^latest_version
  easy_firebase_auth: ^latest_version

然后,在您的main.dart文件中进行初始化和配置:

import 'package:firebase_core/firebase_core.dart';
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'package:easy_firebase_auth/easy_firebase_auth.dart';

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await Firebase.initializeApp();
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return AuthProvider(
      autoSignInAnonymously: false,
      splashScreenDurationMillis: 500,
      child: MaterialApp(
          home: AuthManagerWidget(
        splashScreen: SplashScreen(),
        loggedScreen: LoggedScreen(),
        notLoggedScreen: NotLoggedScreen(),
        actionsAfterLogIn: (method, user) async {
          // 在这里初始化用户数据
        },
        actionsBeforeLogOut: (user) async {
          // 停止监听器,移除通知令牌...
        },
      )),
    );
  }
}

class SplashScreen extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      backgroundColor: Colors.black,
      body: Center(
        child: Text(
          "SPLASH SCREEN",
          style: TextStyle(color: Colors.white),
        ),
      ),
    );
  }
}

class LoggedScreen extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    AuthState authState = Provider.of<AuthState>(context);
    return Scaffold(
        backgroundColor: Colors.blue,
        body: Center(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: [
              Text("${authState.uid}\nis anonymous: ${authState.isAnonymous}\nname: ${authState.name}", textAlign: TextAlign.center,),
              RaisedButton(
                onPressed: () {
                  authState.signOut();
                },
                child: Text('Sign out'),
              ),
              RaisedButton(
                onPressed: () {
                  authState.signInWithEmail("l@g.com", "123456");
                },
                child: Text('Reauthenticate with email'),
              ),
              RaisedButton(
                onPressed: () {
                  authState.signInGoogle();
                },
                child: Text('Reauthenticate with google'),
              ),
              RaisedButton(
                onPressed: () {
                  authState.changeName("Name ${DateTime.now().millisecondsSinceEpoch}");
                },
                child: Text('Change name'),
              ),
            ],
          ),
        ));
  }
}

class NotLoggedScreen extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    // 您可以设置自定义字符串
    // 您可以通过Markdown添加应用程序的隐私政策,其中包含必要的链接
    AuthStrings authStrings = AuthStrings.spanish(
        privacyMarkdown:
            "Al continuar aceptas la [política de privacidad](https://myPrivacyUrl.com) "
            "y las [condiciones de servicio](https://myTermsUrl.com).");

    return LoginScreen(
      authStrings: authStrings,
      backgroundColor: Colors.purple,
      expandedWidget: Center(
        child: Container(
          height: 200,
          width: 300,
          color: Colors.red,
        ),
      ),
    );
  }
}

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

1 回复

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


easy_firebase_auth 是一个简化 Firebase 认证流程的 Flutter 插件。它提供了一个简单易用的 API,帮助开发者快速集成 Firebase 认证功能,而无需处理复杂的 Firebase SDK 配置和认证逻辑。

以下是使用 easy_firebase_auth 插件的步骤:

1. 添加依赖

首先,在 pubspec.yaml 文件中添加 easy_firebase_auth 依赖:

dependencies:
  flutter:
    sdk: flutter
  easy_firebase_auth: ^latest_version

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

2. 初始化 Firebase

在使用 easy_firebase_auth 之前,你需要在 Flutter 项目中初始化 Firebase。通常,你需要在 main.dart 文件中进行初始化:

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
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(),
    );
  }
}

3. 使用 easy_firebase_auth 进行认证

接下来,你可以在应用中使用 easy_firebase_auth 进行用户认证。以下是一个简单的示例,展示了如何使用电子邮件和密码进行注册和登录。

注册用户

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

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

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Register'),
      ),
      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: () async {
                try {
                  await EasyFirebaseAuth().registerWithEmailAndPassword(
                    email: _emailController.text,
                    password: _passwordController.text,
                  );
                  Navigator.of(context).pop(); // 注册成功后返回登录页面
                } catch (e) {
                  ScaffoldMessenger.of(context).showSnackBar(
                    SnackBar(content: Text('Registration failed: $e')),
                  );
                }
              },
              child: Text('Register'),
            ),
          ],
        ),
      ),
    );
  }
}

登录用户

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

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

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Login'),
      ),
      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: () async {
                try {
                  await EasyFirebaseAuth().signInWithEmailAndPassword(
                    email: _emailController.text,
                    password: _passwordController.text,
                  );
                  Navigator.of(context).pushReplacementNamed('/home'); // 登录成功后跳转到主页
                } catch (e) {
                  ScaffoldMessenger.of(context).showSnackBar(
                    SnackBar(content: Text('Login failed: $e')),
                  );
                }
              },
              child: Text('Login'),
            ),
          ],
        ),
      ),
    );
  }
}

4. 监听认证状态

你可以使用 EasyFirebaseAuth 来监听用户的认证状态,以便在用户登录或注销时更新 UI。

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

class HomePage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Home'),
      ),
      body: Center(
        child: StreamBuilder(
          stream: EasyFirebaseAuth().authStateChanges(),
          builder: (context, snapshot) {
            if (snapshot.hasData) {
              return Text('User is logged in');
            } else {
              return Text('User is logged out');
            }
          },
        ),
      ),
    );
  }
}

5. 注销用户

你可以使用 EasyFirebaseAuth 来注销当前用户:

ElevatedButton(
  onPressed: () async {
    await EasyFirebaseAuth().signOut();
    Navigator.of(context).pushReplacementNamed('/login'); // 注销后跳转到登录页面
  },
  child: Text('Logout'),
);
回到顶部