Flutter GitHub登录插件github_sign_in_plus的使用

Flutter GitHub登录插件github_sign_in_plus的使用

在本教程中,我们将学习如何在Flutter应用中使用github_sign_in_plus插件来实现GitHub登录功能。该插件可以帮助我们轻松地集成GitHub登录到我们的应用中。

开始

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

dependencies:
  github_sign_in_plus: ^0.0.1

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

使用github_sign_in_plus插件

接下来,我们将创建一个简单的Flutter应用来演示如何使用github_sign_in_plus插件进行GitHub登录。

示例代码

以下是完整的示例代码:

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

void main() {
  runApp(MaterialApp(
    home: MyApp(),
  ));
}

class MyApp extends StatefulWidget {
  const MyApp({super.key});

  [@override](/user/override)
  State<MyApp> createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  final GitHubSignIn gitHubSignIn = GitHubSignIn(
    clientId: 'abd975f97f953c6e1843',
    clientSecret: '709fb6441354c8d148248ae2cab0673b4ce7f1d5',
    redirectUrl: 'https://l2t-flutter.firebaseapp.com/__/auth/handler',
    title: 'GitHub Connection',
    centerTitle: false,
  );

  [@override](/user/override)
  void initState() {
    super.initState();
  }

  // 执行GitHub登录
  void _gitHubSignIn(BuildContext context) async {
    var result = await gitHubSignIn.signIn(context);
    switch (result.status) {
      case GitHubSignInResultStatus.ok:
        print(result.token); // 打印获取到的token
        break;

      case GitHubSignInResultStatus.cancelled:
      case GitHubSignInResultStatus.failed:
        print(result.errorMessage); // 打印错误信息
        break;
    }
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text("GitHub Plus 示例"),
      ),
      body: Center(
        child: ElevatedButton(
          onPressed: () {
            _gitHubSignIn(context);
          },
          child: const Text("GitHub 连接"),
        ),
      ),
    );
  }
}

解释

  1. 导入必要的包

    import 'package:flutter/material.dart';
    import 'package:github_sign_in_plus/github_sign_in_plus.dart';
    
  2. 定义main函数

    void main() {
      runApp(MaterialApp(
        home: MyApp(),
      ));
    }
    
  3. 创建MyApp

    class MyApp extends StatefulWidget {
      const MyApp({super.key});
    
      [@override](/user/override)
      State<MyApp> createState() => _MyAppState();
    }
    
  4. 初始化_MyAppState状态

    class _MyAppState extends State<MyApp> {
      final GitHubSignIn gitHubSignIn = GitHubSignIn(
        clientId: 'abd975f97f953c6e1843',
        clientSecret: '709fb6441354c8d148248ae2cab0673b4ce7f1d5',
        redirectUrl: 'https://l2t-flutter.firebaseapp.com/__/auth/handler',
        title: 'GitHub Connection',
        centerTitle: false,
      );
    
  5. 定义_gitHubSignIn方法

    void _gitHubSignIn(BuildContext context) async {
      var result = await gitHubSignIn.signIn(context);
      switch (result.status) {
        case GitHubSignInResultStatus.ok:
          print(result.token); // 打印获取到的token
          break;
    
        case GitHubSignInResultStatus.cancelled:
        case GitHubSignInResultStatus.failed:
          print(result.errorMessage); // 打印错误信息
          break;
      }
    }
    
  6. 构建应用界面

    [@override](/user/override)
    Widget build(BuildContext context) {
      return Scaffold(
        appBar: AppBar(
          title: const Text("GitHub Plus 示例"),
        ),
        body: Center(
          child: ElevatedButton(
            onPressed: () {
              _gitHubSignIn(context);
            },
            child: const Text("GitHub 连接"),
          ),
        ),
      );
    }
    

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

1 回复

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


当然,以下是如何在Flutter项目中使用github_sign_in_plus插件来实现GitHub登录的一个示例。这个插件允许你通过GitHub OAuth进行用户认证。

首先,确保你已经在pubspec.yaml文件中添加了github_sign_in_plus依赖:

dependencies:
  flutter:
    sdk: flutter
  github_sign_in_plus: ^latest_version  # 替换为最新版本号

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

接下来,你需要配置GitHub OAuth应用。前往GitHub Developer Settings创建一个新的OAuth应用,并获取Client ID和Client Secret。

在你的Flutter项目中,创建一个新的Dart文件,比如auth_service.dart,来处理GitHub登录逻辑:

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

class AuthService {
  static final clientId = 'YOUR_CLIENT_ID';  // 替换为你的Client ID
  static final clientSecret = 'YOUR_CLIENT_SECRET';  // 替换为你的Client Secret
  static final redirectUri = 'YOUR_REDIRECT_URI';  // 替换为你的Redirect URI

  final GitHubSignInPlus _githubSignIn = GitHubSignInPlus(
    clientId: clientId,
    clientSecret: clientSecret,
    redirectUri: Uri.parse(redirectUri),
  );

  Future<Map<String, dynamic>?> signIn() async {
    try {
      final result = await _githubSignIn.signIn();
      if (result != null) {
        // 处理登录成功后的结果
        return result;
      }
    } catch (e) {
      // 处理错误
      print(e);
    }
    return null;
  }
}

在你的主应用文件中(通常是main.dart),你可以创建一个按钮来触发GitHub登录:

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('GitHub Login Example'),
        ),
        body: Center(
          child: ElevatedButton(
            onPressed: () async {
              final result = await AuthService().signIn();
              if (result != null) {
                // 显示登录结果,例如用户名
                ScaffoldMessenger.of(context).showSnackBar(
                  SnackBar(
                    content: Text('Logged in as ${result['login']}'),
                  ),
                );
                // 你可以在这里将用户信息保存到你的后端或本地存储
              }
            },
            child: Text('Sign in with GitHub'),
          ),
        ),
      ),
    );
  }
}

确保你的AndroidManifest.xmlInfo.plist文件中配置了必要的OAuth重定向URI(如果你的重定向URI是一个自定义的scheme,你需要在这些文件中声明它)。

对于Android,在AndroidManifest.xml中添加:

<intent-filter>
    <action android:name="android.intent.action.VIEW" />
    <category android:name="android.intent.category.DEFAULT" />
    <category android:name="android.intent.category.BROWSABLE" />
    <data android:scheme="your-custom-scheme" android:host="callback" />
</intent-filter>

对于iOS,在Info.plist中添加:

<key>CFBundleURLTypes</key>
<array>
    <dict>
        <key>CFBundleURLSchemes</key>
        <array>
            <string>your-custom-scheme</string>
        </array>
    </dict>
</array>
<key>LSApplicationQueriesSchemes</key>
<array>
    <string>safari-view-controller</string>
</array>

请确保将your-custom-scheme替换为你实际的自定义scheme。

这个示例代码展示了如何使用github_sign_in_plus插件进行GitHub OAuth认证,并在登录成功后显示用户信息。你可以根据需要对代码进行扩展,比如处理登录失败的情况,或者将用户信息保存到数据库。

回到顶部