Flutter社交账号授权登录插件social_auth_buttons的使用

Flutter社交账号授权登录插件social_auth_buttons的使用

简介

social_auth_buttons 是一个用于Flutter应用中实现社交账号授权登录的插件。它支持多种流行的社交网络平台,如Google、Facebook、Twitter等,并且还支持传统的邮箱密码登录。

Pub Version license: MIT style: effective dart

推荐用法

我们推荐在需要使用特定按钮时,使用 show 关键字来导入部分库:

import 'package:social_auth_buttons/social_auth_buttons.dart'
    show GoogleAuthButton, AuthButtonStyle;

按钮样式

social_auth_buttons 提供了两种主要的按钮样式:

  1. 默认样式
  2. 图标样式

默认样式示例

GoogleAuthButton(
  onPressed: () {},
  darkMode: false,
),

GoogleAuthButton(
  onPressed: () {},
  darkMode: true,
),

图标样式示例

GoogleAuthButton(
  onPressed: () {},
  darkMode: false,
  style: AuthButtonStyle.icon,
),

GoogleAuthButton(
  onPressed: () {},
  darkMode: true,
  style: AuthButtonStyle.icon,
),

示例代码

以下是一个完整的示例代码,展示了如何使用 social_auth_buttons 插件来创建一个包含多种社交登录按钮的应用界面:

import 'package:social_auth_buttons/res/shared/colors.dart';
import 'package:social_auth_buttons/social_auth_buttons.dart';
import 'package:flutter/material.dart';

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

class MyApp extends StatefulWidget {
  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  String appName = 'Auth Buttons Example';
  bool darkMode = false;
  AuthButtonStyle? authButtonStyle;
  Color githubBtnColor = Colors.white;
  Color facebookBtnColor = Colors.white;

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: appName,
      home: Scaffold(
        appBar: AppBar(
          title: Text(appName),
        ),
        body: Container(
          width: double.infinity,
          color: darkMode ? Color(0xff303030) : Colors.white,
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: [
              ElevatedButton(
                onPressed: () => setState(() => darkMode = !darkMode),
                child: Text('Dark / Light mode'),
              ),
              ElevatedButton(
                onPressed: () => setState(() {
                  authButtonStyle =
                      authButtonStyle == null ? AuthButtonStyle.icon : null;
                }),
                child: Text('Icon / Extended mode'),
              ),
              ElevatedButton(
                onPressed: () => setState(() {
                  facebookBtnColor = facebookBtnColor == Colors.white
                      ? buttonFacebookColor
                      : Colors.white;
                  githubBtnColor = githubBtnColor == Colors.white
                      ? buttonGithubColor
                      : Colors.white;
                }),
                child: Text('GitHub and Facebook Button Color'),
              ),
              SizedBox(height: 50),
              GoogleAuthButton(
                onPressed: () {},
                darkMode: darkMode,
                style: authButtonStyle,
                width: authButtonStyle == null ? 300 : null,
              ),
              SizedBox(height: 10),
              AppleAuthButton(
                onPressed: () {},
                darkMode: darkMode,
                style: authButtonStyle,
                width: authButtonStyle == null ? 300 : null,
              ),
              SizedBox(height: 10),
              FacebookAuthButton(
                onPressed: () {},
                darkMode: darkMode,
                style: authButtonStyle,
                buttonColor: facebookBtnColor,
                width: authButtonStyle == null ? 300 : null,
              ),
              SizedBox(height: 10),
              GithubAuthButton(
                onPressed: () {},
                darkMode: darkMode,
                style: authButtonStyle,
                buttonColor: githubBtnColor,
                width: authButtonStyle == null ? 300 : null,
              ),
              SizedBox(height: 10),
              MicrosoftAuthButton(
                onPressed: () {},
                darkMode: darkMode,
                style: authButtonStyle,
                width: authButtonStyle == null ? 300 : null,
              ),
              SizedBox(height: 10),
              TwitterAuthButton(
                onPressed: () {},
                darkMode: darkMode,
                style: authButtonStyle,
                width: authButtonStyle == null ? 300 : null,
              ),
              SizedBox(height: 10),
              EmailPasswordAuthButton(
                onPressed: () {},
                darkMode: darkMode,
                style: authButtonStyle,
                width: authButtonStyle == null ? 300 : null,
              ),
            ],
          ),
        ),
      ),
    );
  }
}

通过上述代码,你可以快速地在你的Flutter应用中集成各种社交账号的授权登录按钮,并且可以根据需求自定义按钮的样式和行为。


更多关于Flutter社交账号授权登录插件social_auth_buttons的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter社交账号授权登录插件social_auth_buttons的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是如何在Flutter项目中使用social_auth_buttons插件来实现社交账号授权登录的代码案例。这个插件允许你轻松集成多个社交平台的登录功能,比如Google、Facebook、Twitter等。

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

dependencies:
  flutter:
    sdk: flutter
  social_auth_buttons: ^x.y.z  # 请替换为最新版本号

然后运行flutter pub get来安装依赖。

接下来,配置你的项目以支持社交登录。每个社交平台都有其特定的配置步骤,这里以Google登录为例。

Google 登录配置

  1. 在Firebase项目中添加Google登录支持

    • 前往Firebase控制台
    • 选择你的项目,点击左侧导航栏中的“Authentication”。
    • 在“Sign-in method”选项卡中,启用Google登录,并按照提示完成设置。
  2. 下载GoogleService-Info.plist(iOS)或 google-services.json(Android)

    • 前往Firebase控制台的项目设置,下载相应的配置文件。
    • 将文件放置在iOS项目的Runner目录(对于iOS)或Android项目的app目录(对于Android)中。
  3. 配置iOS项目

    • 打开Xcode,选择你的Runner项目。
    • Runner目标的General选项卡中,将Bundle Identifier设置为与Firebase项目中的一致。
    • Signing & Capabilities选项卡中,启用Sign in with AppleAssociated Domains(如果需要)。
    • 添加URL Scheme,例如com.googleusercontent.apps.YOUR_CLIENT_ID(从GoogleService-Info.plist中获取)。
  4. 配置Android项目

    • 打开android/app/build.gradle文件,确保添加了google-services插件依赖:

      classpath 'com.google.gms:google-services:4.3.10'  // 请替换为最新版本号
      
    • android/app/目录下,创建或更新google-services.json文件。

Flutter代码实现

在你的Flutter项目中,创建一个新的Dart文件(例如auth_service.dart),并添加以下代码来处理Google登录:

import 'package:flutter/material.dart';
import 'package:social_auth_buttons/social_auth_buttons.dart';
import 'package:firebase_auth/firebase_auth.dart';

class AuthService {
  final FirebaseAuth _auth = FirebaseAuth.instance;

  Future<User?> signInWithGoogle() async {
    // 触发Google登录按钮
    final GoogleSignInAccount? googleUser = await GoogleSignIn().signIn();

    if (googleUser == null) return null;

    // 获取Firebase凭证
    final GoogleSignInAuthentication googleAuth = await googleUser!.authentication;
    final AuthCredential credential = GoogleAuthProvider.getCredential(
      idToken: googleAuth.idToken,
      accessToken: googleAuth.accessToken,
    );

    // 使用凭证登录Firebase
    final UserCredential authResult = await _auth.signInWithCredential(credential);
    return authResult.user;
  }
}

然后,在你的主页面(例如main.dart)中,添加Google登录按钮:

import 'package:flutter/material.dart';
import 'package:social_auth_buttons/social_auth_buttons.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('Social Auth Demo'),
        ),
        body: Center(
          child: GoogleSignInButton(
            onPressed: () async {
              final User? user = await _authService.signInWithGoogle();
              if (user != null) {
                ScaffoldMessenger.of(context).showSnackBar(
                  SnackBar(content: Text('Signed in: ${user.email}')),
                );
              }
            },
            darkMode: false,  // 设置为true以启用深色主题按钮
          ),
        ),
      ),
    );
  }
}

这个示例展示了如何使用social_auth_buttons插件和Firebase Auth来实现Google登录。其他社交平台的登录步骤类似,但你需要参考相应平台的文档来获取特定的配置信息和凭证。

回到顶部