Flutter Twitch认证插件flutter_twitch_auth的使用

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

Flutter Twitch认证插件flutter_twitch_auth的使用

该插件提供了通过模态框登录Twitch的功能。你可以获取由Twitch API提供的"code",以便创建自己的认证流程,或者在认证完成后获取用户对象。

创建者:Claudio Oliveira (Twitter)

Buy me a coffee ☕

Live Example

添加依赖

pubspec.yaml文件中添加以下依赖:

dependencies:
  flutter_twitch_auth: ^0.0.1 #最新版本

使用简单

初始化认证过程,并与Twitch API进行交互。

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

void main() {
  // 初始化Twitch认证插件
  FlutterTwitchAuth.initialize(
    twitchClientId: "<YOUR_CLIENT_ID>",
    twitchClientSecret: "<YOUR_CLIENT_SECRET>",
    twitchRedirectUri: "<YOUR_REDIRECT_URI>",
  );

  runApp(const MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp({Key? key}) : super(key: key);
  [@override](/user/override)
  Widget build(BuildContext context) {
    return const MaterialApp(
      title: 'Flutter Twitch Auth Example',
      home: MyHomePage(),
    );
  }
}

class MyHomePage extends StatefulWidget {
  const MyHomePage({Key? key}) : super(key: key);

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

class _MyHomePageState extends State<MyHomePage> {
  User? user;

  // 显示模态框并获取已登录用户数据
  void _handleTwitchSignIn() async {
    user = await FlutterTwitchAuth.authToUser(context);
    setState(() {});
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text("Flutter Twitch Auth Modal"),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            SizedBox(
              width: 240,
              child: user == null ? twitchButton() : TwitchUser(user!),
            ),
          ],
        ),
      ),
    );
  }

  // 创建Twitch登录按钮
  Widget twitchButton() {
    return ElevatedButton(
      onPressed: () => _handleTwitchSignIn(),
      child: Row(
        mainAxisAlignment: MainAxisAlignment.start,
        crossAxisAlignment: CrossAxisAlignment.center,
        children: [
          Image.asset(
            'assets/icons/twitch.png',
            width: 26,
            height: 26,
          ),
          const Expanded(
            child: Text(
              "Sign in with Twitch",
              textAlign: TextAlign.center,
              style: TextStyle(
                fontSize: 14,
                fontWeight: FontWeight.bold,
                color: Colors.white,
              ),
            ),
          ),
        ],
      ),
      style: ButtonStyle(
        shape: MaterialStateProperty.all<RoundedRectangleBorder>(
          RoundedRectangleBorder(
            borderRadius: BorderRadius.circular(100),
          ),
        ),
        backgroundColor: MaterialStateProperty.all<Color>(
          const Color(0xff9146ff),
        ),
        elevation: MaterialStateProperty.all<double>(3),
      ),
    );
  }
}

// 显示已登录用户信息
class TwitchUser extends StatefulWidget {
  final User user;
  const TwitchUser(this.user, {Key? key}) : super(key: key);

  [@override](/user/override)
  _TwitchUserState createState() => _TwitchUserState();
}

class _TwitchUserState extends State<TwitchUser> {
  late User user;

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

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Column(
      mainAxisAlignment: MainAxisAlignment.center,
      crossAxisAlignment: CrossAxisAlignment.center,
      children: [
        Row(
          mainAxisAlignment: MainAxisAlignment.center,
          crossAxisAlignment: CrossAxisAlignment.center,
          children: [
            SizedBox(
              width: 120,
              height: 120,
              child: ClipRRect(
                borderRadius: BorderRadius.circular(100),
                child: Container(
                  color: Colors.grey.shade300,
                  padding: const EdgeInsets.all(6),
                  child: ClipRRect(
                    borderRadius: BorderRadius.circular(100),
                    child: Image.network(
                      user.profileImageUrl!,
                      fit: BoxFit.cover,
                    ),
                  ),
                ),
              ),
            ),
          ],
        ),
        const SizedBox(height: 32),
        Text(
          "Hello, ${user.displayName}!",
          style: const TextStyle(
            fontSize: 18,
            fontWeight: FontWeight.bold,
          ),
        )
      ],
    );
  }
}

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

1 回复

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


当然,下面是一个关于如何使用 flutter_twitch_auth 插件进行 Twitch 认证的示例代码。这个插件允许你在 Flutter 应用中集成 Twitch OAuth 认证流程。

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

dependencies:
  flutter:
    sdk: flutter
  flutter_twitch_auth: ^最新版本号  # 请替换为实际的最新版本号

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

接下来,你需要配置你的 Twitch 开发者应用。前往 Twitch 开发者门户,创建一个新的应用,并获取你的 CLIENT_IDCLIENT_SECRET

以下是一个完整的 Flutter 应用示例,展示了如何使用 flutter_twitch_auth 进行认证:

import 'package:flutter/material.dart';
import 'package:flutter_twitch_auth/flutter_twitch_auth.dart';
import 'dart:convert';

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Twitch Auth Example',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: TwitchAuthScreen(),
    );
  }
}

class TwitchAuthScreen extends StatefulWidget {
  @override
  _TwitchAuthScreenState createState() => _TwitchAuthScreenState();
}

class _TwitchAuthScreenState extends State<TwitchAuthScreen> {
  final TwitchAuth _twitchAuth = TwitchAuth(
    clientId: 'YOUR_CLIENT_ID', // 替换为你的 CLIENT_ID
    redirectUri: 'YOUR_REDIRECT_URI', // 替换为你的 REDIRECT_URI
    clientSecret: 'YOUR_CLIENT_SECRET', // 替换为你的 CLIENT_SECRET
  );

  String _accessToken = '';
  String _userInfo = '';

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Flutter Twitch Auth Example'),
      ),
      body: Padding(
        padding: const EdgeInsets.all(16.0),
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            ElevatedButton(
              onPressed: () async {
                try {
                  final result = await _twitchAuth.authenticate();
                  setState(() {
                    _accessToken = result.accessToken;
                    // 你可以在这里使用 accessToken 获取用户信息
                    _fetchUserInfo(result.accessToken);
                  });
                } catch (e) {
                  print('Authentication failed: $e');
                }
              },
              child: Text('Authenticate with Twitch'),
            ),
            SizedBox(height: 20),
            Text('Access Token: $_accessToken'),
            SizedBox(height: 20),
            Text('User Info: $_userInfo'),
          ],
        ),
      ),
    );
  }

  Future<void> _fetchUserInfo(String accessToken) async {
    final url = Uri.parse('https://api.twitch.tv/helix/users');
    final response = await http.get(
      url,
      headers: <String, String>{
        'Client-ID': 'YOUR_CLIENT_ID', // 替换为你的 CLIENT_ID
        'Authorization': 'Bearer $accessToken',
      },
    );

    if (response.statusCode == 200) {
      final data = jsonDecode(response.body);
      final userInfo = data['data'][0];
      setState(() {
        _userInfo = jsonEncode(userInfo, prettyPrint: true);
      });
    } else {
      throw Exception('Failed to fetch user info: ${response.statusCode}');
    }
  }
}

在这个示例中:

  1. 我们创建了一个 TwitchAuth 实例,并传入了 CLIENT_ID, REDIRECT_URI, 和 CLIENT_SECRET
  2. 我们定义了一个按钮,当用户点击它时,会触发 Twitch 认证流程。
  3. 认证成功后,我们使用获取到的 accessToken 调用 Twitch API 获取用户信息。

请注意:

  • YOUR_CLIENT_ID, YOUR_REDIRECT_URI, 和 YOUR_CLIENT_SECRET 需要替换为你从 Twitch 开发者门户获取的实际值。
  • 这个示例假设你已经在 pubspec.yaml 文件中添加了 http 依赖来发送 HTTP 请求。你可以通过添加 http: ^0.13.3(或最新版本)来实现这一点。

希望这个示例能帮助你理解如何在 Flutter 应用中使用 flutter_twitch_auth 插件进行 Twitch 认证。

回到顶部