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密钥后,您可以访问以下功能:getAuthenticatedUser、getUserNotifications、getUserFollowedProjects 和 getUserPayoutHistory。
如果您想使用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
更多关于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');
}
}

