Flutter社交登录按钮插件flutter_signin_button的使用

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

Flutter社交登录按钮插件flutter_signin_button的使用

flutter_signin_button 是一个用于iOS和Android的Flutter插件,可以生成不同社交媒体账户的登录按钮。

欢迎提供反馈和Pull Requests!

安装 Installation

pubspec.yaml 文件中添加依赖:

dependencies:
  ...
  flutter_signin_button: ^2.0.0

使用示例 Usage Example

首先导入 flutter_signin_button.dart 文件:

import 'package:flutter_signin_button/flutter_signin_button.dart';

内置按钮 Built-in Buttons

SignInButton(
  Buttons.Google,
  onPressed: () {},
)

// 带自定义文本
SignInButton(
  Buttons.Google,
  text: "Sign up with Google",
  onPressed: () {},
)

小型按钮 Mini Buttons

SignInButton(
  Buttons.Facebook,
  mini: true,
  onPressed: () {},
)

自定义按钮 Self-build Buttons

SignInButtonBuilder(
  text: 'Sign in with Email',
  icon: Icons.email,
  onPressed: () {},
  backgroundColor: Colors.blueGrey[700]!,
)

内置按钮包括以下几种:

enum Buttons {
  Email,
  Google,
  GoogleDark,
  Facebook,
  FacebookNew,
  GitHub,
  LinkedIn,
  Pinterest,
  Tumblr,
  Twitter
}

更多详情请参阅 example 文件夹和源代码。

示例代码 Demo Code

下面是一个完整的示例代码,展示了如何使用 flutter_signin_button 插件来创建一个包含多种登录方式的应用程序界面。

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

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  /// 这是一个使用 `SignInButtonBuilder` 和 `SignInButton` 类的示例应用程序
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData.light(),
      home: Scaffold(
        backgroundColor: Color.fromRGBO(50, 50, 50, 1.0),
        body: SignInPage(),
      ),
      debugShowCheckedModeBanner: false,
    );
  }
}

class SignInPage extends StatelessWidget {
  /// 显示简单的 "___ Button Pressed" 提示信息
  void _showButtonPressDialog(BuildContext context, String provider) {
    Scaffold.of(context).showSnackBar(SnackBar(
      content: Text('$provider Button Pressed!'),
      backgroundColor: Colors.black26,
      duration: Duration(milliseconds: 400),
    ));
  }

  /// 通常登录按钮应该包含在 SignInPage 中
  @override
  Widget build(BuildContext context) {
    return Center(
      child: Column(
        mainAxisAlignment: MainAxisAlignment.center,
        children: <Widget>[
          SignInButtonBuilder(
            text: 'Get going with Email',
            icon: Icons.email,
            onPressed: () {
              _showButtonPressDialog(context, 'Email');
            },
            backgroundColor: Colors.blueGrey[700]!,
            width: 220.0,
          ),
          Divider(),
          SignInButton(
            Buttons.Google,
            onPressed: () {
              _showButtonPressDialog(context, 'Google');
            },
          ),
          Divider(),
          SignInButton(
            Buttons.GoogleDark,
            onPressed: () {
              _showButtonPressDialog(context, 'Google (dark)');
            },
          ),
          Divider(),
          SignInButton(
            Buttons.FacebookNew,
            onPressed: () {
              _showButtonPressDialog(context, 'FacebookNew');
            },
          ),
          Divider(),
          SignInButton(
            Buttons.Apple,
            onPressed: () {
              _showButtonPressDialog(context, 'Apple');
            },
          ),
          Divider(),
          SignInButton(
            Buttons.GitHub,
            text: "Sign up with GitHub",
            onPressed: () {
              _showButtonPressDialog(context, 'Github');
            },
          ),
          Divider(),
          SignInButton(
            Buttons.Microsoft,
            text: "Sign up with Microsoft ",
            onPressed: () {
              _showButtonPressDialog(context, 'Microsoft ');
            },
          ),
          Divider(),
          SignInButton(
            Buttons.Twitter,
            text: "Use Twitter",
            onPressed: () {
              _showButtonPressDialog(context, 'Twitter');
            },
          ),
          Divider(),
          Row(
            mainAxisAlignment: MainAxisAlignment.center,
            children: <Widget>[
              SignInButton(
                Buttons.LinkedIn,
                mini: true,
                onPressed: () {
                  _showButtonPressDialog(context, 'LinkedIn (mini)');
                },
              ),
              SignInButton(
                Buttons.Tumblr,
                mini: true,
                onPressed: () {
                  _showButtonPressDialog(context, 'Tumblr (mini)');
                },
              ),
              SignInButton(
                Buttons.Facebook,
                mini: true,
                onPressed: () {
                  _showButtonPressDialog(context, 'Facebook (mini)');
                },
              ),
              SignInButtonBuilder(
                icon: Icons.email,
                text: "Ignored for mini button",
                mini: true,
                onPressed: () {
                  _showButtonPressDialog(context, 'Email (mini)');
                },
                backgroundColor: Colors.cyan,
              ),
            ],
          ),
        ],
      ),
    );
  }
}

通过这个例子,你可以看到如何创建不同的登录按钮,并且每个按钮点击后会显示一条消息。你可以根据需要调整这些按钮的行为和样式。


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

1 回复

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


当然,以下是如何在Flutter项目中使用flutter_signin_button插件来创建社交登录按钮的代码示例。flutter_signin_button插件提供了一系列预定义的社交登录按钮,包括Google、Facebook、Twitter等,使得集成这些服务变得更加简单。

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

dependencies:
  flutter:
    sdk: flutter
  flutter_signin_button: ^2.0.0  # 请检查最新版本号

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

接下来,你可以在你的Flutter项目中使用这些按钮。下面是一个简单的示例,展示如何创建一个包含Google和Facebook登录按钮的页面:

import 'package:flutter/material.dart';
import 'package:flutter_signin_button/button_list.dart';
import 'package:flutter_signin_button/flutter_signin_button.dart';

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Social Login Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: SignInPage(),
    );
  }
}

class SignInPage extends StatefulWidget {
  @override
  _SignInPageState createState() => _SignInPageState();
}

class _SignInPageState extends State<SignInPage> {
  void _handleSignIn(SignInButton button) {
    // 根据按钮类型执行相应的登录逻辑
    if (button.buttonType == SignInButtonType.google) {
      print("Google Sign In Clicked");
      // 在这里添加Google登录逻辑
    } else if (button.buttonType == SignInButtonType.facebook) {
      print("Facebook Sign In Clicked");
      // 在这里添加Facebook登录逻辑
    }
    // 可以添加更多的按钮类型处理逻辑
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Social Login'),
      ),
      body: Padding(
        padding: const EdgeInsets.all(16.0),
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            SignInButton(
              Buttons.Google,
              onPressed: () => _handleSignIn(Buttons.Google),
            ),
            SizedBox(height: 20),
            SignInButton(
              Buttons.Facebook,
              onPressed: () => _handleSignIn(Buttons.Facebook),
            ),
          ],
        ),
      ),
    );
  }
}

在这个示例中,我们创建了一个简单的Flutter应用,其中包含一个Google登录按钮和一个Facebook登录按钮。当用户点击这些按钮时,会调用_handleSignIn方法,并打印出相应的信息。在实际应用中,你需要在_handleSignIn方法中添加具体的登录逻辑,比如调用相应的API进行身份验证。

请注意,flutter_signin_button插件只提供了按钮的UI部分,实际的登录逻辑需要你自己实现,比如使用Firebase Authentication进行Google和Facebook的登录。

回到顶部