Flutter Modrinth API集成插件modrinth_api的使用

Flutter Modrinth API集成插件modrinth_api的使用

Modrinth API for Dart

非官方的Dart库,用于与Modrinth API交互!

此包当前针对Modrinth版本2.7.0/3b22f59


特性

功能 支持情况
使用facets搜索项目
自定义Modrinth实例支持
通过文件哈希获取版本
获取Modrinth实例统计数据
自动速率限制
对数据库进行修改的请求 ❌🕒: 计划在v1.0.0中实现

注意: 此库假定存在互联网连接。如果没有可用的连接,底层的http库将抛出异常。


提前访问

由于该包仍处于v0阶段,随时可能发生重大更改。

例如,目前大多数函数在找不到内容时会抛出异常。对于大多数函数来说,这很有意义,但对于某些函数(例如没有明确路径的情况,如搜索 -> 项目ID -> getProject() -> 版本ID -> getVersion()),它也会抛出异常,而不是返回空值。我希望对此进行更改,但函数的基础已经构建完成,因此使用它们应该只需稍作调整即可正常工作。


开始使用

在您的项目中安装库,如下所示,在终端中运行:

dart pub add modrinth_api

在使用API之前,导入并初始化API:

import "package:modrinth_api/modrinth_api.dart";

void main() async {
  final api = ModrinthApi(project: "my_test_project");
}

注意: 您必须为您的项目指定一个名称(更好的做法是插入您的GitHub用户名)。这样可以让API的开发者更容易看到谁正在使用此包,以防发生速率限制或上传内容出现问题。

如果您有API密钥,可以这样指定它:

final api = ModrinthApi(
  project: "my_test_project",
  apiKey: "my_api_key",
);

添加API密钥后,您可以访问以下功能:getAuthenticatedUsergetUserNotificationsgetUserFollowedProjectsgetUserPayoutHistory

如果您想使用staging API服务器(非常适合调试和测试目的)或仅使用另一个Modrinth实例,可以在构造函数中指定自定义的baseUrl,如下所示:

final api = ModrinthApi(
  project: "my_test_project",
  baseUrl: "https://staging-api.modrinth.com/v2",
);

确保在使用完ModrinthApi实例后将其释放,以防止即使代码已完成运行仍然出现挂起问题。

api.dispose();

使用方法

搜索项目

可以通过facets进行搜索。如何使用facets的具体说明可以在Modrinth文档中找到。

仅搜索mod的示例:

api.search(
  facets: FacetListBuilder()
    ..and(
      Facet(FacetType.project_type, "mod"),
    ),
);

您还可以使用or()来添加多个facets,以过滤任何提供的facets。

例如,搜索任何可能是mod的项目(and()),并且目标版本为1.19或1.19.1(or()),并将结果限制为5个:

final quiteExact = await api.search(
  facets: FacetListBuilder()
    ..and(
      Facet(FacetType.project_type, "mod"),
    )
    ..or(
      [
        Facet(FacetType.versions, "1.19"),
        Facet(FacetType.versions, "1.19.1"),
      ],
    ),
  limit: 5,
);

通过ID或slug获取项目

final exactProject = await api.getProject("P7dR8mSH");
// 或者:
final exactProject = await api.getProject("fabric-api");

通过ID获取版本

final exactVersion = await api.getVersion("nOI7bsDO");

注意: 您不能使用slug,因为版本没有slug。


通过文件哈希获取版本

注意,计算文件哈希需要一个库,例如crypto,如下所示:

import "dart:io";
import "package:crypto/crypto.dart";
import "package:modrinth_api/modrinth_api.dart";

void main() async {
  final api = ModrinthApi(project: "my_test_project");

  final File f = File("my_mod_jar.jar");

  final List<int> input = await f.readAsBytes();

  final String sha = sha1.convert(input).toString();

  final Version foundVersion = await api.getVersionFromHash(sha);
}

更多关于Flutter Modrinth API集成插件modrinth_api的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter Modrinth API集成插件modrinth_api的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


modrinth_api 是一个非官方的 Dart/Flutter 插件,用于与 Modrinth API 进行交互。Modrinth 是一个 Minecraft 模组托管平台,提供了丰富的 API 供开发者使用。通过 modrinth_api 插件,你可以方便地在 Flutter 应用中集成 Modrinth 的功能,比如搜索模组、获取模组信息、下载模组等。

安装 modrinth_api

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

dependencies:
  flutter:
    sdk: flutter
  modrinth_api: ^0.1.0  # 请检查最新版本

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

使用 modrinth_api

以下是一些基本的使用示例:

1. 初始化 Modrinth API 客户端

首先,你需要初始化一个 ModrinthClient 实例:

import 'package:modrinth_api/modrinth_api.dart';

final modrinthClient = ModrinthClient();

2. 搜索模组

你可以使用 searchMods 方法来搜索模组:

void searchMods() async {
  final result = await modrinthClient.searchMods(query: 'fabric');
  print(result);
}

searchMods 方法返回一个 SearchResult 对象,其中包含了搜索结果的相关信息。

3. 获取模组详情

你可以使用 getMod 方法来获取特定模组的详细信息:

void getModDetails(String modId) async {
  final mod = await modrinthClient.getMod(modId);
  print(mod);
}

getMod 方法返回一个 Mod 对象,其中包含了模组的详细信息。

4. 获取模组版本

你可以使用 getModVersions 方法来获取特定模组的所有版本:

void getModVersions(String modId) async {
  final versions = await modrinthClient.getModVersions(modId);
  print(versions);
}

getModVersions 方法返回一个 List<ModVersion>,其中包含了模组的所有版本信息。

5. 下载模组

你可以使用 downloadModVersion 方法来下载特定版本的模组文件:

void downloadModVersion(String versionId) async {
  final file = await modrinthClient.downloadModVersion(versionId);
  print('Mod downloaded to: ${file.path}');
}

downloadModVersion 方法返回一个 File 对象,表示下载的模组文件。

处理错误

在使用 API 时,可能会遇到各种错误,比如网络错误、API 限制等。你可以使用 try-catch 来捕获并处理这些错误:

void fetchModDetails(String modId) async {
  try {
    final mod = await modrinthClient.getMod(modId);
    print(mod);
  } catch (e) {
    print('Error fetching mod details: $e');
  }
}
回到顶部