Flutter Discord CDN资源访问插件discordcdn的使用

Flutter Discord CDN资源访问插件discordcdn的使用

使用Discord作为CDN。

将图片上传到Discord并使用其快速CDN提供服务。

如何使用

目前,您可以使用Bot HTTP REST API上传图片,该API在BotDiscordClient类中实现。在您的应用中使用它非常简单:

final botToken = '<bot_token>';
final channelId = '<channel_id>';

final discordClient = withBotToken(botToken);

final uploadImageResult = await discordClient.uploadImage(
    image: DiscordUploadableImage(
        bytes: dart_logo_bytes, // 这里替换为要上传的图片字节数据
        format: 'jpeg', // 图片格式
        name: 'my super cool image', // 图片名称
    ),
    channelId: channelId,
);

为什么使用discord-cdn.dart

开发此包的主要用例是为了给开发者(尤其是独立开发者)提供一种免费且快速存储和检索图片的方法。

副作用

由Dart null安全性和<a href="https://pub.dev/packages/dartz">dartz</a>单子提供支持,此包可以避免空值问题和副作用。这可以防止抛出开发者可能不知道或未捕获的任何异常,并确保通过合同保持信息的一致性。

uploadImage返回一个Either单子,要么在右侧返回Discord CDN上图片的URL,要么在左侧返回类型为几种可能的Discord API错误的ResponseError实例(有关可用错误请参阅这里)。

示例代码

有两个示例可以帮助您尝试使用discordcdn。最简单的示例是一个即将推出的Flutter Web应用程序,它会提示您所需的凭据(机器人令牌和频道ID)以及要上传的图片的URL。另一个示例是一个独立的Dart应用程序,位于cli文件夹中。

final botToken = '<bot_token>'; // 请替换为实际的机器人令牌

final channelId = '<channel_id>'; // 请替换为实际的频道ID

// 创建与机器人交互的Discord客户端
final discordClient = withBotToken(botToken);

// 上传图片
final uploadImageResult = await discordClient.uploadImage(
    image: DiscordUploadableImage(
        bytes: dart_logo_bytes, // 这里替换为要上传的图片字节数据
        format: 'jpeg', // 图片格式
        name: 'my super cool image', // 图片名称
    ),
    channelId: channelId,
);

// 输出结果
print(uploadImageResult);

exit(0);

更多关于Flutter Discord CDN资源访问插件discordcdn的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter Discord CDN资源访问插件discordcdn的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是如何在Flutter项目中集成并使用discordcdn插件来访问Discord CDN资源的示例代码。需要注意的是,discordcdn并不是一个官方或者广泛认知的Flutter插件,通常访问CDN资源会通过网络请求库如diohttp来实现。不过,为了符合你的要求,这里我将展示如何使用Flutter的http包来访问Discord CDN资源,这种方式在实际开发中非常常见。

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

dependencies:
  flutter:
    sdk: flutter
  http: ^0.13.3  # 请检查最新版本号

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

接下来,在你的Flutter项目中创建一个Dart文件(例如discord_cdn_service.dart),用于封装访问Discord CDN资源的逻辑:

import 'package:flutter/material.dart';
import 'package:http/http.dart' as http;
import 'dart:convert';

class DiscordCDNService {
  static const String baseUrl = 'https://cdn.discordapp.com';

  // 示例:获取一个图片的URL
  Future<Uint8List?> getImage(String imagePath) async {
    String url = '$baseUrl/$imagePath';
    try {
      var response = await http.get(Uri.parse(url));
      if (response.statusCode == 200) {
        return Uint8List.fromList(response.bodyBytes);
      } else {
        throw Exception('Failed to load image: ${response.statusCode}');
      }
    } catch (e) {
      print('Error fetching image: $e');
      return null;
    }
  }
}

然后,在你的Flutter组件中使用这个服务来加载并显示图片:

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: DiscordCDNExample(),
    );
  }
}

class DiscordCDNExample extends StatefulWidget {
  @override
  _DiscordCDNExampleState createState() => _DiscordCDNExampleState();
}

class _DiscordCDNExampleState extends State<DiscordCDNExample> {
  late Uint8List? imageBytes;

  @override
  void initState() {
    super.initState();
    loadImage();
  }

  Future<void> loadImage() async {
    // 替换为实际的Discord CDN图片路径
    String imagePath = 'attachments/820536161531240448/820536161864613888/image.png';
    imageBytes = await DiscordCDNService().getImage(imagePath);
    if (mounted) {
      setState(() {});
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Discord CDN Example'),
      ),
      body: Center(
        child: imageBytes != null
            ? Image.memory(imageBytes!)
            : CircularProgressIndicator(),
      ),
    );
  }
}

在这个示例中,DiscordCDNService类封装了访问Discord CDN的逻辑,getImage方法接受一个图片路径,并返回图片的字节数据。在DiscordCDNExample组件中,我们使用DiscordCDNService来加载图片,并在UI中显示它。

请确保替换imagePath变量中的值为实际的Discord CDN图片路径。

这个示例展示了如何在Flutter中通过HTTP请求访问Discord CDN资源,并显示图片。虽然没有一个名为discordcdn的官方Flutter插件,但使用http包或其他网络请求库可以很方便地实现这一功能。

回到顶部