Flutter GitHub登录插件github_signin_aksoyhlc的使用

Flutter GitHub登录插件github_signin_aksoyhlc的使用

在本教程中,我们将展示如何在Flutter应用中使用github_signin_aksoyhlc插件进行GitHub登录。该插件允许用户通过GitHub账号进行身份验证。

获取开始

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

dependencies:
  github_signin_aksoyhlc: any

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

示例 1

以下是一个简单的示例,展示了如何使用github_signin_aksoyhlc插件进行GitHub登录。

var params = GithubParamsModel(
  clientId: 'xxxxxx', // 替换为你的GitHub客户端ID
  clientSecret: 'yyyyyy', // 替换为你的GitHub客户端密钥
  callbackUrl: 'http://example.com', // 替换为你的回调URL
  scopes: 'read:user,user:email', // 设置所需的权限范围
);

GithubSignInResponse result = await GithubSignIn.signIn(context, params: params);

if (result.status != ResultStatus.success) {
  // 处理错误
  print(result.message);
} else {
  ///TODO: 使用结果数据
}

示例 2

另一种方式是使用Navigator来启动登录页面,并处理返回的结果。

var params = GithubParamsModel(
  clientId: 'xxxxxx', // 替换为你的GitHub客户端ID
  clientSecret: 'yyyyyy', // 替换为你的GitHub客户端密钥
  callbackUrl: 'http://example.com', // 替换为你的回调URL
  scopes: 'read:user,user:email', // 设置所需的权限范围
);

dynamic result = Navigator.push(
  context,
  MaterialPageRoute(builder: (context) => GithubSignIn(params: params)),
);

if (result == null) {
  // 用户取消了登录或发生错误
}

var data = result as GithubSignInResponse;

if (data.status != ResultStatus.success) {
  print(result.message);
}

///TODO: 使用响应数据

自定义AppBar

你还可以自定义登录页面的AppBar,以便更好地与你的应用设计保持一致。

GithubSignIn(
  params: params,
  appBar: PreferredSize(
    child: AppBar(
      title: Text("GitHub 登录"),
    ),
    preferredSize: const Size.fromHeight(56),
  ),
)

完整示例Demo

以下是完整的示例代码,包含了一个带有GitHub登录按钮的应用主页面。

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

void main() {
  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,
      ),
      home: const MyHomePage(title: 'Flutter Demo Home Page'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  const MyHomePage({super.key, required this.title});

  final String title;

  [@override](/user/override)
  State<MyHomePage> createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        backgroundColor: Theme.of(context).colorScheme.inversePrimary,
        title: Text(widget.title),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            ElevatedButton(
              onPressed: () {
                var params = GithubParamsModel(
                  clientId: 'xxxxxx', // 替换为你的GitHub客户端ID
                  clientSecret: 'yyyyyy', // 替换为你的GitHub客户端密钥
                  callbackUrl: 'http://example.com', // 替换为你的回调URL
                  scopes: 'read:user,user:email', // 设置所需的权限范围
                );

                dynamic result = Navigator.push(
                  context,
                  MaterialPageRoute(builder: (context) => GithubSignIn(params: params)),
                );

                if (result == null) {
                  // 用户取消了登录或发生错误
                }

                var data = result as GithubSignInResponse;

                if (data.status != ResultStatus.success) {
                  print(result.message);
                }
              },
              child: const Text("使用GitHub登录"),
            )
          ],
        ),
      ),
    );
  }
}

更多关于Flutter GitHub登录插件github_signin_aksoyhlc的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

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


当然,以下是如何在Flutter应用中使用github_signin_aksoyhlc插件来实现GitHub登录的一个示例代码案例。这个插件允许你通过GitHub OAuth进行用户身份验证。

首先,你需要在你的pubspec.yaml文件中添加依赖:

dependencies:
  flutter:
    sdk: flutter
  github_signin: ^0.4.0  # 请确保使用最新版本

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

接下来,你需要配置GitHub OAuth应用。在GitHub上创建一个新的OAuth应用,获取Client ID和Client Secret。

以下是一个完整的示例代码,展示如何使用github_signin_aksoyhlc插件:

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'GitHub Sign In Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: GitHubSignInPage(),
    );
  }
}

class GitHubSignInPage extends StatefulWidget {
  @override
  _GitHubSignInPageState createState() => _GitHubSignInPageState();
}

class _GitHubSignInPageState extends State<GitHubSignInPage> {
  final GitHubSignIn _gitHubSignIn = GitHubSignIn(
    clientId: 'YOUR_CLIENT_ID', // 替换为你的GitHub OAuth应用Client ID
    clientSecret: 'YOUR_CLIENT_SECRET', // 替换为你的GitHub OAuth应用Client Secret
  );

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('GitHub Sign In'),
      ),
      body: Center(
        child: ElevatedButton(
          onPressed: () async {
            try {
              // 触发GitHub登录流程
              final result = await _gitHubSignIn.signIn();
              if (result != null) {
                // 登录成功,处理用户信息
                print('User Name: ${result.name}');
                print('User Email: ${result.email}');
                print('User Avatar URL: ${result.avatarUrl}');
                print('User Token: ${result.token}');
                // 这里你可以将用户信息保存到本地或发送到服务器进行进一步处理
              }
            } catch (e) {
              // 处理错误
              print('Error: $e');
            }
          },
          child: Text('Sign In with GitHub'),
        ),
      ),
    );
  }
}

在这个示例中,你需要做以下几步:

  1. YOUR_CLIENT_IDYOUR_CLIENT_SECRET替换为你从GitHub获取的Client ID和Client Secret。
  2. 当用户点击“Sign In with GitHub”按钮时,会触发GitHub登录流程。
  3. 登录成功后,结果将包含用户的名字、邮箱、头像URL和访问令牌。
  4. 你可以根据需要对这些信息进行处理,比如保存到本地数据库或发送到服务器。

请注意,实际开发中处理用户敏感信息(如访问令牌)时,应确保遵循最佳安全实践,避免泄露或滥用。

回到顶部